본문 바로가기

IT

LG 그램 17, 우분투에서 잠자기(Suspend) 가 정상적으로 작동하지 않는 경우

반응형

LG 그램 17 을 구매했는데, 우분투 설치 이후 LID(화면)을 닫으면 아주 잠깐 동안만 Suspend 가 유지되었다가, 자동으로 깨어나는 증상이 발생했습니다.


원인을 확인해 보니, USB 쪽의 신호가 wakeup 신호를 발생하는 것으로 확인되었습니다. 하여 wakeup 에서 USB 를 제외하는 방식으로 이를 해결하였습니다.


일단 자신의 PC 에서 wakeup 이 어떤 신호들에 의해서 수행되는지 확인하는 방법은 아래와 같습니다.


$ cat /proc/acpi/wakeup


LG 그램 17에 우부투 18.04 를 설치한 경우, 아래와 비슷한 조회 결과를 확인할 수 있을 겁니다.


Device    S-state      Status   Sysfs node
LID0      S3    *enabled   platform:PNP0C0D:00
PS2K      S3    *enabled   pnp:00:05
XHC      S4    *enabled  pci:0000:00:14.0
XDCI      S4    *disabled
HDAS      S4    *disabled  pci:0000:00:1f.3
RP01      S4    *disabled
PXSX      S4    *disabled
RP02      S4    *disabled
PXSX      S4    *disabled
RP03      S4    *disabled
PXSX      S4    *disabled
RP04      S4    *disabled
PXSX      S4    *disabled
RP05      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled  pci:0000:01:00.0
RP06      S4    *disabled
PXSX      S4    *disabled
RP07      S4    *disabled
PXSX      S4    *disabled
RP08      S4    *disabled
PXSX      S4    *disabled
RP09      S4    *disabled
PXSX      S4    *disabled
RP10      S4    *disabled
PXSX      S4    *disabled
RP11      S4    *disabled
PXSX      S4    *disabled
RP12      S4    *disabled
PXSX      S4    *disabled
RP13      S4    *disabled
PXSX      S4    *disabled
RP14      S4    *disabled
PXSX      S4    *disabled
RP15      S4    *disabled  pci:0000:00:1d.0
PXSX      S4    *disabled  pci:0000:3e:00.0
        *disabled  platform:rtsx_pci_sdmmc.0
        *disabled  platform:rtsx_pci_ms.0
RP16      S4    *disabled
PXSX      S4    *disabled
RP17      S4    *disabled
PXSX      S4    *disabled
RP18      S4    *disabled
PXSX      S4    *disabled
RP19      S4    *disabled
PXSX      S4    *disabled
RP20      S4    *disabled
PXSX      S4    *disabled
RP21      S4    *disabled
PXSX      S4    *disabled
RP22      S4    *disabled
PXSX      S4    *disabled
RP23      S4    *disabled
PXSX      S4    *disabled
RP24      S4    *disabled
PXSX      S4    *disabled
CNVW      S4    *disabled  pci:0000:00:14.3
PWRB      S4    *enabled   platform:PNP0C0C:00


위 목록 중에서 enabled 되어 있는 장치에 대해서 wakeup 을 처리하도록 되어 있습니다.

설치 후 확인해 보니 다음과 같은 장비가 enabled 되어 있었습니다.


Device    S-state      Status   Sysfs node
LID0      S3    *enabled   platform:PNP0C0D:00
PS2K      S3    *enabled   pnp:00:05
XHC      S4    *enabled  pci:0000:00:14.0
PWRB      S4    *enabled   platform:PNP0C0C:00


위 목록에서 LID0 은 화면뚜껑? 에 해당하는 기기이고, PS2K 는 키보드입니다. 그리고 PWRB 는 전원버튼이구요. 이 3가지에 대해서는 Suspend 기능이 유지되었으면 하므로 enabled 를 유지합니다.


그런데 XHC 라는 장치도 enabled 되어 있는데, 이것이 USB 장치입니다. 일단 저는 USB 장치를 외부 슬롯에 연결하지 않은 상태에서도 Suspend 가 풀리는 증상이 있는 것으로 보아, 내부 장치 중에서 USB 로 연결된 어느 장치가 wakeup 신호를 발생시키는 것이 아닌가 생각됩니다. (일단 저는 USB 장치로 인해서 wakeup 을 하지 않을 것이기 때문에, XHC 가 disabled 대상입니다.)


일단 타겟을 찾았고, 매번 부팅하고 나서 XHC를 disabled 하는 것이 귀찮은 일이므로 우분투의 systemd 를 사용하여 자동으로 disabled 시키는 방식으로 처리하였습니다.


일단 LID0, PS2K, PWRB 를 제외하고 나머지를 모두 disabled 하는 shell script 를 작성하였습니다.


/bin/sh -c 'for d in `cat /proc/acpi/wakeup | grep enabled | grep -v -E "PS2K|PWRB|LID0" | cut -b -4`; do echo $d > /proc/acpi/wakeup; done'


차근히 확인해보면 다음과 같습니다. cat /proc/acpi/wakeup 명령어를 이용하여 wakeup 목록을 조회하고 grep enabled 를 사용하여 enabled 항목을 추출합니다. 그리고 grep -v -E "정규식" 을 사용하여 정규식에 정의된 항목을 제외한 나머지 항목을 추출합니다. 그리고 cut 명령어를 이용하여 앞 4글자만 잘라낸 목록을 얻습니다. 그리고 echo 명령어를 이용하여 disabled 시키는 명령어를 반복 실행합니다.


1줄 요약하면, wakeup 목록에서 화면LID, 키보드, 파워버튼을 제외하고 enabled 된 장치를 disabled 시키는 명령어입니다.


위 명령어를 systemd service 로 등록하여 부팅때마다 자동실행되도록 하겠습니다.


아래 명령어를 이용하여 service 스크립트를 작성합니다.


$ sudo vi /etc/systemd/system/suspendfix.service


그리고 service 파일의 내용은 아래와 같이 작성합니다.


[Unit]
Description=Fix to prevent system from waking immediately after syspend

[Service]
ExecStart=/bin/sh -c 'for d in `cat /proc/acpi/wakeup | grep enabled | grep -v -E "PS2K|PWRB|LID0" | cut -b -4`; do echo $d > /proc/acpi/wakeup; done'
Type=oneshot
User=root
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target


파일을 저장하고, systemd 에 실행되도록 등록하는 명령어를 실행합니다.


$ sudo systemctl enabled suspendfix.service


이제 서비스에 등록되어 부팅시마다 작동하여 화면LID, 키보드, 전원버튼을 제외한 다른 장치에 의한 wakeup 을 방지할 수 있습니다.


즉시 실행하고 테스트 해보고 싶으시면 아래의 명령을 이용하여 서비스를 바로 실행해 볼 수 있습니다.


$ sudo systemctl start suspendfix.service


잘 작동되었다면 cat /proc/acpi/wakeup 목록을 다시 조회해보면 XHC 가 disabled 된 것을 확인할 수 있고, suspend 를 작동시켜보면 이전처럼 꺼졌다가 바로 wakeup 하는 증상이 사라진 것을 확인할 수 있습니다.


여기까지 LG 그램 17인치 모델에서 suspend 이후 바로 wakeup 하는 증상을 해결하는 방법이었습니다.

반응형