질문
Debian 12에서는 and 를 사용합니다 IdleAction=poweroff
. 이는 예상대로 작동하며, 충분히 오랫동안 유휴 상태가 되면 시스템이 자동으로 종료됩니다.IdleActionSec=…
logind.conf
systemd-inhibit --what=idle
일반 사용자처럼 사용하고 싶습니다 . 나는 이것이 가능해야 한다는 것을 발견했습니다(예). 사실 이것은 내 Debian 12 시스템 중 하나에서 가능합니다. 이를 Debian이라고 부르겠습니다.성공적인;그러나 나는 다른 Debian 12 시스템을 가지고 있습니다 Access denied
.실패하다. 이 기능이 실제로 필요한 컴퓨터가 있습니다.실패하다그룹.
이는 일시적인 문제가 아닙니다("재부팅이 필요"하기 때문입니다). 방금 다시 시작했어요성공적인기계와 하나실패하다, 해당 동작이 여전히 존재합니다.
왜 차이가 있나요? 내가 뭘 만들 수 있지?실패하다시스템은 다음과 같이 동작합니다.성공적인하나?
나는 맞춤형 래퍼와 같은 해결 방법에 별로 관심이 없습니다 sudo
. 나는 systemd-inhibit --what=idle
"그냥 일하는 것"이라고 생각한다.성공적인체계. 가능한 한 "systemd/polkit 책을 통해" 동작을 조정하고 싶습니다.
현재 행동
이것이 작동하는 방식입니다성공적인체계. 이것이 내가 원하는거야:
$ SYSTEMD_LOG_LEVEL=7 systemd-inhibit --what=idle true
Bus n/a: changing state UNSET → OPENING
sd-bus: starting bus by connecting to /run/dbus/system_bus_socket...
Bus n/a: changing state OPENING → AUTHENTICATING
Bus n/a: changing state AUTHENTICATING → HELLO
Sent message type=method_call sender=n/a destination=org.freedesktop.DBus path=/org/freedesktop/DBus interface=org.freedesktop.DBus member=Hello cookie=1 reply_cookie=0 signature=n/a error-name=n/a error-message=n/a
Got message type=method_return sender=org.freedesktop.DBus destination=:1.75 path=n/a interface=n/a member=n/a cookie=1 reply_cookie=1 signature=s error-name=n/a error-message=n/a
Bus n/a: changing state HELLO → RUNNING
Sent message type=method_call sender=n/a destination=org.freedesktop.login1 path=/org/freedesktop/login1 interface=org.freedesktop.login1.Manager member=Inhibit cookie=2 reply_cookie=0 signature=ssss error-name=n/a error-message=n/a
Got message type=method_return sender=:1.7 destination=:1.75 path=n/a interface=n/a member=n/a cookie=149 reply_cookie=2 signature=h error-name=n/a error-message=n/a
Successfully forked off '(inhibit)' as PID 3384.
Skipping PR_SET_MM, as we don't have privileges.
true succeeded.
Bus n/a: changing state RUNNING → CLOSED
$ echo $?
0
$
이것이 실패하는 방식이다실패하다체계:
$ SYSTEMD_LOG_LEVEL=7 systemd-inhibit true
Bus n/a: changing state UNSET → OPENING
sd-bus: starting bus by connecting to /run/dbus/system_bus_socket...
Bus n/a: changing state OPENING → AUTHENTICATING
Bus n/a: changing state AUTHENTICATING → HELLO
Sent message type=method_call sender=n/a destination=org.freedesktop.DBus path=/org/freedesktop/DBus interface=org.freedesktop.DBus member=Hello cookie=1 reply_cookie=0 signature=n/a error-name=n/a error-message=n/a
Got message type=method_return sender=org.freedesktop.DBus destination=:1.44 path=n/a interface=n/a member=n/a cookie=1 reply_cookie=1 signature=s error-name=n/a error-message=n/a
Bus n/a: changing state HELLO → RUNNING
Sent message type=method_call sender=n/a destination=org.freedesktop.login1 path=/org/freedesktop/login1 interface=org.freedesktop.login1.Manager member=Inhibit cookie=2 reply_cookie=0 signature=ssss error-name=n/a error-message=n/a
Got message type=error sender=:1.1 destination=:1.44 path=n/a interface=n/a member=n/a cookie=464 reply_cookie=2 signature=s error-name=org.freedesktop.DBus.Error.AccessDenied error-message=Permission denied
Failed to inhibit: Access denied
Bus n/a: changing state RUNNING → CLOSED
$ echo $?
1
$
true
이것은 단지 예일 뿐입니다. 궁극적으로 몇 가지 장기 실행 명령을 호출하고 싶고 이를 억제하는 것이 완벽합니다.
세부 사항
성공적인그리고실패하다데비안 12 입니다.
커널 활성화성공적인그리고 각각실패하다예
6.1.0-17-amd64
.출력
id
:@Successful $ id uid=1000(kamil) gid=1000(kamil) groups=1000(kamil),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),111(bluetooth),113(lpadmin),117(scanner),124(pcspkr)
@Failing1 $ id uid=1000(kamil) gid=1000(kamil) groups=1000(kamil),4(adm),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev)
모든 시스템에
/usr/bin/systemd-inhibit
동일한 정보가 주어졌을 때md5sum
, 나는 두 시스템 사이의 파일이 동일하다는 결론을 내렸습니다.성공적인그리고실패하다;조작되지 않았습니다.ls -l /usr/bin/systemd-inhibit
인쇄:-rwxr-xr-x 1 root root 22928 11-10 01:25 /usr/bin/systemd-inhibit
모든 시스템에
/usr/share/dbus-1/system.d/org.freedesktop.login1.conf
동일한 정보가 주어졌을 때md5sum
, 나는 두 시스템 사이의 파일이 동일하다는 결론을 내렸습니다.성공적인그리고실패하다;조작되지 않았습니다. 관련(?) 부분:<busconfig> <policy user="root"> <allow own="org.freedesktop.login1"/> <allow send_destination="org.freedesktop.login1"/> <allow receive_sender="org.freedesktop.login1"/> </policy> <policy context="default"> <deny send_destination="org.freedesktop.login1"/> [...] <allow send_destination="org.freedesktop.login1" send_interface="org.freedesktop.login1.Manager" send_member="Inhibit"/> [...] <allow receive_sender="org.freedesktop.login1"/> </policy> </busconfig>
모든 시스템에
/usr/share/polkit-1/actions/org.freedesktop.login1.policy
동일한 정보가 주어졌을 때md5sum
, 나는 두 시스템 사이의 파일이 동일하다는 결론을 내렸습니다.성공적인그리고실패하다;조작되지 않았습니다. 관련(?) 부분:<policyconfig> [...] <action id="org.freedesktop.login1.inhibit-block-idle"> <description gettext-domain="systemd">Allow applications to inhibit automatic system suspend</description> <message gettext-domain="systemd">Authentication is required for an application to inhibit automatic system suspend.</message> <defaults> <allow_any>yes</allow_any> <allow_inactive>yes</allow_inactive> <allow_active>yes</allow_active> </defaults> </action> [...] </policyconfig>
그래서
<allow_any>yes</allow_any>
일반유저를 위한 능력이라고 하는거겠죠systemd-inhibit --what=idle
. 아직 거기 있어실패하다시스템이 무시되는 것 같습니다.이것성공적인데비안은 하드웨어를 직접 사용합니다. 하나실패하다HP ProLiant DL380 G5에 설치된 Debian;실패하다Debian은 VMware ESXi 7의 가상 머신입니다.
나는
ssh
연결하는 데 사용성공적인시스템과 각각실패하다하나. 이것성공적인시스템은 GUI를 제공하지만 "만약을 대비해" 현재sddm
는 그냥 거기에 있고 저는 그런 식으로 로그인하지 않습니다.출력
pstree -lu
:@Successful $ pstree -lu systemd-+-ModemManager---2*[{ModemManager}] |-NetworkManager---2*[{NetworkManager}] |-accounts-daemon---2*[{accounts-daemon}] |-atop |-atopacctd |-avahi-daemon(avahi)---avahi-daemon |-blkmapd |-bluetoothd |-cron |-cups-browsed---2*[{cups-browsed}] |-cupsd |-dbus-daemon(messagebus) |-dhcpd |-exim4(Debian-exim) |-hostapd |-nfsdcld |-openvpn |-polkitd(polkitd)---2*[{polkitd}] |-rpc.idmapd |-rpc.mountd |-rpc.statd(statd) |-rpcbind(_rpc) |-rtkit-daemon(rtkit)---2*[{rtkit-daemon}] |-sddm-+-Xorg---10*[{Xorg}] | |-sddm-helper---sddm-greeter(sddm)---11*[{sddm-greeter}] | `-{sddm} |-smartd |-sshd-+-sshd---sshd(bisztynek) | `-sshd---sshd(kamil)---bash---tmux: client |-systemd(sddm)-+-(sd-pam) | |-dbus-daemon | `-pulseaudio-+-gsettings-helpe---3*[{gsettings-helpe}] | `-2*[{pulseaudio}] |-systemd(kamil)-+-(sd-pam) | |-dbus-daemon | `-pulseaudio-+-gsettings-helpe---3*[{gsettings-helpe}] | `-{pulseaudio} |-systemd(bisztynek)-+-(sd-pam) | |-dbus-daemon | `-pulseaudio-+-gsettings-helpe---3*[{gsettings-helpe}] | `-{pulseaudio} |-systemd-journal |-systemd-logind |-systemd-timesyn(systemd-timesync)---{systemd-timesyn} |-systemd-udevd |-tmux: server(kamil)---bash---pstree |-transmission-da(debian-transmission)---3*[{transmission-da}] |-udisksd---4*[{udisksd}] |-upowerd---2*[{upowerd}] `-wpa_supplicant
@Failing1 $ pstree -lu systemd-+-VGAuthService |-agetty |-cron |-dbus-daemon(messagebus) |-dhclient |-nmbd |-rsyslogd---3*[{rsyslogd}] |-smbd-+-cleanupd | |-smbd | `-smbd-notifyd |-sshd---sshd---sshd(kamil)---bash---tmux: client |-systemd(kamil)---(sd-pam) |-systemd-journal |-systemd-logind |-systemd-timesyn(systemd-timesync)---{systemd-timesyn} |-systemd-udevd |-tmux: server(kamil)-+-2*[bash---nano] | `-bash---pstree `-vmtoolsd---2*[{vmtoolsd}]
다른 시스템은 다음에서 제공됩니다.실패하다그룹은 약간 다른 작업 세트를 실행할 수 있지만 모두 비슷하게 간결합니다.
관찰하다
큰 차이성공적인데비안과 모든실패하다하나는 그래픽 사용자 인터페이스입니다. 예 Xorg
, sddm
그리고 관련 프로세스성공적인. 하지만 앞서 말했듯이 저는 GUI에 전혀 로그인하지 않습니다. 이 문제와 관련이 있는지는 모르겠습니다. 어쩌면 이것은 단지 붉은 청어일지도 모릅니다.
답변1
문제를 생성할 때 polkitd
실행 중이라는 것을 알았습니다.성공적인시스템이지만 어떤 시스템에도 없습니다.실패하다하나. 나는 이 문제가 polkit과 많은 관련이 있다는 것을 알고 있으므로 Debian에서 시도해 보았습니다.실패하다그룹:
sudo apt-get install polkitd
예, 문제가 해결되었습니다. 이제 systemd-inhibit --what=idle
일반 사용자로 사용할 수 있습니다.
나는 생각한다성공적인Debian은 polkitd
다른 패키지(예 network-manager
: )가 의존하기 때문에 설치됩니다.
이 질문에 제가 직접 대답할 수는 없습니다. 정말 도움이 필요합니다. 한 가지 예고무 오리 디버깅, 아마도.