컴퓨터에 연결된 외부 기기들이 절전에서 깨우는 명령을 제멋대로 보내서 일어나는 문제이다. 해결 방법은 꽤나 복잡하다:
- 깨우기 명령을 보내는 포트를 알아낸다.
$ cat /proc/acpi/wakeup ... XHC0 S4 *enabled pci:0000:09:00.3 ...
- 각 포트가 어떤 기기에 연결되어있는지 알아본다. 아마 Phys 값을 들여다보면 되는 것 같다.
$ cat /proc/bus/input/devices ... I: Bus=... Vendor=... Product=... Version=... N: Name="Logitech USB Receiver" P: Phys=usb-0000:09:00.3-3/input0 S: Sysfs=... U: Uniq= H: Handlers=mouse0 event2 B: PROP=0 B: EV=... B: KEY=... B: REL=... B: MSC=... ...
- 의심스러운 녀석의 wakeup 기능을 꺼준다. 내 경우 무선 키보드 수신기가 연결된 단자가 의심스러웠다.
$ cat XHC0 | sudo tee /proc/acpi/wakeup
- 절전 모드로 들어가본다.
- 절전이 잘 되면 아마 된 것이다. 그렇지 않을 경우 3번 명령어를 다시 입력하면 wakeup 기능을 다시 켜준다. 다른 단자에도 하나씩 테스트해서 문제가 되는 녀석을 찾아보자.
- 이제 이 설정을 재부팅해도 유지하게 해야 한다. 기기의 ID를 찾아보자.
$ lsusb ... Bus 005 Device 003: ID 046d:c547 Logitech, Inc. USB Receiver ...
- 이 기기는 이제 wakeup을 빼앗길 것이다.
$ sudo vim /etc/udev/rules.d/logitech.rules ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c547", ATTR{power/wakeup}="disabled"
- 이제 재부팅해서 suspend가 잘 되는지 확인해보자. 안 되면 아래와 같이 로그를 찾아보길 바란다. 보통은 오타다.
$ journalctl -b0 | grep -F '/etc/udev/rules.d'