GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von udev-Regeln zum Ausführen eines Skripts beim USB-Einstecken

Ich hatte das gleiche Problem. Das hat bei mir funktioniert:

Versuchen Sie, Ihr Skript in /usr/local/bin zu kopieren und ändern Sie das Verzeichnis in Ihrem .rules Datei.

Außerdem weiß ich nicht, was SYSFS ist, aber ich würde es vorziehen, die ATTR-Eigenschaften zu verwenden.

Die folgende Zeile ist der Inhalt meiner .rules Datei:

ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1", ATTRS{vendor}=="SanDisk ", RUN+="/usr/local/bin/backup.sh"

notify-send erfordert Zugriff auf Ihren DBus-Sitzungsbus, den er aus zwei Gründen nicht haben kann:

  • Keine Informationen über die Sitzung. Wenn es von udev gestartet wird, weiß Ihr Skript nichts darüber, wo Sie eingeloggt sind oder ob Sie überhaupt eingeloggt sind. Multi-Seat mit X11 ist immer noch schwierig, aber die Benutzerumschaltung funktioniert sowohl für X11- als auch für Konsolensitzungen. Viele Leute verwenden auch SSH, VNC und NX über das Netzwerk.

    (DISPLAY=:0 würde die Hälfte der Zeit funktionieren, aber das ist immer noch raten bestenfalls.)

  • Verweigert durch DBus-Richtlinie. Selbst wenn Ihr Skript Ihre X11-Sitzung irgendwie findet, kann es keine Benachrichtigungen senden, da das Skript als root ausgeführt wird anstelle Ihres Benutzerkontos.


Linux
  1. Wie löst man ein Ereignis im Shell-Skript aus, wenn ein USB-Gerät entfernt wird?

  2. Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

  3. Automatisierung der Telnet-Sitzung mit Bash-Skripten

  4. Führen Sie das Bash-Skript als Daemon aus

  5. Führen Sie das Bash-Skript nach der Anmeldung aus

Tipps zur Verwendung von tmux

So führen Sie ein Python-Skript in PHP aus

So führen Sie ein Bash-Skript aus

Skript beim Start?

Deaktivieren Sie die MTP-udev-Regeln für ein bestimmtes Gerät, damit es als USB-Massenspeichergerät gemountet werden kann

Udev:Meine Netzwerkschnittstelle umbenennen