USB-Stick unter Linux automatisch einbinden

Wenn du einen speziellen Linux-PC wie den Raspberry Pi für deinen Drucker mit Touch-Display hast, möchtest du vielleicht auch Dateien direkt am Drucker hochladen können. Mit einem kleinen Verlängerungskabel kannst du einen USB-Ausgang an der Vorderseite deines Druckers anbringen, an den du einen USB-Stick anschließen kannst. Wenn du dies versuchst, wirst du eines von zwei Problemen feststellen. Der Stick wird nicht eingebunden oder jeder Stick bekommt einen anderen Einbindungspunkt. Was du wirklich willst, ist ein einziger Einbindungspunkt, den wir in die Ordnerliste des Servers eingeben können, so dass wir den Ordner einfach über das Frontend des Druckers auswählen können.

In diesem Tutorial zeige ich, wie man das auf einem Raspberry Pi mit Jessie macht. Auf anderen Linux-Distributionen wird es ähnlich funktionieren. Ich werde die Punkte erwähnen, auf die du achten solltest. Wenn wir fertig sind, wird jeder angeschlossene USB-Stick nach /media/flash gemountet.

Hinzufügen der Mount/Unmount-Skripte

Zunächst benötigen wir zwei kleine Skripte, die das Einbinden und Trennen übernehmen. Es spielt keine Rolle, wo du sie installierst, aber wir werden sie im Repetier-Server-Speicherverzeichnis erstellen.

cd /var/lib/Repetier-Server
mkdir scripts
cd scripts

Nun erstellen wir das Mount-Skript:

sudo nano mountflash

Mit folgendem Inhalt:

#!/bin/bash
if [ -b "/dev/usbmemorystick" ]
then
	mkdir /media/flash
	chmod 777 /media/flash
	chown repetierserver /media/flash
	mount -o uid=repetierserver /dev/usbmemorystick /media/flash
fi

Wie du sioehst, mounten wir das Laufwerk nur, wenn das spezielle Gerät /dev/usbmemorystick vorhanden ist. Später werden wir dieses anlegen, wenn ein USB-Stick angeschlossen ist. Wir machen das Laufwerk für repetierserver zugänglich und mounten es mit diesem Benutzer. Auf diese Weise hat der Server bei Bedarf Lese- und Schreibzugriff. Als nächstes folgt das Unmount-Skript:

sudo nano unmountflash

Mit diesem Inhalt:

#!/bin/bash
umount /media/flash
rmdir /media/flash

Als nächstes machen wir die beiden Skripte ausführbar:

sudo chmod 755 mountflash unmountflash

Automatisches einbinden

Nun ist es an der Zeit, Linux mitzuteilen, dass wir den USB-Memorystick haben wollen und unsere beiden Skripte zum richtigen Zeitpunkt auszuführen. Dies wird mit zwei einfachen udev-Regeln erreicht.

sudo nano /etc/udev/rules.d/10-flash.rules

Mit diesem Inhalt:

KERNEL=="sda1", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/var/lib/Repetier-Server/scripts/mountflash", SYMLINK+="usbmemorystick"
KERNEL=="sda1", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/var/lib/Repetier-Server/scripts/unmountflash"

Worauf du achten musst, ist der Parameter KERNEL. Wenn du eine feste Festplatte hast, wird diese höchstwahrscheinlich die Kennung sda haben. In diesem Fall bekommt das nächste angeschlossene Laufwerk sdb als Gerätekennung. Da der Raspberry nur eine SD-Karte hat, ist es in diesem Fall sda1. Der RUN-Parameter ruft unsere beiden Skripte auf. Wenn du eine andere Position gewählt hast, aktualisiere den Pfad entsprechend. Der SYMLINK erzeugt unser spezielles Gerät, das wir zum Mounten verwenden.

Neuere Linux-Versionen verwenden eine neuere udev-Version, bei der Mounts in einer Sandbox ausgeführt werden. Daher musst du auch die Datei /lib/systemd/system/udev.service bearbeiten

sudo nano /lib/systemd/system/udev.service

und stelle sicher, dass das Feld im Abschnitt Service die Zeile

MountFlags=shared

hat, um udev anzuweisen, nicht in eine Sandbox zu mounten.

Jetzt musst du nur noch deinen PC neu starten und testen, ob es funktioniert. Füge den Ordner in Repetier-Server nur dann hinzu, wenn ein Laufwerk angeschlossen ist oder du es nicht durchsuchen kannst.