デスクトップ環境やセッションマネージャを使用せずに、セッションがアイドル状態ではないことをsystemd-logindにどのように通知できますか?

デスクトップ環境やセッションマネージャを使用せずに、セッションがアイドル状態ではないことをsystemd-logindにどのように通知できますか?

logind電源管理に使用したいです。 30分間アクティビティがない場合は、コンピュータを一時停止したいと思います。

問題は、今マウスとキーボードを使っても30分ほど経過すると止まります。私のものlogind.conf

[Login]
HandlePowerKey=suspend
IdleAction=suspend
IdleActionSec=30min

Ubuntu 15.04では最小限の設定しか使用しておらず、そのまま維持したいと思います。コンソールにログインし(セッション管理者は必要ありません)、と入力すると、startx私が~/.xinitrc好むi3ウィンドウマネージャが起動します。デスクトップ環境を使用したくありません。

特定の時間が経過すると、コンピュータが停止してロックされるようにしたいと思います。

したがって、私の~/.config/i3/configファイルには次のものが含まれます。

exec "xss-lock -- i3lock -c 000000"

画面ロックはうまく機能し、よく統合されています。だからそこに問題はありません。

興味があれば:

loginctl show-seat -p IdleHint

生産する:

IdleHint=yes

私が最初に出たら「いいえ」になるはずです。

私がこうすれば:

gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1/session/c1 --method org.freedesktop.login1.Session.SetIdleHint false

またはこれ:

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1/session/c1 "org.freedesktop.login1.Session.SetIdleHint" boolean:false

IdleHintを読むと、まだ「IdleHint = yes」が出力されます!

それでは、私が何を見逃しているのでしょうか?セッションマネージャやデスクトップ環境を使用せずにsystemd-logind活動中に停止を防ぐにはどうすればよいですか?

lxqt-powermanagementたとえば、を使用できることを知っていますが、不要だと思うのが正しいと思います。もちろん、デスクトップ環境の個人設定を変更できます。必要に応じてそうします。しかし、この問題は解決可能なようです。

ベストアンサー1

私がするとき

dbus-send --system --print-reply \
  --dest=org.freedesktop.login1 /org/freedesktop/login1/session/self \
  "org.freedesktop.login1.Session.SetIdleHint" boolean:false

わかりました。

Error org.freedesktop.DBus.Error.NotSupported: Idle hint control is not supported on non-graphical sessions.

これは、ログイン時にセッションがグラフィカルと見なされないという問題があることを示します。もちろん:

$ loginctl show-session --property=Type self
Type=tty

これがsddmを使用するのが役に立つ理由です。セッションタイプを設定します。

しかし、セッションタイプを手動で設定できますか?

org.freedesktop.login1(5)説明する:

SetType() を使用すると、セッションタイプを動的に変更できます。セッションの現在のコントローラーからのみ呼び出すことができます。 TakeControl() が呼び出されない場合、このメソッドは失敗します。また、制御が解除されると(ReleaseControl()を呼び出すかD-Bus接続を閉じる)、セッションタイプは元の値にリセットされます。これにより、セッションがコントローラの競合などの一貫性のない状態になるのを防ぐのに役立ちます。唯一のパラメータタイプは新しいセッションタイプです。

Xorgサーバーセッションコントローラになるただし、設定タイプがないため、セッションコントローラだけがこれを実行できるため、他の場所(xinitrc、xsessionなど)で設定することはできません。

しかし、これを行うためのややハッキング的な方法があります$XDG_SESSION_TYPEpam_systemd(8)。私はこれを入れてみました:/etc/systemd/system/[email protected]/override.conf

[Service]
Environment=XDG_SESSION_TYPE=x11

vt10にログインしてexec startx /etc/X11/XsessionIdleHintを更新すると、xss-lockによって更新されます。

より強力にするために、私の.bash_profileはセッションが$XDG_SESSION_TYPEプライマリであることを確認し(1つのセッションだけがその環境変数をユーザーのsystemdインスタンスにプッシュする必要があります)、Xを起動してvt10を非常に単純なデスクトップマネージャに切り替えます。 :-)

#!bash

if [[ ! $DISPLAY && $XDG_SESSION_TYPE == "x11" ]]; then
        [[ "$(loginctl show-user --property=Display "$USER")" == "Display=$XDG_SESSION_ID" ]] && primary=: || primary=
        journal=(/usr/bin/systemd-cat --priority=info --stderr-priority=warning --level-prefix=false)
        [[ $primary ]] && session=(/etc/X11/xinit/xinitrc) || session=(~/.xsession)

        exec startx "${journal[@]}" "${session[@]}"
        exit 1
fi

. ~/.bashrc

おすすめ記事