web-dev-qa-db-ja.com

特定のボリュームが接続されているときにアクションをトリガーする

Keepass2パスワードデータベースを含むUSBキーがあり、コンピューターに接続されたときにいくつかのアクションを実行したいと思います。

  • 特定の場所に自動マウントします
  • マウントが正しく行われたら、パスワードデータベースファイルでkeepass2を起動します

簡単な作業だと思いますが、その方法がわかりません。

私はUbuntu12.10を使用していますが、デバイスを「メディアUSBキー」として自動マウントし、イメージを開こうとします(イメージがない場合でも)。

それを行い、ubuntuの自動マウントを無効にする(競合しないようにする)ための最良の方法は何ですか?

10
ereOn

新しいデバイスが表示されると、 dev が通知されます。通常、組み込みのルール¹に基づいて/devの下にデバイスファイルを作成します。これらのルールを上書きして、デバイスファイルの場所を変更したり、任意のプログラムを実行したりできます。このようなudevルールのサンプルを次に示します。

KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"

NAME=ディレクティブは、デバイスファイルの場所を変更します。説明のために含めましたが、ユースケースにはおそらく役に立たないでしょう。 ATTRSルールはデバイスを識別します。ドライブがudevinfo -a -n /dev/sdzとして使用可能な場合は、/dev/sdzを実行して、ドライブの属性を確認します。 ATTRS入力の単一セクションからのみudevinfoルールを使用できることに注意してください(さらに、最初のセクションからATTRルールを使用できます)。詳細については、 ʻudevadm info -a -n/dev/sdb`の出力を理解する を参照してください。このルールは、/etc/udev/rules.d/local-storage-keypass.rulesのようなファイルに入ります。

実行するコマンドをRUNディレクティブで指定されたスクリプトに配置します。何かのようなもの:

#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
  [ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
  mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &

UdevからトリガーされたスクリプトからGUIプログラムを実行する際に問題が発生した場合は、 別のユーザーのデスクトップでrootとしてグラフィカルプログラムを起動できますか? を参照してください。

¹ /devがudevtmpfsにある最新のシステムではありません。

これを行う最良の方法は、このデバイス用に独自のudevルールを作成することです。残念ながら、これを行う方法についてのヒントを提供することはできません。したがって、他の誰かがより詳細な答えを持っていない限り、「udevルール」をグーグルで検索し、/ lib/udevで例を探してください。カスタムudevルールは/etc/udev/rules.dに配置する必要があります

1