Saya mencoba menyiapkan skrip untuk dijalankan setiap kali saya mencolokkan perangkat USB. Saya membuat file /etc/udev/rules.d/90-local.rules dan menambahkan aturan berikut:
ACTION=="add", SUBSYSTEM=="usb", KERNEL=="sd*", SYSFS{model}=="Cruzer*", RUN+="sh /home/jesse/Documents/Scripts/cruzer.sh"
Masalahnya adalah ketika drive terhubung, tidak ada yang terjadi. Skrip, untuk keperluan debugging, dirancang untuk mengirim pemberitahuan dengan notifikasi-kirim, yang dipasang dan berfungsi dengan baik dari terminal.
Path ke script sudah benar, karena saya sudah menjalankan perintah yang tepat di terminal tanpa masalah.
Jawaban:
Saya memiliki masalah yang sama. Ini bekerja untuk saya:
Coba salin skrip Anda ke dalam
/usr/local/bin
dan ubah direktori di.rules
file Anda .Juga, saya tidak tahu apa itu SYSFS, tapi saya lebih suka menggunakan properti ATTR.
Baris berikut adalah isi dari
.rules
file saya :sumber
ATTRS{vendor}=="SanDisk "
bagian apakah itu berarti bahwa hanyaSandisk
akan terdeteksi?notify-send
membutuhkan akses ke bus sesi DBus Anda, yang tidak dapat dimilikinya karena dua alasan:Tidak ada informasi tentang sesi ini. Ketika dimulai oleh udev, skrip Anda tidak tahu apa - apa tentang tempat Anda masuk atau jika Anda sama sekali masuk. Multi-kursi dengan X11 masih sulit, tetapi perpindahan pengguna berfungsi untuk sesi X11 dan konsol. Banyak orang juga menggunakan SSH, VNC dan NX melalui jaringan.
(
DISPLAY=:0
Akan bekerja setengah dari waktu, tapi itu masih tebakan terbaik.)Ditolak oleh kebijakan DBus. Walaupun skrip Anda menemukan sesi X11 Anda, skrip tidak dapat mengirim pemberitahuan karena skrip dijalankan sebagai
root
ganti akun pengguna Anda.sumber
for LINE in $(find /proc/ -maxdepth 2 -name environ -exec grep -z "^DBUS_SESSION_BUS_ADDRESS" {} \; | sort -uz | tr '\0' '\n'); do eval $LINE ... done;
melakukan trik untuk saya dengan notify-sendAnda dapat mencoba mencocokkan perangkat dengan vendor dan ID produk sebagai gantinya. Aturan khusus berikut ini berfungsi untuk saya:
Anda dapat melihat idVendor dan idProduct di output lsusb atau dmesg setelah memasang perangkat.
sumber
Menindaklanjuti jawaban Aleh: Jika Anda juga ingin memantau
remove
acara, Anda perlu mencari variabel lingkungan bernamaID_SERIAL
. Ini berisi ID vendor dan produk yang dipisahkan oleh garis bawah:Aturannya sekarang juga lebih pendek.
sumber
Mungkin, Anda mungkin perlu menambahkan
sleep
dalam skrip, untuk memberikan perangkat usb kesempatan untuk "menyelesaikan"? Sebagai contoh, modem usb 3g, mode switching untuk mendapatkan / dev / ttyUSB untuk ditendang dan dijalankan oleh kernel.sumber
Coba ganti SUBSYSTEM = "usb" dengan SUBSYSTEMS = "usb"
sumber
SUBSYSTEM=="usb"
tidak apa-apa.