udev ルールに従って X ウィンドウを表示するスクリプトの実行

udev ルールに従って X ウィンドウを表示するスクリプトの実行

いくつかの問題を発見しましたhttp://unix.stackexchange.com&存在するhttp://stackoverflow.comudevルールの起動スクリプトに関連しています。ただし、実行する正確な解決策や具体的な答えが見つかりません。吹くスクリプト。

だから私は次のような(標準的な)質問をします。udevルールを介してBashスクリプトを実行/開始/実行する方法は?

また発見した事実udevルールの作成例:

udev はアクティブ端末でこれらのプログラムを実行せず、シェルコンテキストでは実行しません。プログラムが実行可能としてマークされていることを確認し、シェルスクリプトの場合は、適切なshebang(例:#!/ bin / sh)で始まることを確認し、端末に標準出力が表示されないようにしてください。

だから「走り方」が可能かどうか気になりました。バッシュスクリプトudevルールによると? 」


これはbashスクリプトを実行する簡単な例です。

99-myrule.rules私は何よりも次のような文章を書きました/etc/udev/rules.d

ACTION=="add", ATTR{idVendor}=="0781", ATTR{idProduct}=="5567", RUN+="/home/pandya/example.sh"

lsusb出力でベンダーと製品IDが見つかりました。

$ lsusb | grep SanDisk
Bus 001 Device 066: ID 0781:5567 SanDisk Corp. Cruzer Blade

zenity --info私のペンドライブ(上記のSanDisk)が接続されている間に実験的なコマンドを実行したいと思います。

だから私は/home/pandya/example.sh(udevルールで呼び出されるRUN+=)contiansを書いた:

#!/bin/bash
zenity --info &
exit

ただし、このスクリプトは実行されません(実行権限があるにもかかわらず)。また、以下を試しました。

  • export DISPLAY=:0前のスクリプトではzenity --info
  • bash -c 'DISPLAY=:0 zenity --info

そしてもちろん:

  • sudo restart udev
  • sudo udevadm control --reload-rules

ただし、出力を取得できませんzenity --info

だからudevルールを介してBashスクリプトを実行するには? もし欠けているものがあればご提案ください。

ベストアンサー1

ほとんどの場合、コマンドは実行中ですが、出力を表示する場所はわかりません。私は、root以外のユーザーを使用してXにログインしていて、ルールがrootとして実行される可能性が高いと仮定します。次のコマンドを試してください。

su - your_X_user_here -c 'export DISPLAY=:0;zenity --info'

実行のためバッシュスクリプト次のコマンドに従ってください。

su - your_X_user_here -c 'export DISPLAY=:0; bash -c "/path/to/script.sh"'

おすすめ記事