"systemd-inhibit --what=idle"へのアクセスが拒否されました。

質問

Debian 12 では and を使用しますIdleAction=poweroff。これは期待どおりに機能し、十分に長い間アイドル状態になるとシステムは自動的にシャットダウンします。IdleActionSec=…logind.conf

systemd-inhibit --what=idle一般ユーザーのように使いたいです。私はこれが可能でなければならないことを発見しました(はい)。実際、これは私のDebian 12システムの1つで可能です。これをDebianと呼びます。成功;しかし、私は別のDebian 12システムを持っていますAccess denied失敗する。この機能が実際に必要なコンピュータがあります。失敗するグループ。

これは一時的な問題ではありません(「再起動が必要」ため)。私は再起動しました。成功マシンとワン失敗する、対応する動作がまだ存在します。

なぜ違いがありますか?私は何をすることができますか?失敗するシステムは次のように動作します。成功一つ?

私はカスタムラッパーのような回避策にあまり興味がありませんsudo。 「systemd-inhibit --what=idleただ働くこと」だと思います。成功システム。できるだけ「systemd/polkit book」で動作を調整したいと思います。


現在の行動

これがうまくいく方法です。成功システム。これが私が望むものです:

$ 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これは単なる例です。最終的には、いくつかの長期実行コマンドを呼び出したいので、これを抑制するのは完璧です。


詳細

  • 成功そして失敗するDebian 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、私は2つのシステム間のファイルが同じであると結論付けました。成功そして失敗する;操作されていません。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、私は2つのシステム間のファイルが同じであると結論付けました。成功そして失敗する;操作されていません。関連(?)部分:

    <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、私は2つのシステム間のファイルが同じであると結論付けました。成功そして失敗する;操作されていません。関連(?)部分:

    <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。まだそこにいる失敗するシステムが無視されるようです。

  • これ成功Debian はハードウェアを直接使用します。一つ失敗する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}]
    

    他のシステムは以下で提供される。失敗するグループは少し異なるワークセットを実行できますが、すべて同様に簡潔です。


観察する

大きな違い成功Debian とすべて失敗する1つはグラフィカルユーザーインターフェースです。はいXorgsddm関連プロセス成功。しかし、前述したように、私はGUIにまったくログインしません。この問題に関連しているかどうかはわかりません。たぶんこれはただの赤ニシンであるかもしれません。

ベストアンサー1

問題の作成時にpolkitd実行中であることがわかりました。成功システムですが、どのシステムにもありません。失敗する一つ。私はこの問題がpolkitとたくさん関連していることを知っているので、Debianで試してみました。失敗するグループ:

sudo apt-get install polkitd

はい、問題は解決しました。これで、systemd-inhibit --what=idle通常のユーザーとして使用できます。

私は思う成功Debianは、polkitd他のパッケージ(たとえばnetwork-manager)が依存しているためインストールされます。

この質問に私は直接答えることはできません。本当に助けが必要です。一例ゴム製アヒルのデバッグ、おそらく。

おすすめ記事