기본적으로 Systemd는 전원 버튼을 누르면 컴퓨터를 종료하도록 구성되어 있습니다. 내 사용자가 로그인하지 않는 한 이 동작을 유지하고 싶습니다. 로그인할 때 즉시 닫는 대신 닫기 대화 상자를 열고 싶습니다.
로그인할 때 시작되고 로그아웃할 때 중지되는 사용자 서비스 비활성화 systemd
처리를 구현했습니다. 이 방법은 호출을 위해 항상 열려 있는 systemd-inhibit
유휴 스레드가 있다는 점을 제외하면 훌륭하게 작동합니다 .sleep 1000d
정리하려면 스레드를 잠자지 않고 이 작업을 수행할 수 있는 방법을 찾고 있는데, 내 htop
.
이것은 내 사용자 서비스입니다.
[Unit]
Description=User daemon to disable systemd's handling of the power button
[Service]
ExecStart=nohup systemd-inhibit \
--what="handle-power-key" \
--who="disable-shutdown-button script" \
--why="allows i3 to open shutdown-dialog instead" \
sleep 1000d
[Install]
WantedBy=default.target
편집하다:로그인은 lightdm
디스플레이 관리자를 통해 이루어집니다.
답변1
systemd-inhibit
별도의 사용자 서비스로 설정하는 대신 시작 명령이나 GUI 로그인 세션에 중요한 명령 앞에 추가할 수 있습니다 .i3
systemd-inhibit
중요한 시스템 업데이트 작업을 실행하는 패키지 관리자 또는 이와 같은 디스크 굽기와 같은 특정 작업 중에 일시 중지/최대 절전 모드/종료와 같은 작업을 억제하는 방법을 제공하는 것이 목적이므로 이를 실행하려면 명령이 필요하도록 설계되었습니다. 억제가 필요한 작업이 종료되거나 어떤 이유로든 중단되면 억제가 자동으로 종료될 수 있습니다.
systemd-inhibit
이런 방식으로 세션 시작에 추가하는 것은 systemd
/가 logind
제어 그룹을 통해 세션에 속한 프로세스를 추적하기 때문에 중복된 것처럼 보일 수 있지만, 이것이 sleep
더미 명령이나 유사한 명령 없이 사용 패턴을 적합하게 만들 수 있는 유일한 방법입니다.
언급하신 댓글에서는 일반적으로 스크립트 로 실행 lightdm
됩니다 . 이 스크립트를 수정하거나 다음과 같은 오버레이 파일을 에 배치할 수 있습니다 . 이름은 직접 선택할 수 있지만 이름에는 접미사가 있어야 합니다 .lightdm-session
session-wrapper
/etc/lightdm/lightdm.conf.d/
.conf
[Seat:*]
session-wrapper=/usr/local/bin/shutdown-button-inhibit
스크립트는 /usr/local/bin/shutdown-button-inhibit
다음과 같습니다.
#!/bin/sh
if [ $(whoami) = "Julien" ] # edit this to match your username
then
exec systemd-inhibit \
--what="handle-power-key" \
--who="shutdown-button-inhibit script" \
--why="allows i3 to open shutdown-dialog instead" \
lightdm-session "$@"
else
exec lightdm-session "$@"
fi
이 스크립트를 확장자가 chmod 755 /usr/local/bin/shutdown-button-inhibit
.
사용하면 exec
스크립트 해석기가 lightdm-session
다른 프로세스로 대기하는 대신 자체적으로 교체됩니다.
lightdm
구성이 호출 이외의 다른 것으로 사용자 정의된 경우 lightdm-session
일치하도록 이 스크립트를 편집해야 합니다.