Portál AbcLinuxu, 1. července 2025 23:44
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.