既存の問題systemdが起動した後にユーザースクリプトを実行する方法は?睡眠から目覚めた後にスクリプトを実行できる答えはすでにあります。ただし、この問題に対して提供されるソリューションには、ユーザーのためのハードコーディングが必要です。
現在記録されているすべてのグラフィックデスクトップセッションで自動的に実行されるスクリプトを生成するにはどうすればよいですか?(つまり、高速ユーザー切り替え/「アカウント切り替え」を使用して複数の仮想端末で複数のデスクトップを並列に実行するときは、正しい環境変数値を使用して各ユーザーに対してスクリプトを実行する必要がありますDISPLAY
。XAUTHORITY
)
私は個人的にこれを使用してlightdm
新しいセッションを作成するか、既存のセッションに再度ログインしますが、ディスプレイマネージャ独立ソリューションを好む。
答え1
回復時にログインしたX.orgユーザーを列挙し、必要なものをすべて実行できます。現在ログインしているユーザーのリストを取得する方法には多くのソリューションがありますが、ほとんどは古く、最新のLinuxディストリビューションでは機能しない可能性があります。w
たとえばwho
、last
私のFedora 36システムでは何も返しませんw
。最後の項目を表示:who
last
reboot
last | head -1
reboot system boot 5.19.4-az2 Sun Sep 4 01:56 still running
それがあなたに役立つなら、あなたはそれを使うことができます。
以下は、2022年9月から適用されるべき現代的なアプローチです(Linuxへのタイムスタンプの答えは常に良い考えです)。
$ loginctl --no-legend list-sessions # or run it without any parameters
SESSION UID USER SEAT TTY
2 1000 birdie seat0 tty7
またはgdbus
プログラミングに情熱がある場合:
$ gdbus call --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1 --method org.freedesktop.login1.Manager.ListSessions
([('2', uint32 1000, 'birdie', 'seat0', objectpath '/org/freedesktop/login1/session/_32')],)
続けて一緒にしましょうloginctl
。 Xorgがユーザーに表示する内容を理解したい場合があります。方法は次のとおりです。
#! /bin/bash
for session in `loginctl --no-legend list-sessions | awk '{print $1}'`; do
echo -e "ID\tName\tDisplay"
eval `loginctl show-session $session | egrep '^Display|^User|^Name'`
echo -e "$User\t$Name\t$Display"
done
# output
ID Name Display
1000 birdie :0
echo
ステートメントの代わりに必要なものを実行できます。
export XAUTHORITY="`getent passwd $Name | cut -f6 -d:`/.Xauthority"
export DISPLAY=$Display
command