Arch Linux Systemd는 최대 절전 모드 이벤트를 감지하지 못합니다.

Arch Linux Systemd는 최대 절전 모드 이벤트를 감지하지 못합니다.

현재 랩톱이 잠자기 상태일 때마다 잠그는 시스템 서비스 설정이 있습니다 /etc/systemd/logind.conf.

HandleLidSwitch=hibernate

하지만 어떤 이유로 내 서비스가 실행되지 않습니다.

이것도 내 서비스야

[Unit]
Description=Lock X session using i3lock
Before=hibernate.target

[Service]
User=user
Environment=DISPLAY=:0
ExecStart=/home/user/scripts/locksleep.sh

[Install]
WantedBy=hibernate.target

서비스는 syslog에서도 호출되지 않습니다.

답변1

systemd-hibernate.service나는 이것이 실제로 시스템을 절전 모드로 전환하는 서비스가 되기 전에 귀하의 장치가 실행되어야 한다고 선언해야 한다고 생각합니다 .

(내 생각에는 귀하의 장치가 병렬로 실행 중이라면 systemd-hibernate.service스크립트가 실행되기 전에 시스템이 절전 모드로 전환될 가능성이 높습니다.)

따라서 Before=hibernate.target(필요하지 않은 것을) 로 바꾸십시오 . 또한 스크립트 실행이 완료될 때까지 기다리도록 systemd에 지시해야 하므로 해당 섹션 에 Before=systemd-hibernate.service추가해야 합니다 .Type=oneshot[Service]

나는 당신의 유닛도 활성화했다고 가정합니다. 왜냐하면 hibernate.target이 그것을 끌어오는 데 필요하기 때문입니다... 활성화하지 않으면 아무것도 트리거되지 않습니다.

그래서 이 정도면 잠자기 전에 장치가 제대로 작동하지 않는 문제를 해결하기에 충분할 것 같습니다...

그러나 원하는 작업을 수행하는 더 적절한 방법, 즉 최대 절전 모드 전에 화면을 잠그는 방법이 있다는 점에 유의하세요.

올바른 방법은억제제 인터페이스. 이 메커니즘을 설명하는 페이지에는 이 인터페이스의 용도 중 하나로 잠금 화면이 나열되어 있습니다.

화면 잠금 도구는 일시 중지 직전에 화면 잠금을 실행하고 일시 중지가 완료될 때까지 일시 중지를 연기하려고 합니다. 

간단히 말해서 D-Bus 클라이언트를 등록하고 최대 절전 모드가 발생하려고 할 때 알림을 받도록 systemd에 지정한 다음 PrepareForSleep()D-Bus의 신호를 모니터링하면 화면을 잠글 수 있습니다.

이상적으로는 이 작업이 화면 보호기 자체에서 수행되어야 하므로 지원을 추가하는 것이 이상적입니다.

억제기 인터페이스를 사용할 수 없는 경우 일시 중단하기 전에 스크립트를 실행하는 더 쉬운 방법은 아래에 스크립트를 넣은 다음 /usr/lib/systemd/system-sleep/전달된 인수를 확인하여 일시 중단 전에 호출되었는지 확인하는 것입니다. 이렇게 하면 서비스 장치에서 얻으려는 것과 동일한 효과를 얻을 수 있지만 설정이 훨씬 더 간단할 수 있습니다.

보다systemd-hibernate.service의 매뉴얼 페이지스크립트 작동 방식에 대한 system-sleep/자세한 내용 .

답변2

사실 제 노트북은 스왑 파티션이 없어서 최대 절전 모드로 들어갈 수 없다는 걸 깨달았어요

관련 정보