Ab und an möchte ich ein paar Bilder oder Videos von einem USB-Stick, auf meinem Media-PC mit Arch Linux und XBMC, wiedergeben. Jedoch muss man bei einigen Desktopumgebungen (Bsp.: Openbox) oder bei einer XBMC-Standalone Installation einen USB-Stick vorher händisch über den Terminal mounten. Nach einiger Zeit hat mich das tierisch genervt und es sollte in Zukunft automatisch geschehen.
Voraussetzung
Die Dekstopumgebung oder XBMC-Standalone muss mit ck-launch-session (ConsoleKit) und dbus-launch (DBus) gestartet werden, damit ein normaler User, ohne Root-Rechte, mit einer zusätzlichen PolKit-Regel den Datenträger sicher entfernen kann.
cat /home/username/.xinitrc # Openbox sleep 10 # manchmal gibt es Probleme wenn XBMC oder die Desktopumgebung zu schnell startet exec ck-launch-session dbus-launch --sh-syntax --exit-with-session openbox-session
cat /home/username/.xinitrc # XBMC-Standalone sleep 10 # manchmal gibt es Probleme wenn XBMC oder die Desktopumgebung zu schnell startet exec ck-launch-session dbus-launch --sh-syntax --exit-with-session xbmc-standalone
Desweiteren müssen …
pacman -S dbus polkit udisks
… installiert sein/werden und der D-Bus Dienst muss über die /etc/rc.conf vor dem Starten des XServers gestartet werden.
cat /etc/rc.conf | grep -i ^DAEMONS DAEMONS=(syslog-ng network crond netfs dbus @sensors @sshd !ntpd alsa lircd wicd avahi-daemon)
HowTo / Tutorial
Zuerst brauchen wir eine Udev-Regel, damit USB-Sticks, SD-Karten, USB-Festplatten, etc. automatisch beim Einstecken verbunden bzw. gemountet werden.
vi /etc/udev/rules.d/30-automount.rules
# vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=udevrules: # # /etc/udev/rules.d/10-my-media-automount.rules # start at sdb to ignore the system hard drive KERNEL!="sd[b-z]*", GOTO="my_media_automount_end" ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="my_media_automount_end" # import some useful filesystem info as variables IMPORT{program}="/sbin/blkid -o udev -p %N" # get the label if present, otherwise assign one based on device/partition ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}" ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k" # create the dir in /media and symlink it to /mnt ACTION=="add", RUN+="/bin/mkdir -p '/media/%E{dir_name}'" # global mount options ACTION=="add", ENV{mount_options}="relatime" # filesystem-specific mount options (777/666 dir/file perms for ntfs/vfat) ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8" # automount ntfs filesystems using ntfs-3g driver ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'" # automount all other filesystems ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'" # clean up after device removal ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'" # exit LABEL="my_media_automount_end"
Zu Windows-Zeiten habe ich nie Wechseldatenträger sicher entfernt, erst unter Linux und Mac OS X habe ich es gelernt – denn beim nächsten Einstecken des Datenträgers waren auf einmal alle Daten verschwunden. Außerdem ist die Fehlermeldung unter Mac OS X so penetrant, dass man es nach einiger Zeit sowieso macht. 🙄
Das möchte ich dann natürlich auch unter XBMC (Untermenü beim Datenträger) tun, was in der Standardkonfiguration als normaler User nicht möglich ist. Daher erlauben wir nun im PolicyKit (polkit), wie oben bereits erwähnt, dass die Unix-Gruppe storage, mount, mount-system-internal, unmount-others, drive-eject und drive-detach ausführen darf, wobei mount und mount-system-internal, durch die Udev-Regel (automatisches mounten) nicht nötig wäre – nur der Vollständigkeit halber.
mkdir -p /etc/polkit-1/localauthority/50-local.d/ vi /etc/polkit-1/localauthority/50-local.d/30-udisks.pkla
[Drive Permissions] Identity=unix-group:storage Action=org.freedesktop.udisks.filesystem-mount;org.freedesktop.udisks.filesystem-mount-system-internal;org.freedesktop.udisks.filesystem-unmount-others;org.freedesktop.udisks.drive-eject;org.freedesktop.udisks.drive-detach ResultAny=yes ResultInactive=no ResultActive=yes
Natürlich muss dann euer User (in diesem Fall: username) in der Gruppe storage sein.
usermod -aG storage username #adduser username storage
Nach einem Neustart des Media-PCs sollten Datenträger nun automatisch verbunden werden, die der User dann im XBMC auch wieder sicher entfernen kann. Ich hoffe euch hat die HowTo geholfen und einige Probleme gelöst. 😎
Schlusswort
In letzter Zeit komme ich nicht regelmäßig zum Bloggen, das hat aber nicht viel mit dem bekannten Sommerloch zu tun. Der Hauptgrund ist, dass ich mit 2 Kumpels, dem Macher von mindlo.net und einem ehemaligen Klassenkamaraden, an einem neuen Projekt arbeite – es wird für viele Internet-Menschen, vorallem IT’lern, einen Mehrwehrt bieten. Mehr dazu … irgendwann!
Quellen:
wiki.archlinux.de – Udev
gambaru.de – PolicyKit und der alltägliche Wahnsinn mit den Rechten
Vielen Dank für das kleine How-To.
In absehbarer Zukunft habe ich geplant einen Media Rechner für meine Eltern zu machen und kann das hier nur sehr gut verwenden.
> Zu Windows-Zeiten habe ich nie Wechseldatenträger sicher entfernt, erst unter Linux und Mac OS X habe ich es gelernt – denn beim nächsten Einstecken des Datenträgers waren auf einmal alle Daten verschwunden.
Kann ich so unterschreiben 😀 Erst als Linux-Nutzer habe ich mir das angewöhnt.
Danke für das HowTo, hab einige Sachen kopieren können.
Kleine Anmerkung: „adduser“ fügt den Nutzer nicht der Gruppe hinzu, dass geht mit „sudo usermod -aG $gruppe $nutzer“.
Grüße, Keba.
Danke, hab es angepasst. 🙂