Запуск действия при подключении определенного тома
10
У меня есть USB-ключ, который содержит мою базу данных паролей keepass2, и я хотел бы выполнить некоторые действия, когда он подключен к моему компьютеру, а именно:
Автоматически смонтировать его в определенном месте
Когда подключение выполнено правильно, запустите keepass2 в файле базы данных паролей.
Простые задачи, я думаю, но я не могу найти, как это сделать.
Я использую Ubuntu 12.10, и он автоматически монтирует устройство как «медиа-USB-ключ» и пытается открыть образы на нем (хотя их нет).
Каков наилучший способ сделать это и отключить автонастройку Ubuntu (чтобы она не конфликтовала)?
Когда появляется новое устройство, udev получает уведомление. Обычно он создает файл устройства в соответствии /devсо встроенными правилами¹. Вы можете переопределить эти правила, чтобы изменить местоположение файла устройства или запустить произвольную программу. Вот пример такого правила udev:
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' &
Важное примечание: при написании правил с использованием информации из udevadm info -a -n /dev/sdX, вы не можете сопоставить на основе нескольких предков. Вы можете сопоставить только на основе данных от самого устройства и одного предка. Это покрыто man 7 udev, но это небольшой комментарий, который легко пропустить.
Патрик
1
Лучшим способом сделать это было бы написание собственных правил udev для этого устройства. К сожалению, я не могу дать никаких советов о том, как это сделать, поскольку я никогда не делал этого. Поэтому, если у кого-то еще нет более подробного ответа, поищите в Google «правила udev» и посмотрите в / lib / udev примеры. Ваши пользовательские правила udev должны быть в /etc/udev/rules.d
udevadm info -a -n /dev/sdX
, вы не можете сопоставить на основе нескольких предков. Вы можете сопоставить только на основе данных от самого устройства и одного предка. Это покрытоman 7 udev
, но это небольшой комментарий, который легко пропустить.Лучшим способом сделать это было бы написание собственных правил udev для этого устройства. К сожалению, я не могу дать никаких советов о том, как это сделать, поскольку я никогда не делал этого. Поэтому, если у кого-то еще нет более подробного ответа, поищите в Google «правила udev» и посмотрите в / lib / udev примеры. Ваши пользовательские правила udev должны быть в /etc/udev/rules.d
источник