Linux Mint 13 MATEを使用していますが、デバイスのプラグを抜き差しするときに通知を設定しようとしています。
まず最初に、私は dev-notify パッケージを見つけましたが、残念ながらほとんど機能しません:非常に短い時間(1〜2分)しか機能しないため、接続/切断するとどのデバイスでもクラッシュします:
Traceback (most recent call last):
File "./udev-notify.py", line 319, in <module>
notification.show()
glib.GError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.1061 was not provided by any .service files
解決策が見つからなかったため、削除する必要がありました。 (提出 バグレポート も)
驚いたことに、これまでに見つけた同様のユーティリティはありません。次に、すべてのデバイスに一致するはずのudevルールを記述しようとしました。新しいファイルを追加しました/etc/udev/rules.d/notify.rules
:
ACTION=="add", RUN+="/bin/bash /home/dimon/tmp/device_plug.sh"
ACTION=="remove", RUN+="/bin/bash /home/dimon/tmp/device_unplug.sh"
そして2つのスクリプト:
device_plug.sh:
#!/bin/bash
export DISPLAY=":0"
notify-send "device plugged"
/usr/bin/play -q /path/to/plug_sound.wav &
device_unplug.sh:
#!/bin/bash
export DISPLAY=":0"
notify-send "device unplugged"
/usr/bin/play -q /path/to/unplug_sound.wav &
動作しますが、非常にばかげています。私の質問は:
lsusb
出力で確認できるのと同じように、接続されているデバイスの実際のタイトルを取得する方法は?現在、「plugged」や「unpugged」などの通知を受け取ったばかりですが、udevルールでデバイスの名前を取得する方法を見つけることができません(可能であれば、それをスクリプトとしてスクリプトに渡します)パラメータ)lsusb
を実行すると、接続されたUSBスティックが単一のデバイスとして表示されます。したがって、ルールフィルターに引数を追加する必要があるようですが、わかりません。まあ、何時間もグーグルしてフォーラムで質問した後、私はそれを機能させたようです(そうです)。 USBデバイスが差し込まれたり差し込まれたりしたときに、ビジュアルまたはオーディオ、あるいはその両方の通知を受け取りたい場合は、誰でも私のスクリプトをインストールできます。以下のインストールの詳細を参照してください。
まず、自分の質問に答えます。
1。接続されているデバイスの実際のタイトルを取得する方法は、lsusb
の出力に表示されるのと同じですか?
カーネルにはそのようなタイトルはありません(一般的なケース)。多くのペアvendor_id:product_id
のタイトルを含むデータベースファイルがあり、通常は/usr/share/hwdata/usb.ids
ファイルです。このデータベースは/usr/sbin/update-usbids.sh
によって更新できます。 linux.org.r からの情報に感謝します。
vendor_id:product_id
のペアでデバイスのタイトルを取得するための特別なツールがあるかどうかわからないため、lsusb
とgrep
を使用して少しハックする必要がありました。たとえば、lsusb | grep '0458:003a'
2。現在、アクティブ化されている通知が多すぎます。たとえば、USBスティックを取り付けると、約15通の通知が届きました!
私はこれについてのルールを書く方法を理解していないことを認めなければなりませんが、私はそれをフィルタリングできる別の方法を見つけました。
udev
を使用すると、RUN+="..."
の代わりに使用できます。たとえば、バス番号とデバイス番号をそれぞれ$attr{busnum}
と$attr{devnum}
で取得できます。最初に、私のスクリプトでは、接続されたデバイスのリストを特殊ファイルに格納します。そのため、スクリプトが新しい「plug」イベントを取得し、このデバイスのbusnumおよびdevnumがすでにファイルに格納されている場合、通知は生成されません。次に、これらの置換$attr{busnum}
および$attr{devnum}
は、通常、「一連の」イベントのデバイスの1つでのみ使用できます。しかしとにかく、説明されたアルゴリズムはどのような場合でもそれを整理する必要があります。
現在のプロジェクトページ: my-udev-notify 。
次のようになります。
インストールの詳細。
Linux Mint 13でテストしましたが、Ubuntuおよび他のUbuntuの派生物で動作するはずです。udev
を使用する* nixシステムでも動作することを期待しています。
my-udev-notify.sh
の1つだけですが、アーカイブにはプラグ/アンプラグ通知のサウンドとその他の情報が含まれています。詳細については、readme.txt
をご覧ください。/etc/udev/rules.d/my-udev-notify.rules
を作成します(パスをmy-udev-notify.sh
を解凍した実際のパスに変更することを忘れないでください)。 ACTION=="add", RUN+="/bin/bash /path/to/my-udev-notify.sh -a add -p '%p' -b '$attr{busnum}' -d '$attr{devnum}'"
ACTION=="remove", RUN+="/bin/bash /path/to/my-udev-notify.sh -a remove -p '%p' -b '$attr{busnum}' -d '$attr{devnum}'"
この後、新しく接続されたデバイスで動作するはずです。つまり、デバイスのプラグを抜いても、通知は届きません。しかし、あなたがそれを再び差し込むとき、あなたはそうします。 (はい、私にとってはudevを再起動しなくても機能します。それができない場合は、再起動してみてください)
すべてのデバイスで機能させるには、システムを再起動するだけです。最初の起動時に多くの通知が表示される場合があることに注意してください(readme.txt
の既知の問題を参照)。 2回目の起動では通知はありません(システムがオフのときに新しいデバイスを接続しない限り)
あなたはそれをカスタマイズすることができます(視覚と音の通知をオン/オフにする、または音を変える)、詳細はアーカイブのreadme.txtをチェックしてください。