Autorun uno script dopo aver collegato o scollegato un dispositivo USB


22

Cosa posso fare per eseguire automaticamente uno script dopo aver montato / plug-in o smontato / scollegato un dispositivo USB?


2
@XxxXxx: non è un'opzione fintanto che Cuttlefish non ha una versione di rilascio per Ubuntu 12.10
Radu Rădeanu


@Glutanimate: questa domanda riguarda un'unità flash USB specifica, ma in genere ho chiesto informazioni su un dispositivo USB
Radu Rădeanu,

@Glutanimate: diciamo che le risposte a questa domanda sono utili, comunque non risponde a come eseguire automaticamente uno script dopo aver scollegato un dispositivo USB.
Radu Rădeanu,

1
"supponiamo che le risposte a questa domanda siano utili, in ogni caso non risponde a come eseguire automaticamente uno script dopo aver scollegato un dispositivo USB" Immagino che se cambi "ACTION = 'add'" in "ACTION = "rimuovi" ", sarebbe un buon punto di partenza.
Blujay,

Risposte:


17

Grazie a MinimusHeximus e ai rispettivi collaboratori del thread che ha citato nel suo commento alla mia domanda simile, penso di poterti offrire la seguente risposta.

Avrai bisogno di 5 (cinque) file per un dispositivo USB come segue, semplicemente compilando i rispettivi valori <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>

Gli appunti:

  1. È possibile acquisire i valori <yourvendorid>e <yourproductid>immettendo il comando lsusbin Terminale - quando è collegato il dispositivo USB - che elencherà tutti i dispositivi USB attualmente disponibili, ad esempio Bus 003 Device 002: ID 8087:07da Intel Corp., dove 8087 è VendorID e 07da è ProductID .
  2. E <yourdevice>può essere qualsiasi nome arbitrario che puoi scegliere per il tuo dispositivo USB, ad esempio, ho scelto di usare il nome generico " tastiera " durante la creazione di tali file per la mia tastiera USB che richiedeva l'applicazione di un layout di tastiera diverso ogni volta che è collegato.
  3. In alcuni scenari, potrebbe non essere necessario utilizzare la ACTION=="remove"riga nel file delle regole di udev, e quindi i 2 (due) " out" file associati, quando non è necessario eseguire alcuna operazione (ad esempio annullare una modifica apportata quando il dispositivo è collegato) dopo aver scollegato il dispositivo.

Questo sembra sbagliato dalla mia prospettiva da principiante. Queste clausole non devono essere sulla stessa linea?
nafg

1
Funziona: ACTION == "aggiungi", ATTRS {idVendor} == "...", ATTRS {idProduct} == "...", ENV {XAUTHORITY} = "/ home / <user> /.Xauthority" , ENV {DISPLAY} = ": 0", RUN + = "<script>"
nafg

@nafg: dal mio punto di vista per i principianti, non dovrebbe fare alcuna differenza se li metti tutti in una riga (usando la virgola come separatore) nel file delle regole di udev, ma vedo che hai aggiunto i parametri XAUTHORITY e DISPLAY alle regole di udev, che potrebbe funzionare per te o per qualcun altro, nel qual caso mi chiedo se non siano più necessari nei due file di script seguenti.
Sadi,

1
sì, questo è il punto, non è più necessario lo script intermedio (tranne forse per mettere lo script effettivo in background) poiché udev ti consente di impostare l'ambiente. Anche la mia comprensione dai documenti udev è che ogni riga è una regola indipendente, le righe in un file non sono combinate.
nafg

@nafg: grazie per il tuo prezioso contributo. Ho spostato questi ambienti nella regola udev e ha funzionato anche per me. Inoltre, ho spostato gli script in / usr / local / bin quando ho iniziato a riscontrare problemi dopo aver spostato la mia cartella / home in una partizione separata (probabilmente perché non era stata montata in precedenza). Sembra che usare le interruzioni di riga nelle regole udev non presenti alcun problema nel mio sistema (Ubuntu 13.04 64 bit) e ho preferito questo per leggibilità.
Sadi,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.