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


10

keepass2パスワードデータベースを含むUSBキーを持っています。コンピューターに接続したときに、次のようなアクションを実行したいと考えています。

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

シンプルなタスクだと思いますが、その方法がわかりません。

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

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

回答:


8

新しいデバイスが表示されると、udevに通知されます。通常/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属性を確認します。入力のATTRS1つのセクションからのルールしか使用できないことに注意してください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としてグラフィカルプログラムを起動できますか?」を参照してください

¹ ない現代のシステムで/devudevtmpfsです。


1
これに関する重要な注意:からの情報を使用してルールを作成する場合udevadm info -a -n /dev/sdX、複数の祖先に基づいて照合することはできません。デバイス自体と単一の祖先からのデータに基づいてのみ照合できます。これについてはで説明してman 7 udevいますが、見落としやすい小さなコメントです。
Patrick

1

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


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