전원 버튼을 (깨끗하게) 비활성화하는 방법은 무엇입니까?

전원 버튼을 (깨끗하게) 비활성화하는 방법은 무엇입니까?

기본적으로 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-sessionsession-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일치하도록 이 스크립트를 편집해야 합니다.

관련 정보