回答:
systemdには、より優れたソリューションがあります。メディアに依存し、希望するサービスを作成します。例:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
次に、サービスを開始/有効化する必要があります。
sudo systemctl start your.service
sudo systemctl enable your.service
マウント後、systemdはトリガースクリプトを起動します。udevルールに対する利点は、システムデバイスの追加後ではなく、マウント後にスクリプトが実際に起動することです。
使用例:暗号化されたパーティションがあり、自動的にバックアップしたい。デバイスを追加した後、パスワードを入力する必要があります。バックアップスクリプトをudevにフックすると、パスワードを入力しているときにスクリプトが実行を試みますが、失敗します。
リソース:udevを使用したスクリプト作成
注:デバイスユニットは次の方法で見つけることができます。systemctl list-units -t mount
systemctl enable your.service
。スクリプトファイルは実行可能である必要があります。
Requires=
、After=
とWantedBy=
の両方の行をmedia-bb.mount
し、media-BB.mount
ノーチラス私のショー「BB」ではなく、「BB」などボリュームあるため。大文字化を除いて、同じエラーメッセージ。どうしましたか?どういうわけmedia-<something>.mount
かそのサービスを作成する必要がありますか?
でデバイスを見つけることから始めますlsusb
。IDに注意してください(例0a81:0101
)
/etc/udev/rules.d/
viaで新しいudevルールファイルを作成し、sudoedit /etc/udev/rules.d/100-mount-videos.rules
そこに新しいルールを次のように追加します。
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
のIDの使用方法に注意してくださいlsusb
。
次に、作業を行うためのスクリプトを記述する必要があります。簡単なマウントコマンドが機能するはずです。sleep 5
ファイルシステムの初期化を待機するコマンドが必要になる場合があります(gnomeからメインのマウントを行う場合は、最初にマウントしてからスリープする必要がない場合があります)。
アランからの追加:長時間実行されるスクリプトは、「このデバイスまたは依存デバイスのすべてのイベント」をブロックする場合があります。Mintのマニュアルページには、「長時間実行されているタスクは、イベントプロセス自体から直ちに切り離す必要があります」とさらに記載されています。これを行うためのスキルを得るためのヒントは提供されていません。
オリからの返信:https : //askubuntu.com/a/106359/449
/root/
またはrootのみが編集できる場所に保持します。
ATTRS {idVendor}およびATTRS {idProduct}(Ubuntu 12.04でテスト済み)の値を取得する別の方法は次のとおりです。
USBがマウントされている場所を見つけます。
$ mount | grep /dev/sd*
これは次のようなものを示します。
/dev/sdb on /media/SOMEDIR type vfat ...
udevadmを使用して、そのデバイス情報を取得します。
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
出力は次のようになります。
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
ATTRS {idProduct}のモデルIDとATTRS {idVendor}のベンダーIDを使用します
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
ファイルマネージャー(nautilus、konquerer、gnomeなど)によるデバイスのマウントおよびアンマウントの制御を妨げたくない場合は、udevルートを使用しないことをお勧めします。
代わりに、システムがudiskを使用する場合は、udisks-glueを使用します(ほとんどすべてが使用します)。
インストール後、~/.udisks-glue.conf
このようにホームディレクトリに設定ファイルを作成するだけです。
次の例では、SDカードを接続するたびにカメラのGPS-Assistデータを更新します。
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
その後、ブートまたはログイン時にudisks-glueが起動することを確認してください。すなわち、gnomeの起動アプリケーションを介して
@sumidの答えには問題があります。サービスを開始しないでください。有効にする必要があります。
ファイル: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
次に、サービスを有効にします。
sudo systemctl enable your.service
それで全部です。
注:内側ラベルは次の方法で見つけることができます。sudo systemctl list-units -t mount
注2:サービスが何らかの理由で失敗した場合(たとえば、スクリプトが実行可能でない場合)、マウントポイントは<old_mount_point_name>1
usbデバイスを次回マウントするときに変更されます。この問題を修正するには、実行する必要がありますsudo systemctl reset-failed