Portál AbcLinuxu, 1. května 2025 06:58
Jak jsem se mohl v poslední době párkrát přesvědčit, spousta linuxových uživatelů sice ví, co to je UDEV; ten však na první pohled zřejmě působí příliš krypticky (třeba narozdíl od jiných „konfiguráků“), takže je pro mnohé těžké do něj proniknout. Přiznám se, že jsem byl donedávna ve stejné situaci. Pak jsem ale byl donucen pár pravidel napsat a zjistil, jak je to vše vlastně poměrně jednoduché. Takže přináším malý „manuálník“ - ovšem bez zbytečného vysvětlování a bez jakéhokoliv nároku na úplnost. Kdo chce podrobnější návod, či dokumentaci, ten jistě něco najde.
# nebude se jmenovat "ttyS4", ale "ttyModem2" KERNEL=="ttyS4", NAME="ttyModem2" # na sériový port přes USB, který odpovídá VID/PID 0x1234/0x5678 bude vytvořen symlink "/dev/modem" KERNEL=="ttyUSB*", SYSFS{idVendor}=="0x1234", SYSFS{idProduct}=="0x5678", SYMLINK+="/dev/modem" # po připojení usb hodin nastavíme přístup skupině "io" a spustíme program, který hodiny sesynchronizuje (reálný příklad ;) SYSFS{idVendor}=="16c0",SYSFS{idProduct}=="05dc",SYSFS{manufacturer}=="butrus@evangnet.cz",SYSFS{product}=="UsbClock", MODE="0660",GROUP="io",RUN+="/usr/bin/led-usb-clock synchro" # pokud vložíme 1G flash "Kingston" / "DataTraveler xyz", spustit na ni automaticky zalohu ACTION=="add", SYSFS{vendor}=="Kingston", SYSFS{model}=="DataTraveler xyz", SYSFS{size}=="1001472", SYMLINK+="/dev/kingston_zaloha", RUN+="/local/bin/kingston_zaloha.sh"
Tiskni
Sdílej:
Jen bych doplnil pár věcí, které je dobré vědět, než člověk začne:
Co s čím porovnávat, se nejlépe zjistí pomocí udevinfo
, např.
udevinfo -a -n /dev/sdb udevinfo -a -p /class/net/eth0
Ve druhém případě se zadává tzv. devpath, tj. vlastně cesta v sysfs filesystému (bez počátečního /sys
). Je ale nutné kombinovat hodnoty "ze stejné sekce".
Stejnému klíči může být přiřazeno postupně několik hodnot, platí poslední (pravidla se zpracovávají postupně, jednotlivé soubory podle abecedy). Výjimkou je NAME
, přiřazení jména je vždy finální, tj. jakmile ho jednou nastavíme, další pravidla už ho nezmění. Stejného chování lze u ostatních klíčů docílit použitím operátoru ':=
' místo normálního '=
'.
PROGRAM
nelze přímo použít jako akci, místo toho lze použít např. NAME="%c"
(substituuje se výstup příkazu volaného pomocí PROGRAM
).
Pozor na akci RUN
, zpracování probíhá sériově, takže dokud příkaz neskončí, nezpracovávají se další pravidla ani události.
Z dokumentace bych doporučil zejména udev(7)
a Writing udev Rules. Ten článek je sice lépe srozumitelný, ale v mnoha bodech zastaralý, doporučuji proto konzultovat detaily s tou manuálovou stránkou.
Automatické mountování se sice dá řešit přes udev, ale není to příliš vhodné.Proč? Jednou jsem to zkoušel a nešlo to. Resp. připojilo to mechaniku jen jednou, pokud vevnitř bylo při spuštění
udevstart
nějaký médium.
udevtrigger
.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.