Autorun script setelah saya menancapkan atau mencabut perangkat USB

22

Apa yang dapat saya lakukan untuk menjalankan skrip secara otomatis setelah saya me-mount / plugin atau melepas / mencabut perangkat USB?

Radu Rădeanu
sumber
2
@XxxXxx: bukan merupakan pilihan selama Cuttlefish tidak memiliki versi rilis untuk Ubuntu 12.10
Radu Rădeanu
2
kemungkinan rangkap: askubuntu.com/questions/25071/...
Glutanimate
@Glutanimate: pertanyaan itu adalah tentang USB flash-drive tertentu, tetapi saya bertanya tentang perangkat USB, secara umum
Radu Rădeanu
@Glutanimate: katakanlah bahwa jawaban dari pertanyaan itu membantu, toh tidak menjawab bagaimana menjalankan skrip secara otomatis setelah saya mencabut perangkat USB.
Radu Rădeanu
1
"katakanlah bahwa jawaban dari pertanyaan itu bermanfaat, toh tidak menjawab bagaimana menjalankan skrip secara otomatis setelah saya mencabut perangkat USB" Saya menduga bahwa jika Anda mengubah "ACTION = 'add'" ke "ACTION = 'hapus' ", itu akan menjadi tempat yang baik untuk memulai.
blujay

Jawaban:

17

Terima kasih kepada MinimusHeximus dan kontributor masing-masing untuk utas yang ia sebutkan dalam komentarnya untuk pertanyaan serupa saya, saya pikir saya sekarang dapat menawarkan jawaban berikut.

Anda akan membutuhkan 5 (lima) file untuk perangkat USB seperti berikut, cukup dengan mengisi masing-masing nilai <fortheseparts>:

/etc/udev/rules.d/00-usb-<yourdevice>.rules

ACTION=="add", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-in_udev"    
ACTION=="remove", ATTRS{idVendor}=="<yourvendorid>", ATTRS{idProduct}=="<yourproductid>", ENV{XAUTHORITY}="/home/<user>/.Xauthority", ENV{DISPLAY}=":0", OWNER="<user>", RUN+="/usr/local/bin/usb-<yourdevice>-out_udev"

/usr/local/bin/usb-<yourdevice>-in_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-in &

/usr/local/bin/usb-<yourdevice>-in

#!/bin/bash
sleep 1
<yourbashscriptcode>

/usr/local/bin/usb-<yourdevice>-out_udev

#!/bin/bash
/usr/local/bin/usb-<yourdevice>-out &

/usr/local/bin/usb-<yourdevice>-out

#!/bin/bash
sleep 1
<yourbashscriptcode>

Catatan:

  1. Anda dapat menangkap nilai-nilai <yourvendorid>dan <yourproductid>dengan memasukkan perintah lsusbdi Terminal - ketika perangkat USB Anda terhubung - yang akan mencantumkan semua perangkat USB Anda saat ini tersedia, seperti Bus 003 Device 002: ID 8087:07da Intel Corp., di mana 8087 adalah VendorID dan 07da adalah ProductID .
  2. Dan <yourdevice>dapat berupa nama sembarang yang dapat Anda pilih untuk perangkat USB Anda, misalnya, saya memilih untuk menggunakan nama generik " papan ketik " saat membuat file seperti itu untuk papan ketik USB saya yang mengharuskan penerapan tata letak papan ketik yang berbeda setiap kali terhubung.
  3. Dalam beberapa skenario, mungkin tidak perlu menggunakan ACTION=="remove"baris dalam file aturan udev, dan karenanya 2 (dua) outfile yang terkait, ketika Anda tidak perlu melakukan apa pun (misalnya membalikkan perubahan yang dibuat saat perangkat sedang dicolokkan) setelah perangkat dicolokkan.
Sadi
sumber
Ini terlihat salah dari sudut pandang pemula saya. Bukankah klausa-klausa itu harus berada di jalur yang sama?
nafg
1
Ini berfungsi: ACTION == "add", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <user> /.Xauthority" , ENV {DISPLAY} = ": 0", RUN + = "<script>"
nafg
@ nafg: dari sudut pandang pemula saya, seharusnya tidak ada bedanya jika Anda meletakkan semua itu dalam satu baris (menggunakan koma sebagai pemisah) dalam file aturan udev, tapi saya melihat bahwa Anda telah menambahkan parameter XAUTHORITY dan DISPLAY ke aturan udev, yang mungkin bekerja untuk Anda atau orang lain, dalam hal ini saya ingin tahu apakah mereka tidak lagi diperlukan dalam dua file skrip di bawah ini.
Sadi
1
ya itu intinya, Anda tidak lagi membutuhkan skrip perantara (kecuali mungkin untuk menempatkan skrip aktual di latar belakang) karena udev memungkinkan Anda mengatur lingkungan. Juga pemahaman saya dari udev docs adalah bahwa setiap baris adalah aturan independen, baris dalam file tidak digabungkan.
nafg
@nafg: Terima kasih atas kontribusi Anda yang berharga. Saya memindahkan lingkungan ini ke aturan udev dan itu berhasil juga untuk saya. Juga, saya memindahkan skrip ke / usr / local / bin ketika saya mulai menemui masalah setelah saya memindahkan folder / home saya ke partisi yang terpisah sendiri (mungkin karena itu tidak di-mount sebelumnya). Tampaknya menggunakan jeda baris dalam aturan udev tidak menimbulkan masalah setidaknya di sistem saya (Ubuntu 13,04 64 bit) dan saya lebih suka ini agar mudah dibaca.
Sadi