Führen Sie ein Skript automatisch aus, nachdem ich ein USB-Gerät angeschlossen oder entfernt habe


22

Was kann ich tun, um ein Skript automatisch auszuführen, nachdem ich ein USB-Gerät aktiviert / deaktiviert oder deaktiviert / deaktiviert habe?


2
@XxxXxx: ist keine Option, solange Cuttlefish keine Release-Version für Ubuntu 12.10
Radu Rădeanu 22.04.13


@Glutanimate: Diese Frage bezieht sich auf ein bestimmtes USB-Flash-Laufwerk, aber ich habe allgemein nach einem USB-Gerät gefragt
Radu Rădeanu

@Glutanimate: Lassen Sie sagen , dass die Antworten von dieser Frage hilfreich sind, sowieso nicht zu beantworten, wie automatisch ein Skript auszuführen , nachdem ich unplugged ein USB - Gerät.
Radu Rădeanu

1
"Nehmen wir an, die Antworten auf diese Frage sind hilfreich, beantworten jedoch nicht, wie ein Skript automatisch ausgeführt wird, nachdem ich ein USB-Gerät ausgesteckt habe." "entfernen", das wäre ein guter Anfang.
blujay

Antworten:


17

Dank MinimusHeximus und den jeweiligen Mitwirkenden an dem Thread, den er in seinem Kommentar zu meiner ähnlichen Frage erwähnt hat, kann ich Ihnen jetzt die folgende Antwort anbieten.

Sie benötigen 5 (fünf) Dateien für ein solches USB-Gerät, indem Sie einfach die entsprechenden Werte eingeben <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>

Anmerkungen:

  1. Sie können die Werte erfassen <yourvendorid>und <yourproductid>durch Eingabe des Befehls lsusbim Terminal - wenn Ihr USB-Gerät angeschlossen ist - alle derzeit verfügbaren USB-Geräte auflisten , z. B. Bus 003 Device 002: ID 8087:07da Intel Corp.wobei 8087 die VendorID und 07da die ProductID ist .
  2. Und <yourdevice>kann ein beliebiger Name sein, den Sie für Ihr USB-Gerät auswählen. Ich habe beispielsweise den generischen Namen " keyboard " gewählt, wenn ich solche Dateien für meine USB-Tastatur erstellte, für die bei jedem Anschließen ein anderes Tastaturlayout erforderlich war.
  3. In einigen Szenarien ist es möglicherweise nicht erforderlich, die ACTION=="remove"Zeile in der "" udev-Regeldatei und damit die zugehörigen 2 (zwei) " out" Dateien zu verwenden, wenn Sie nichts tun müssen (z. B. eine Änderung rückgängig machen, wenn das Gerät in Betrieb ist eingesteckt), nachdem das Gerät ausgesteckt wurde.

Das sieht aus meiner Sicht als Anfänger falsch aus. Müssen diese Klauseln nicht in derselben Zeile stehen?
Nafg

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

@nafg: Aus meiner Sicht sollte es keinen Unterschied machen, ob Sie alle diese in einer Zeile (mit Komma als Trennzeichen) in die udev-Regeldatei einfügen, aber ich sehe, dass Sie den udev-Regeln XAUTHORITY- und DISPLAY-Parameter hinzugefügt haben funktioniert möglicherweise für Sie oder einen anderen, in diesem Fall frage ich mich, ob sie in den beiden folgenden Skriptdateien nicht mehr benötigt werden.
Sadi

1
Ja, das ist der Punkt, Sie brauchen das Zwischenskript nicht mehr (außer vielleicht, um das eigentliche Skript in den Hintergrund zu stellen), da Sie mit udev die Umgebung einstellen können. Nach meinem Verständnis in den udev-Dokumenten ist jede Zeile eine eigenständige Regel. Zeilen in einer Datei werden nicht kombiniert.
Nafg

@nafg: Danke für deinen wertvollen Beitrag. Ich habe diese Umgebungen auf udev rule umgestellt und es hat auch bei mir funktioniert. Außerdem habe ich die Skripte nach / usr / local / bin verschoben, da Probleme aufgetreten sind, nachdem ich meinen Ordner / home auf eine separate Partition verschoben habe (wahrscheinlich, weil er nicht zuvor angehängt wurde). Die Verwendung von Zeilenumbrüchen in udev-Regeln scheint zumindest in meinem System (Ubuntu 13.04 64-Bit) keine Probleme zu bereiten, und ich habe dies aus Gründen der Lesbarkeit vorgezogen.
Sadi

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.