USBデバイスを接続または取り外した後にスクリプトを自動実行する


22

USBデバイスのマウント/プラグインまたはアンマウント/アンプラグ後にスクリプトを自動的に実行するにはどうすればよいですか?


2
@XxxXxx:CuttlefishがUbuntu 12.10のリリースバージョンを持っていない限り、オプションではありません
ラドゥラディアナヌ


@グルタニメート:その質問は特定のUSBフラッシュドライブに関するものですが、一般的にはUSBデバイスについて尋ねました
ラドゥ・ラデアヌ

@Glutanimate:その質問からの回答は役に立つと言ってください。とにかく、USBデバイスを取り外した後、スクリプトを自動的に実行する方法については答えません。
ラドゥラデアヌ

1
「その質問からの回答は有用であると言ってください、とにかくUSBデバイスを取り外した後にスクリプトを自動的に実行する方法で答えません」「ACTION = 'add'」を「ACTION = 「削除」」、それは開始するのに適した場所です。
ブルージェイ

回答:


17

MinimusHeximusと、同様の質問に対するコメントで彼が言及したスレッドへのそれぞれの貢献者のおかげで、次の答えを提供できると思います。

次のようなUSBデバイスには5つのファイルが必要で、それぞれの値を入力するだけです<fortheseparts>

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

ノート:

  1. あなたは値をキャプチャすることができます<yourvendorid>し、<yourproductid>コマンドを入力してlsusbターミナルに-お使いのUSBデバイスが接続されている場合-のように、すべてのUSBデバイスは、現在利用可能な一覧が表示されますそのBus 003 Device 002: ID 8087:07da Intel Corp.場合は、8087があるベンダーID07daがあるのProductID
  2. そして、<yourdevice>いずれかであることができ、任意のあなたのUSBデバイスのために選択することができ名称、例えば、私は一般名「使用することを選択したキーボードを、それが差し込まれていますいつでも別のキーボードレイアウトを適用する必要私のUSBキーボードのため、このようなファイルを作成するとき」。
  3. いくつかのシナリオでは、何もする必要がない場合(たとえば、デバイスが変更されたときに行われた変更を元に戻す場合ACTION=="remove")、udevルールファイルの行を使用する必要がないout場合があります。プラグイン)デバイスがプラグアウトされた後。

これは私の初心者の観点からは間違っているように見えます。これらの句は同じ行にある必要はありませんか?
nafg

1
これは動作します:ACTION == "add"、ATTRS {idVendor} == "..."、ATTRS {idProduct} == "..."、ENV {XAUTHORITY} = "/ home / <user> /。Xauthority" 、ENV {DISPLAY} = ":0"、RUN + = "<script>"
nafg

@nafg:初心者の観点から、それらをすべて1行に(セパレータとしてカンマを使用して)udevルールファイルに入れても違いはありませんが、XAUTHORITYおよびDISPLAYパラメータをudevルールに追加したことがわかりますあなたまたは他の誰かのために働くかもしれません、その場合、それらは以下の2つのスクリプトファイルでもはや必要ではないのだろうかと思います。
サディ

1
はい、これがポイントです。udevでは環境を設定できるため、中間スクリプトは必要ありません(実際のスクリプトをバックグラウンドに置くことを除いて)。また、udevドキュメントからの私の理解は、各行は独立したルールであり、ファイル内の行は結合されないということです。
nafg

@nafg:貴重な貢献をありがとう。これらの環境をudevルールに移行しましたが、それも私にとってはうまくいきました。また、/ homeフォルダーを単独で別のパーティションに移動した後に問題が発生し始めたため、スクリプトを/ usr / local / binに移動しました(おそらく以前にマウントされていなかったため)。udevルールで改行を使用しても、少なくとも私のシステム(Ubuntu 13.04 64ビット)で問題が発生することはないようです。
サディ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.