Belirli bir birim bağlandığında eylemi tetikleme


10

Keepass2 şifre veritabanımı içeren bir USB anahtarım var ve bilgisayarıma bağlıyken bazı eylemler gerçekleştirmek istiyorum, yani:

  • Belirli bir konuma otomatik olarak monte et
  • Montaj düzgün yapıldığında, şifre veritabanı dosyasında keepass2 başlatılır

Basit görevler sanırım, ama bunu nasıl yapacağımı bulamıyorum.

Ubuntu 12.10 kullanıyorum ve otomatik olarak bir "medya usb anahtarı" olarak bağlar ve (hiçbiri olmasa bile) görüntüleri açmaya çalışır.

Bunu yapmanın ve ubuntu otomatik montajını devre dışı bırakmanın en iyi yolu nedir (böylece çakışmaz)?

Yanıtlar:


8

Yeni bir aygıt göründüğünde, udev bilgilendirilir. Normalde /devyerleşik kurallara göre altında bir aygıt dosyası oluşturur¹ . Aygıt dosyasının konumunu değiştirmek veya isteğe bağlı bir program çalıştırmak için bu kuralları geçersiz kılabilirsiniz. İşte böyle bir udev kuralı örneği:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"

NAME=Yönerge ben açıklama amacıyla bunu dahil ama muhtemelen sizin kullanım örneği için kullanışlı değildir, cihaz dosyasının konumunu değiştirir. ATTRSKurallar cihazı tanımlamak; udevinfo -a -n /dev/sdzsürücü /dev/sdzhangi özelliklere sahip olduğunu görmek için kullanılabilir olduğunda çalıştırın . Yalnızca girişin ATTRStek bir bölümündeki kuralları kullanabileceğinize dikkat edin udevinfo(buna ek ATTRolarak ilk bölümdeki kuralları da kullanabilirsiniz ). Daha fazla arka plan için bkz . "Udevadm info -a -n / dev / sdb" çıktısını anlama . Bu kural gibi bir dosyaya girer /etc/udev/rules.d/local-storage-keypass.rules.

Çalıştırmak istediğiniz komutları RUNyönergede verilen komut dosyasına yerleştirin . Gibi bir şey:

#!/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 tarafından tetiklenen bir komut dosyasından bir GUI programı çalıştırmakta sorun yaşıyorsanız, bkz . Başka bir kullanıcının masaüstünde kök olarak bir grafik programı başlatabilir miyim?

¹ Değil Modern sistemlerde nerede /devudevtmpfs üzerindedir.


1
Bununla ilgili önemli not: sitesindeki bilgileri kullanarak kurallar yazarken udevadm info -a -n /dev/sdX, birden fazla ataya dayalı olarak eşleşemezsiniz. Yalnızca cihazın kendisinden gelen verilere ve tek bir ataya göre eşleştirebilirsiniz. Bu kapsam dahilindedir man 7 udev, ancak kolayca gözden kaçan küçük bir yorumdur.
Patrick

1

Bunu yapmanın en iyi yolu, bu cihaz için kendi udev kurallarınızı yazmak olacaktır. Ne yazık ki hiç yapmadığım için bunu nasıl yapacağınıza dair herhangi bir ipucu veremem. Başka birisinin daha ayrıntılı bir cevabı yoksa, google 'udev kuralları' için gidin ve örnekler için / lib / udev 'e bakın. Özel udev kurallarınız /etc/udev/rules.d dosyasına girmelidir.


Bilgi için teşekkürler. Bu en azından aramalarımı daha verimli hale getirecek.
ereOn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.