GNU/Linux >> Linux の 問題 >  >> Ubuntu

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

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

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

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

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

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

承認された回答:

新しいデバイスが表示されると、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として利用可能な場合 それがどのような属性を持っているかを確認します。 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にあります。


Ubuntu
  1. 実行可能ファイルがない場合

  2. Ubuntu 11.10に起動音がありませんか?

  3. インターネットに接続していないときにUbuntuを更新するにはどうすればよいですか?

  1. Ubuntuでスワップファイルを追加する方法

  2. スワップボリュームを追加しますか?

  3. g++ を Ubuntu にインストールする方法

  1. Ubuntu18.04でホスト名を変更する方法

  2. UbuntuLinuxでファイルを削除する方法

  3. UbuntuLinuxでAndroidデバイスを接続する方法