LibreElec UDEV Script / USB Inhalt kopieren beim einstecken

  • Hallo zusammen,

    ich wusste nicht, wie ich den Titel sinnvoll benennen konnte, also, falls ein mod den umbenennen mag, gerne. :)

    Es geht um folgendes,

    ich nutze aktuell LibreElec auf einem Raspberry PI 3 und Kodi für einen digitalen Bilderrahmen, komplett offline.

    Die Bilder liegen auf der internen SD Karte von LibreElec. (64 GB Karte).

    Damit der zukünftige Anwender es leichte hat die Bilder auszutauschen, hätte ich ganz gerne die Möglichkeit für sie/ihn geschaffen, dass einfach nur ein USB Stick drangehängt werden muss,

    der alte Inhalt soll gelöscht werden, und die neuen Bilder (mit evtl. vorhandenen Unterordnern) dann drauf kopiert.

    Deshalb die Frage, ob man in LibreElec quasi eine UDEV Regel hinterlegen kann, dass webnn irgendein USB Stick angeschlossen wird, die Befehle ausgeführt werden:

    - alle Dateien / Ordner aus /storage/pictures löschen

    - alle Dateien/Ordner von USB nach /storage/pictures kopieren.


    Das bisherige "Projekt" besteht aus folgendem und was bisher gemacht wurde:

    Komponenten:

    Display: https://www.reichelt.de/raspberry-pi-s…tct=pos_3&nbc=1

    Raspberry Pi 3

    Installation des Displays:

    Addons:

    Add-on:Picture Slideshow Screensaver - Official Kodi Wiki

    Zusätzlich: autostart.py als Addon (hier nachzulesen: https://kodi.wiki/view/Autoexec_Service) mit Inhalt:

    Code: autoexec.py
    import xbmc
    xbmc.executebuiltin('SlideShow(/storage/pictures,recursive,random')
  • hilft dir das hier:

    How to execute a shellscript when I plug-in a USB-device
    I want to execute a script when I plug in a device in my Linux machine. For example, run xinput on mouse or a backupscript on a certain drive. I have seen a…
    unix.stackexchange.com
    Using udev rules to run a script on USB insertion
    I'm trying to set up a script to run every time I plug in a USB device. I created the file /etc/udev/rules.d/90-local.rules and added the following rule:…
    superuser.com
    How to Execute a Shell Script When a USB Device Is Plugged | Baeldung on Linux
    Learn how to write udev rules to run a script when a USB device is plugged in.
    www.baeldung.com

    Suchbegriff in Google: "udev roule execute commands at usb plugin"

    Wertschätzung kostet nichts, aber sie ist von unschätzbarem Wert.

  • Hmpf..

    gar nicht so simpel, dieses LibreElec / Linux...

    Hab meine UDEV Regel zumindets mal, dass sie getriggert wird...

    SUBSYSTEMS=="usb", KERNEL=="sd?", ACTION=="add", RUN+="/storage/.config/usb-stick-added.sh $env{DEVNAME}"

    Liegt auch im richtigen Pfad /storage/.config/udev.rules.d/

    Das Script

    Code: /storage/.config/usb-stick-added.sh
    systemctl stop kodi
    echo "mount $@1 /var/media/usb" >>/storage/.config/[definition='1','0'][definition='1','0'][definition='1','0']log[/definition][/definition][/definition].txt
    sleep 2
    systemctl start kodi

    wird auch aufgerufen.. in meiner "[definition='1','0']log[/definition].txt" steht dann folgendes

    mount /dev/sda1 /var/media/usb

    Füge ich den Befehl manuell aus kommt:

    mount: mounting /dev/sda1 on /var/media/usb failed: Invalid argument

    mache ich daraus, da der Stick ntfs formatiert ist ein:

    mount -t ntfs /dev/sda1 /var/media/usb

    kommt folgendes:

    mount: mounting /dev/sda1 on /var/media/usb failed: Invalid argument

    mount: mounting /dev/sda1 on /var/media/usb failed: No such device

    Jemand noch einen Tip? Und wie kann ich es umgehen, dass er "beides" mounted, egal ob ntfs oder fat32?

    Keine Ahnung ob der zukünftige Anwender NTFS oder FAT32 nutzt... :(

    Das interne LibreElec moiunt wollte ich "vermeiden", da ich für mein Kopiervorgang ja wissen muss, welcher Pfad der Stick ist, der gerade eingesteckt wurde, damit ich von da kopieren kann...


    Mittels blkid bekomme ich das hier angezeigt:

    /dev/sda1: LABEL="USB 16 GB" BLOCK_SIZE="512" UUID="F0FC5FD7FC5F9726" TYPE="ntfs" PARTUUID="b4eec376-01"

  • Soooo,

    erledigt. :)

    Das "Problem" war, mittels dmesg dann zu erkennen...

    Der Stick hatte ein "dirty bit"...

    Also, entweder mount mit read-only, oder, da -force erzwingen...

    So schaut die Datei die aufegrufen wird mittels udev dann aus

    Was jetzt nur noch ein "Problem" ist, nach jedem reinstecken des/eines USB Sticks, und abziehen, zählt das Device quasi hoch..

    angefangen mit sda1, dann sdb1, dann sdc1, usw... mittlerweile bin ich bei sde1

  • Soooo

    Das Problem mit sda, sdb, sdc, usw existiert weiterhin...

    Habe aber mal mein Kopierscript überarbeitet...

    Es wird geprüft ob auf dem Stick ein Ordner mit "Bilder" (groß und kleinschreibung, keine Ahnung wie ich das anders umgehen könnte, außer doppelt prüfen) existiert.

    Wenn ja, erst dann wird geleert und kopiert... ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!