UDEV: RUN+="/usr/bin/setsid /usr/bin/nautilus" が機能しません。 Xユーザーでこれを検出して実行する理由と方法は何ですか?

UDEV: RUN+="/usr/bin/setsid /usr/bin/nautilus" が機能しません。 Xユーザーでこれを検出して実行する理由と方法は何ですか?

~から手動udev

これは、非常に短期的に実行されるフォアグラウンドジョブでのみ使用できます。長期実行イベントプロセスは、そのデバイスまたはスレーブデバイスに対するすべての追加イベントをブロックできます。

私はこれをやっています:

KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{ro}=="0", ATTR{removable}=="1", SUBSYSTEMS=="usb", DRIVERS=="usb-storage", SYMLINK+="usb_%E{ID_VENDOR}_%E{ID_MODEL}_%E{ID_SERIAL_SHORT}"
ACTION=="add", KERNEL=="sd[a-z]", SUBSYSTEM=="block", ATTR{ro}=="0", ATTR{removable}=="1", SUBSYSTEMS=="usb", DRIVERS=="usb-storage", RUN+="/usr/bin/setsid /usr/bin/nautilus"

果たしてセシド新しいセッションでプログラムを実行する

私は走っていますXように: ルート 937 1.4 1.3 179992 26328 xinit /root/.xinitrc 経由の tty2 S

答え1

X11プログラムを実行するには、ウィンドウをどこに配置するかを教えてください。これはDISPLAY環境変数を介して行われます。

コンソールにログインしているユーザーがいる場合、通常は対応するディスプレイがあります:0(ただし、複数のものがあり、:0コンソールではなくXサーバーで使用できます)。したがって、以下を含むスクリプトを実行する必要があります。

#!/bin/sh
export DISPLAY=:0
setsid nautilus &

あなたは必要かもしれませんXAUTHORITY設定に加えてDISPLAY

しかし、これは間違ったアプローチです。コンソールにログインしたユーザーがいない場合はどうなりますか?コンソールユーザーが複数人の場合はどうなりますか? X Cookieファイルがルートに直接アクセスできないFUSEファイルシステムにある場合はどうなりますか?

udevがデスクトップアプリケーションに通知できるメカニズムがあります。Dバス。多くのデスクトップ環境では、この機能を使用してリムーバブルデバイスを接続するときにファイルマネージャウィンドウがポップアップするようにスケジュールします。正確にはどのように動作するのか分かりませんが、それはあなたが調査する必要があります。

関連情報