UDEV Regel

  • Liebes Forum, ich versuche gerade eine UDEV Regel zu bauen, aber so richtig funktioniert das beim Raspi nicht (bei Ubuntu und Banana pi hab ich es hinbekommen).


    Also ich möchte wenn ich ein USB stick einstecke, das ein Python Script ausgeführt wird, und zwar so, dass es den mountet, dann eine LED aufleuchtet und wenn ich einen Taster drücke wieder den Stick aushängt. soweit so gut, das klappt auch wenn ich das Script manuell mit "sudo python3 /home/pi/mediaplatte.py" ausführe, dann macht es genau das, was es soll.

    Aber bei der UDEV Regel nicht, dann startet es zwar, aber es passiert nichts..

    hier meine Udev Varianten die ich schon Probiert habe:


    Code
    1. ATTRS{idVendor}=="1307", ACTION=="add", RUN+="/bin/su -c '/usr/bin/python3 /home/pi/mediaplatte.py'"
    2. oder
    3. ATTRS{idVendor}=="1307", ACTION=="add", RUN+="python3 /home/pi/mediaplatte.py"
    4. oder
    5. ATTRS{idVendor}=="1307", ACTION=="add", RUN+=/usr/bin/python3 /home/pi/mediaplatte.py"

    und hier mein script

  • Hallo matze1,

    ATTRS{idVendor}=="1307", ACTION=="add", RUN+="/usr/bin/python3 /home/pi/mediaplatte.py"

    und

    ATTRS{idVendor}=="1307", ACTION=="add", RUN+="/bin/su Username -c '/usr/bin/python3 /home/pi/mediaplatte.py'"

    Hast Du bestimmt nur beim Übertragen ins Forum vergessen oder?


    mount '/home/jj'

    Darf der User jj an die GPIO oder umount ausführen? (Falls jj der User ist...)

  • Die Anführungsstriche habe ich bloß beim Übertragen vergessen.


    Aber den Username habe ich nicht mit eingegeben und habe jetzt mal "root" eingetragen. Aber das löst das Problem auch nicht, denn es wird wieder nur ausgeführt, es brennt zwar die LED aber es wird nichts eingehängt. Und beim drücken geht sie kurz aus und dann wieder an, laut htop läuft das Script weiter...

    der "jj" ist ein Verzeichnis mit dem Besitzer root, aber ich habe schon im /home/pi ein Verzeichnis mit dem Besitzer "pi" angelegt, da ist es das gleiche.

  • Kann es sein das die Angabe fehlt für kernel und subsystem

    Mhh eigentlich müsste das nichts ausmachen, denn ich habe es ja schon mal im Ubuntu und auf Bananian erfolgreich am laufen gehabt.

    Ich habe aber es auch schon mit "kernel" etc. versucht, da ist genau das gleiche.

    Es funktioniert auch nur mit den USB Stick, dass das Script startet, mit einen anderen startet es erst gar nicht.

    Es hängt vermutlich am "Einhängen". dass da irgendwelche rechte Fehlen.


    Die Ubuntu wiki Seite habe ich dafür durchgearbeitet.

  • Jetzt habe ich mal alles, was mit dem "Einhängen" zu tun hat auskommentiert.

    Dann startet das Script nach dem Knopfdruck neu (genau so wie es vorher war, wo ich das noch nicht auskommentiert habe).

    Heißt im Klartext, nach dem Einstecken und Knopfdruck läuft laut htop das Script 2x, beim nächsten betätigen 3x ...


    Edit: :conf:

  • Jetzt habe ich mal alles, was mit dem "Einhängen" zu tun hat auskommentiert.

    Dann startet das Script nach dem Knopfdruck neu (genau so wie es vorher war, wo ich das noch nicht auskommentiert habe).

    Heißt im Klartext, nach dem Einstecken und Knopfdruck läuft laut htop das Script 2x, beim nächsten betätigen 3x ...


    Edit: :conf:

    Du musst nachdem Knopfdruck die while Schleife verlassen damit sich das Skript beendet


    EDIT: und das blanke except muss raus ;) Fehler direkt behandeln

  • Ich habe jetzt mal ein anderes Python Script erstellt, was ein Wort in eine Datei schreibt, selbst das wird nicht ausgeführt...


    Dann liegt es in erster Linie doch an der UDEV.


    Was eigentlich mal schnell gehen sollte dauert jetzt schon wieder über Tage :no_sad:.

    Zumal ich das ganze ja schon mal hatte in der Art...


    Edit: So habe ich es erfolgreich auf bananian gelöst:


    Code
    1. ATTRS{serial}=="12371DC5", RUN+="/usr/bin/python /home/matze1/mein.py"

    Da war ich aber als root user unterwegs...

    Edited once, last by matze1 ().

  • Dieser Mix mit gpiozero und RPi.GPIO ist nicht schön und ich hab RPi.GPIO rausgeschmissen. Ob Du wirklich PWMLED brauchst weißt nur Du. In Deinem Script war das nicht ersichtlich, deshalb ein normales LED hier.

    quick and dirty und natürlich ungetestet. ;)

  • hyle

    Danke für die Verbesserung.

    Aber mein Script läuft per UDEV immer noch nicht.

    Ich habe jetzt schon die unmöglichsten Varianten ausgetestet.

    Bisher hat nichts funktioniert.


    Edit: eventuell hat ja jemand hier aus dem Forum eine Udev Regel erstellt, was ein Python Script startet.

  • Das Script funktioniert, aber es wartet nicht auf das Drücken auf den Taster, sondern LED leuchtet kurz auf und dann beendet sich das Script ohne aus zu hängen. Eingehängt ist er.

    Sowohl von manueller Eingabe, als auch über UDEV.

  • Das hat jetzt schon mal manuell funktioniert.

    Bei UDEV leuchtet nach dem anstecken die Lampe bis ich den Taster betätige, soweit ok, aber er hängt den Stick nicht ein.

    Anbei habe ich auch mal versucht ein bash Script zu starten, aber das tut es auch nicht.

    Es kann doch nur an den Rechten liegen oder?

  • Hallo

    Kann es sein dass UDEV nur ein script anstösst und es dann beendet und mit ihm alle anderen darunter liegenden Prozesse auch. Jedenfalls hatte ich das Problem mit dem Backup.

    Ich habe es dann mit Systemd gelöst und mit UDEV entsprechend einen Service aufgerufen der dann das Script startet.


    UDEV Regel sieht dann so aus:

    Code
    1. SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{serial}=="F..........", KERNEL=="sd?1", ACTION=="add", SYMLINK+="usb-backup", ENV{SYSTEMD_WANTS}+="usb_backup@%k.service"

    Der Service :

    Code
    1. cat /etc/systemd/system/usb_backup@.service
    2. [Unit]
    3. Description=USBBackup
    4. [Service]
    5. ExecStart=/usr/local/bin/usb-backup.sh %I
    6. [Install]
    7. WantedBy=system.device


    So wartet das Script bis das Backup fertig ist.


    Gruss