Запуск дії при підключенні певного гучності


10

У мене є ключ USB, який містить мою базу даних паролів Keepass2, і я хотів би виконати деякі дії, коли він підключений до мого комп'ютера, а саме:

  • Автомобільно встановіть його до певного місця
  • Коли монтаж виконано належним чином, запустіть файл holdass2 у файлі бази даних паролів

Я думаю, прості завдання, але я не можу знайти, як це зробити.

Я використовую 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щоб побачити, які атрибути він має. Будьте уважні, що ви можете використовувати лише 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' &

Якщо у вас виникли проблеми із запуском програми GUI зі сценарію, запущеного у 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


Дякую за інформацію. Це принаймні зробить мої пошуки більш ефективними.
ereOn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.