Portál AbcLinuxu, 26. října 2025 08:39
Rozhodnul jsem se, že si pohraju s udev a nastavím si automatické mountování především USB Mass Storage zařízení. A rád se podělím, jak jsem na to šel:
Jako první uvedu, odkud jsem čerpal: zdrojem byla Arch Linux wiki
Nejdříve jsem vytvořil primitivní skript tohoto obsahu:
#!/bin/bash
# jednoduchý skript vypíše, kdo je aktuálně přihlášený na tty1:
PREF1='/bin'
PREF2='/usr/bin'
${PREF2}/who -s | ${PREF1}/grep tty1 | ${PREF1}/cut -f '1' -d ' '
Tento skript tedy vypisuje, kdo je právě přihlášen na tty1. Tuto informaci použijeme v udev pravidlech (vím, že je primitivní a velmi zjednodušuju situaci). Dále přepokládám, že jsme nastavili příznak spustitelnosti a že absolutní cesta k němu je /usr/bin/whos_on_tty1.sh
Přepokládám, že udev pravidla zapisujeme do souboru /etc/udev/rules.d/10vlastni.rules a že máme nainstalovaný program pmount. A pravidla jsou následující:
## Muj osobni soubor s udev pravidly:
# V případě, že se bude jednat o zařízení různé od regulárního výrazu
# sd[c-z]* tak "skočíme" (GOTO) na návěstí 'konec_vlast_pravidel'.
# Schválně začínám až od 'c', protože sda a sdb jsou moje interní SATA disky.
KERNEL!="sd[c-z]*", GOTO="konec_vlast_pravidel"
# V případě, že program blkid skončí s chybou, provede se "skok"
# (GOTO) na návěstí konec_vlast_pravidel
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="konec_vlast_pravidel"
# Získáme labely. Výstup programu blkid přiřadíme
# do proměnné adresar:
PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{adresar}="%c"
# Ošetříme případy, kdy by label byl tvaru jako ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{adresar}'", ENV{adresar}="%c"
# Pokud proměnná adresar má za hodnotu prázdný řetězec, tak přiřaď
# do této proměnné hodnotu usbhd-%k (%k zastupuje název zařízení, tak jak ho produkuje Linux (jádro)):
ENV{adresar}=="", ENV{adresar}="usbhd-%k"
# Teď je čas použít náš skript, jehož absolutní cesta je
# /usr/bin/whos_on_tty1.sh. Vím, že velmi zjednodušuju,
# ale mně to slouží.
PROGRAM=="/usr/bin/whos_on_tty1.sh", ENV{mount_uziv}="%c"
# V případě, že nebude nikdo přihlášený na tty1,
# bude zařízení připojeno pod uživatelem "uzivatel"
ENV{mount_uziv}=="", ENV{mount_uziv}="uzivatel"
# Mountujeme zařízení programem pmount:
ACTION=="add", ENV{adresar}!="", RUN+="/bin/su %E{mount_uziv} -c '/usr/bin/pmount %N %E{adresar}'"
ACTION=="remove", ENV{adresar}!="", RUN+="/bin/su %E{mount_uziv} -c '/usr/bin/pumount /media/%E{adresar}'"
LABEL="konec_vlast_pravidel"
Poznámka: Je třeba mít nainstalovaný program pmount. Zařízení se připojí automaticky, ale odpojit (unmount) se provádí pomocí programu pumount (jako normální uživatel). Udev lze restartovat příkazem udevadm control restart
Tiskni
Sdílej:
Díky! Určitě se na to podívám.
Mně právě vyhovuje "plně automatické" připojování. Jinak díky za ocenění.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.