시스템화 된 사용자 서비스를 실행하여 절전 모드 (일명 일시 중지, 최대 절전 모드)에서 트리거하는 방법은 무엇입니까?

l0b0

다양한 출처를 바탕으로 내가 함께 뭉친다 ~/.config/systemd/user/screenlock.service.

[Unit]
Description=Lock X session
Before=sleep.target

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xautolock -locknow

[Install]
WantedBy=sleep.target

을 사용하여 활성화했습니다 systemctl --user enable screenlock.service. 그러나 재부팅, 로그인, 일시 중지 및 다시 시작 ( systemctl suspend뚜껑을 닫은 상태로 테스트 ) 한 후 화면이 잠기지 않고journalctl --user-unit screenlock.service . 내가 무엇을 잘못하고 있지?

실행 DISPLAY=:0 /usr/bin/xautolock -locknow하면 예상대로 화면이 잠 깁니다.

$ systemctl --version
systemd 215
+PAM -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR
$ awesome --version
awesome v3.5.5 (Kansas City Shuffle)
 • Build: Apr 11 2014 09:36:33 for x86_64 by gcc version 4.8.2 (nobody@)
 • Compiled against Lua 5.2.3 (running with Lua 5.2)
 • D-Bus support: ✔
$ slim -v
slim version 1.3.6

내가 실행하면 systemctl --user start screenlock.service즉시 화면 잠금을 나는에 로그 메시지가 journalctl --user-unit screenlock.service너무 ExecStart명확하게 맞습니다.

관련 .xinitrc섹션 :

xautolock -locker slock &

동일한 파일로 시스템 서비스를 만들면 작동합니다 (즉, slock재개 할 때 활성화 됨).

# ln -s "${HOME}/.config/systemd/user/screenlock.service" /usr/lib/systemd/system/screenlock.service
# systemctl enable screenlock.service
$ systemctl suspend

하지만 $HOME여러 가지 이유로 외부 사용자 별 파일을 추가하고 싶지 않습니다 .

  • 사용자 서비스는 시스템 서비스와 명확하게 분리되어야합니다.
  • 수퍼 유저 권한을 사용하지 않고 사용자 서비스를 제어해야합니다.
  • 구성은 쉽게 버전 관리되어야합니다.
user1686

sleep.target시스템 서비스에만 해당됩니다. 그 이유는 sleep.target잠에들 때 자동으로 활성화되는 마법 표적이 아니기 때문입니다 . 이 것을 그냥 일반 대상의 물론 '사용자 인스턴스 그래서 해당이되지 않습니다 - 잠 시스템. (불행히도 '사용자'인스턴스는 현재 시스템 전체 서비스에 의존 할 방법이 없습니다.)

(그리고 전체 "$ DISPLAY 하드 ​​코딩"사업이 있습니다. 다중 사용자 / 다중 사용자 Unix를 기반으로하는 OS에서 세션 매개 변수를 하드 코딩 할 때마다 루트가 새끼 고양이를 죽입니다.)

따라서이를 수행하는 두 가지 좋은 방법이 있습니다 (두 번째 방법을 제안합니다).

방법 1

시스템이 절전 모드로 전환 될 때 systemd-logind가 "모든 세션 잠금"신호를 브로드 캐스트하도록하는 시스템 서비스 (또는 systemd-sleep (8) 후크)를 만듭니다.

ExecStart=/usr/bin/loginctl lock-sessions

그런 다음 X11 세션 (예 : ~ / .xinitrc에서) 내에서 신호에 반응하는 무언가를 실행합니다.

systemd-lock-handler slock &
xss- lock-수면 슬록 무시 &

(GNOME, Cinnamon, KDE, Enlightenment는 이미 기본적으로 지원합니다.)

방법 2

X11 세션 내에서 , 예를 들어 systemd-logind의 "억제제"에 연결하여 잠자기 상태가되는 시스템 직접 감시 하는 무언가를 실행하십시오 .

앞서 언급 한 xss-lock은 명시적인 "lock all"신호 없이도 실제로 정확히 수행하므로 실행하는 것으로 충분합니다.

xss-lock slock &

slocksystemd-logind가 컴퓨터를 일시 중지 할 준비를하는 즉시 실행 됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관