root 以外の x セッションに影響を与えるには、root としてスクリプトを実行します。

root 以外の x セッションに影響を与えるには、root としてスクリプトを実行します。

花飯で走ることができます。

DISPLAY=:0 notify-send hullo

そして私の虫歯セッションでこのメッセージを見てください。しかし、rootとしてログインすると機能しません。 ...でもない

USER=toothrot DISPLAY=:0 notify-send hullo

ルートで機能させるにはどうすればよいですか?

私はxセッションに影響を与えるudevルールを作成したいので、これが必要です。アーチを使用してください。

答え1

Xは2つの方法でクライアントに権限を付与できます。 1つの方法はクッキーを使用することです。次に、とDISPLAY=:0を設定する必要がありますXAUTHORITY=/home/yourusername/.Xauthority

あなたの場合は、xhostを介して完了したとします。それ以外の場合は、DISPLAYを設定するだけでは不十分です。xhost誰が承認されたかを確認するには、入力してください。

~/.Xauthorityたぶんクッキーと承認があるかもしれませんxhost +SI:localuser:toothrot

display:0を使用してrootアクセスを許可できますが、DISPLAY=:0 xhost +SI:localuser:rootこれは通常のユーザーとして実行する必要があります。クッキーを使用する方が良い方法です。

DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo

ユーザーとして通知を送信するには:

su toothrot -c 'DISPLAY=:0 XAUTHORITY=/home/toothrot/.Xauthority notify-send hullo'

答え2

おそらくあなたはずっと前に問題を解決しました。しかし、完成のための一般的な解決策は次のとおりです。ここ):

$ my_user="toothrot"
$ my_user_id=$(more /etc/passwd | awk -F: '/^'${my_user}':/ {print $3}')
$ sudo -u $my_user DISPLAY=':0' DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${my_user_id}/bus /usr/bin/notify-send "hullo"

複数の画面セッションが表示される場合は、マイルが異なる場合があります。ディスプレイ=":0"懸念される点は上記です。しかし、それは別の記事です。

答え3

上記の回答は少し粗雑で、複数のユーザーや複数のモニターでは正しく機能しません。ユーザーが~/.Xauthority保護されたファイルにシンボリックリンクを渡すと、昇格攻撃が発生する可能性があります。もう一つのオプションはudev完全に忘れて使用することです。ウデブ、自分のXセッションでroot以外のユーザーとして実行されます。~/.config/uudev.conf次の内容を含むファイルを設定するだけです。

* ACTION="bind", DRIVER="whatever", ...
notify-send hullo

または、ファイルsystemctl --user restart uudevで実行している場合は、設定された適切な変数でのみ実行されます。~/.xsession~/.xinitrcnotify-sendDISPLAYXAUTHORITY

関連情報