it-swarm-eu.dev

Jak spouštět vlastní skripty po připojení zařízení USB?

Jaká je nejmodernější metoda pro automatické spouštění vlastních skriptů po připojení zařízení USB při současných distribucích Linuxu, jako je Debian/CentOS/Fedora?

Například pokud chcete automaticky připojit/zkopírovat některé soubory/připojit USB paměťové zařízení na základě jeho UUID (nebo ID zařízení atd.).

42
maxschlepzig

Vložte řádek jako je tento do souboru v /etc/udev/rules.d:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

Přidejte klauzuli jako NAME="subdir/mydisk%n", pokud chcete použít vlastní cestu pro zadání pod /dev.

Spustit udevadm info -a -n sdb a uvidíte, s kterými atributy se můžete vyrovnat (attribute=="value"; nahraďte sdb názvem zařízení automaticky přiřazeného k disku, což odpovídá nové položce vytvořené v /dev když jej zapojíte). Všimněte si, že můžete použít klauzy ATTRS z libovolného jednoho stanzy: můžete si vybrat libovolnou stanzu, ale klauze ATTRS musí všechny pocházet ze stejné stanzy, můžete ' t mix a zápas. Klauzy ATTRS můžete smíchat s jinými typy klauzí uvedených v jiné stanze.

Podíval jsem se do /lib/udev/rules.d pro příklady pravidel týkajících se disku. V systému Ubuntu poskytuje jeden soubor pravidel proměnnou prostředí ID_FS_UUID_ENC které můžete použít ve vlastních souborech pravidel.

Vložil jsem tedy soubor vlastních pravidel pod /etc/udev/rules.d/foodevice.rules. Protože to není předponou s číslem, to je provozováno konečně udev. Btw, démon udev sledoval /etc/udev/rules.d pro změny, které není nutné restartovat při změnách souborů.

Obsah /etc/udev/rules.d/foodevice.rules je:

ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
  RUN+="/usr/bin/Sudo -u juser /home/juser/path/script.sh"

(Toto je jedno pravidlo - musíte odstranit nový řádek za klauzulí ENV, protože udev nemá mechanismus pokračování linky)

Program spuštěný udevem blokuje démona - neměl by tedy běžet dlouho. Vyřešil jsem to pomocí at - tj. Oddělením od procesu provádějícího skutečnou práci:

$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now
14
maxschlepzig