mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 09:17:14 +08:00 
			
		
		
		
	Instead of using systemd oneshot services that have to be careful to not toggle wakeups back on, use a udev rule to disable wakeups by device ID. On a B550 Vision D, these do almost the same thing: ```` $ lspci -n | grep 1022:1483 00:01.1 0604: 1022:1483 00:01.2 0604: 1022:1483 00:03.1 0604: 1022:1483 $ cat /proc/acpi/wakeup Device S-state Status Sysfs node ... GPP0 S4 *disabled pci:0000:00:01.1 GPP8 S4 *disabled pci:0000:00:03.1 ```` Two of the three devices with the PCI vendor/device ID specified by the udev rule correspond to devices previously disabled via ACPI (if I understand correctly disabling these via either /proc/acpi/wakeup or udev device attribute has the same effect). The third device is (like the other two) using the "pcieport" driver. Using a device connected via that port as a wakeup device still works.
		
			
				
	
	
		
			14 lines
		
	
	
		
			611 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			14 lines
		
	
	
		
			611 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  # Work around an issue causing the system to unsuspend immediately after suspend
 | 
						|
  # and/or hang after suspend.
 | 
						|
  #
 | 
						|
  # See https://www.reddit.com/r/gigabyte/comments/p5ewjn/comment/ksbm0mb/ /u/Demotay
 | 
						|
  #
 | 
						|
  # Most suggestions elsewhere are to disable GPP0 and/or GPP8 using /proc/acpi/wakeup, but that is
 | 
						|
  # inconvenient because it toggles. This does essentially the same thing using udev, which can set
 | 
						|
  # the wakeup attribute to a specific value.
 | 
						|
  services.udev.extraRules = ''
 | 
						|
    ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x1022", ATTR{device}=="0x1483", ATTR{power/wakeup}="disabled"
 | 
						|
  '';
 | 
						|
}
 |