Memicu tindakan ketika volume tertentu terhubung

10

Saya memiliki kunci USB yang berisi basis data kata sandi keepass2 saya dan saya ingin melakukan beberapa tindakan ketika dicolokkan ke komputer saya, yaitu:

  • Pasang secara otomatis ke beberapa lokasi tertentu
  • Ketika pemasangan dilakukan dengan benar, meluncurkan keepass2 pada file basis data kata sandi

Saya kira tugas-tugas sederhana, tetapi saya tidak dapat menemukan cara melakukannya.

Saya menggunakan Ubuntu 12.10, dan secara otomatis memasang perangkat sebagai "media usb-key" dan mencoba untuk membuka gambar di dalamnya (walaupun tidak ada).

Apa cara terbaik untuk melakukan itu dan untuk menonaktifkan pemasangan otomatis ubuntu (sehingga tidak bertentangan)?

sebelum
sumber

Jawaban:

8

Ketika perangkat baru muncul, udev diberitahu. Ini biasanya membuat file perangkat di bawah /devberdasarkan pada aturan bawaan¹. Anda dapat mengganti aturan ini untuk mengubah lokasi file perangkat atau menjalankan program yang sewenang-wenang. Berikut adalah contoh aturan udev tersebut:

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

The NAME=direktif mengubah lokasi file perangkat, saya termasuk untuk tujuan ilustrasi tapi itu mungkin tidak berguna untuk kasus penggunaan Anda. The ATTRSaturan mengidentifikasi perangkat; berjalan udevinfo -a -n /dev/sdzketika drive tersedia /dev/sdzuntuk melihat atribut apa yang dimilikinya. Berhati-hatilah karena Anda hanya dapat menggunakan ATTRSaturan dari satu bagian udevinfoinput (selain itu, Anda dapat menggunakan ATTRaturan dari bagian awal). Lihat Memahami keluaran dari `udevadm info -a -n / dev / sdb` untuk latar belakang lebih lanjut. Aturan ini masuk ke file yang disebut sesuatu seperti /etc/udev/rules.d/local-storage-keypass.rules.

Masukkan perintah yang ingin Anda jalankan dalam skrip yang diberikan dalam RUNdirektif. Sesuatu seperti:

#!/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' &

Jika Anda mengalami kesulitan menjalankan program GUI dari skrip yang dipicu dari udev, lihat Dapatkah saya meluncurkan program grafis di desktop pengguna lain sebagai root?

¹ Tidak pada sistem modern di mana /devada di udevtmpfs.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Catatan penting tentang ini: Saat menulis aturan menggunakan info dari udevadm info -a -n /dev/sdX, Anda tidak dapat mencocokkan berdasarkan beberapa leluhur. Anda hanya dapat mencocokkan berdasarkan data dari perangkat itu sendiri, dan satu leluhur tunggal. Ini tercakup dalam man 7 udev, tetapi komentar kecil dengan mudah diabaikan.
Patrick
1

Cara terbaik untuk melakukan ini adalah menulis aturan udev Anda sendiri untuk perangkat ini. Sayangnya saya tidak bisa memberikan tips bagaimana melakukan ini karena saya belum pernah melakukannya. Jadi kecuali orang lain memiliki jawaban yang lebih terperinci, cari 'aturan udev' di google dan cari di / lib / udev untuk contoh. Aturan udev khusus Anda harus di /etc/udev/rules.d

Dennis Kaarsemaker
sumber
Terimakasih atas infonya. Setidaknya ini akan membuat pencarian saya lebih efisien.
sebelum