Запуск действия при подключении определенного тома

10

У меня есть USB-ключ, который содержит мою базу данных паролей keepass2, и я хотел бы выполнить некоторые действия, когда он подключен к моему компьютеру, а именно:

  • Автоматически смонтировать его в определенном месте
  • Когда подключение выполнено правильно, запустите keepass2 в файле базы данных паролей.

Простые задачи, я думаю, но я не могу найти, как это сделать.

Я использую Ubuntu 12.10, и он автоматически монтирует устройство как «медиа-USB-ключ» и пытается открыть образы на нем (хотя их нет).

Каков наилучший способ сделать это и отключить автонастройку Ubuntu (чтобы она не конфликтовала)?

ereOn
источник

Ответы:

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чтобы увидеть, какие атрибуты у него есть. Помните, что вы можете использовать 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, см. Раздел Могу ли я запустить графическую программу на рабочем столе другого пользователя с правами root?

¹ Не в современных системах, где /devесть udevtmpfs.

Жиль "ТАК - перестань быть злым"
источник
1
Важное примечание: при написании правил с использованием информации из udevadm info -a -n /dev/sdX, вы не можете сопоставить на основе нескольких предков. Вы можете сопоставить только на основе данных от самого устройства и одного предка. Это покрыто man 7 udev, но это небольшой комментарий, который легко пропустить.
Патрик
1

Лучшим способом сделать это было бы написание собственных правил udev для этого устройства. К сожалению, я не могу дать никаких советов о том, как это сделать, поскольку я никогда не делал этого. Поэтому, если у кого-то еще нет более подробного ответа, поищите в Google «правила udev» и посмотрите в / lib / udev примеры. Ваши пользовательские правила udev должны быть в /etc/udev/rules.d

Деннис Каарсемакер
источник
Спасибо за информацию. Это по крайней мере сделает мои поиски более эффективными.
2012 г.