udev

Nazwa

udev — dynamiczne zarządzanie urządzeniami

OPIS

udev dynamicznie tworzy katalog urządzeń złożony tylko z plików urządzeń rzeczywiście istniejących. Tworzy lub usuwa węzły urządzeń w katalogu /dev lub zmienia nazwy interfejsów sieciowych.

Na ogół udev działa jako udevd(8) i otrzymuje zdarzenia UEVENT prosto od jądra, jeśli urządzenie zostało dodane lub usunięte z systemu.

Jeśli udev otrzyma zdarzenie urządzenia, to dla zidentyfikowania go dopasowuje jego reguły (określone w plikach konfiguracyjnych) do dostępnych atrybutów urządzenia dostarczonych przez sysfs. Reguły te mogą dostarczać dodatkowych informacji o urządzeniu, określać nazwę jego węzła lub nakazać demonowi udev uruchomienie dodatkowych poleceń jako część obsługi zdarzenia.

KONFIGURACJA

Pliki konfiguracyjne udev umieszczone są w /etc/udev/ oraz /lib/udev/. Puste ich linie oraz linie zaczynające się od '#' są ignorowane.

Pliki konfiguracyjne

udev szuka swojej głównej konfiguracji w pliku /etc/udev/udev.conf. Zawiera on zestaw zmiennych pozwalających użytkownikowi nadpisywać domyślne wartości udev. Następujące zmienne mogą być ustawione:

udev_root

Określa, gdzie umieścić węzły urządzeń w systemie plików. Domyślną wartością jest /dev.

udev_log

Poziom logowania. Prawidłowymi wartościami są liczbowe wartości poziomów logowania syslog oraz ich tekstowe odpowiedniki: err, info oraz debug.

Pliki reguł

Reguły udev czytane są z plików umieszczonych w domyślnym katalogu reguł /lib/udev/rules.d/, systemowym katalogu reguł /etc/udev/rules.d/ oraz tymczasowym /dev/.udev/rules.d/. Wszystkie reguły są sortowane i przetwarzana w porządku alfabetycznym, bez względu na to, z którego katalogu pochodzą.

Nazwy plików reguł powinny mieć niepowtarzalne nazwy, w przeciwnym razie duplikaty są ignorowane. Pliki z katalogu /etc/udev/rules.d/ mają przewagę nad plikami o tej samej nazwie z katalogu /lib/udev/rules.d/. Można to wykorzystać do zignorowania w razie potrzeby domyślnych reguł.

Każda linia w pliku reguł składa się z co najmniej jednej pary "klucz-wartość". Istnieją dwa rodzaje kluczy: dopasowujące oraz przypisujące. Jeśli w momencie otrzymania zdarzenia wszystkie podane dopasowujące klucze pasują do zdefiniowanych tam wartości, reguła zostaje zastosowana oraz wykonywane są przypisania z kluczy przypisujących.

Reguła dopasowująca może określać nazwę węzła urządzenia, dodać dowiązanie wskazujące na węzeł lub uruchomić wybrany program jako część obsługi zdarzenia. Jeśli nie znaleziono żadnej pasującej reguły, tworzony jest domyślny węzeł urządzenia.

Reguły mogą składać się z list jednej lub więcej lub więcej par "klucz-wartość" oddzielonych przecinkami. Każdy klucz opisuje dokładnie jedną operację, zależną od użytego operatora. Prawidłowymi wartościami są:

==

Sprawdzanie równości.

!=

Sprawdzanie różności.

=

Przypisanie wartości do klucza. Klucz reprezentujący listę wartości zostaje zredukowany do jednej określonej w tym przypisaniu.

+=

Poszerzenie istniejącej listy wartości klucza o zadaną.

:=

Ostateczne przypisanie wartości do klucza. Nie pozwala ono na późniejsze zmiany. Pozwala to zapobiegać dokonywaniu zmian przez późniejsze reguły.

Niżej zostaną podane nazwy kluczy mogące być użyte dla dopasowania właściwości urządzeń. Niektóre z kluczy mogą także dopasowywać właściwości urządzeń nadrzędnych w sysfs, a nie tylko urządzenia które wygenerowało zdarzenie. Jeśli w pojedynczej regule określonych jest wiele kluczy pasujących do nadrzędnego urządzenia, to urządzenie to musi być wskazane jednoznacznie (nie wolno dopasowywać do dwóch różnych nadrzędnych).

ACTION

Dopasowuje nazwę akcji zdarzenia.

DEVPATH

Dopasowuje ścieżkę urządzenia, którego zdarzenie zostało wyzwolone.

KERNEL

Dopasowuje nazwę urządzenia, którego zdarzenie zostało wyzwolone.

NAME

Dopasowuje nazwę węzła lub interfejs sieciowy. Można tego użyć, kiedy klucz NAME został ustawiony w jednej z poprzedzających reguł.

SUBSYSTEM

Dopasowuje podsystem urządzenia, którego zdarzenie zostało wyzwolone.

DRIVER

Dopasowuje nazwę sterownika urządzenia, którego zdarzenie zostało wyzwolone. Ustawiane tylko dla urządzeń powiązanych ze sterownikiem w momencie wyzwolenia zdarzenia.

ATTR{ nazwa_pliku }

Dopasowuje wartości atrybutów sysfs urządzenia, którego zdarzenie zostało wyzwolone. Maksymalnie w jednej regule użyte może być pięć kluczy ATTR. Końcowy biały znak we wzorcu wartości atrybutu jest ignorowany, jeśli nie występował na końcu dopasowywanej wartości. Zależnie od typu operatora, klucz ten jest także używany do ustawienia wartości atrybutu sysfs.

KERNELS

Przeszukuje w górę ścieżkę urządzenia dla dopasowania nazwy podanego lub nadrzędnego urządzenia.

SUBSYSTEMS

Przeszukuje w górę ścieżkę urządzenia dla dopasowania nazwy podanego lub nadrzędnego podsystemu.

DRIVERS

Przeszukuje w górę ścieżkę urządzenia dla dopasowania nazwy jego pasującej nazwy sterownika.

ATTRS{ nazwa_pliku }

Przeszukuje w górę ścieżkę urządzenia dla dopasowania nazwy jego pasującego atrybutu sysfs. Na jedną regułę może przypadać maksymalnie pięć kluczy ATTRS. Końcowy biały znak we wzorcu wartości atrybutu jest ignorowany, jeśli nie występował na końcu dopasowywanej wartości (od tłum: warto zweryfikować tłumaczenie tego zdania lub oryginał).

ENV{ klucz }

Dopasowuje wartość zmiennej środowiskowej. Na jedną regułę może przypadać maksymalnie pięć kluczy ENV. Zależnie od operatora, klucz ten może posłużyć również do wyeksportowania zmiennej do środowiska.

TEST{ maska ósemkowa }

Sprawdza istnienie pliku. W razie potrzeby, można podać maskę w notacji ósemkowej.

PROGRAM

Wykonuje zewnętrzny program. Klucz ten jest prawdziwy, jeśli program zwrócił zerowy kod wyjścia. Dla wykonywanego programu udostępnione jest całe środowisko zdarzenia. Standardowe wyjście programu jest dostępne za pomocą klucza RESULT.

RESULT

Dopasowuje otrzymane wyjście programu wywołanego kluczem PROGRAM. Można to wykorzystać w tej samej regule po wywołaniu klucza PROGRAM lub w dowolnej późniejszej.

Większość pól obsługuje powłokowe wzorce dopasowania. Wspierane są następujące:

*

Dopasowuje dowolną liczbę znaków (także zerową).

?

Dopasowuje dowolny pojedynczy znak.

[]

Dopasowuje dowolny pojedynczy znak określony pomiędzy nawiasami. Przykładowo, wzorzec 'tty[SR]' dopasowuje 'ttyS' oraz 'ttyR'. Dopuszczalne jest podanie zakresu za pomocą znaku '-', np. [0-9] dla zakresu wszystkich liczb. Jeśli znakiem następującym po '[' jest '!', to pasować będzie każdy znak nie ujęty w nawiasie.

Wartości można przypisywać następującym regułom:

NAME

Nazwa węzła lub interfejsu sieciowego do stworzenia, która może być ustawiona. Co najwyżej jedna pasująca reguła z przypisaniem 'NAME=' jest skuteczna, następne takie są ignorowane.

SYMLINK

Nazwa dowiązania symbolicznego wskazującego na węzeł. Każda pasująca reguła może dodać taką wartość do listy dowiązań symbolicznych tego węzła. W jednym kluczu można określić wiele linków naraz, rozdzielając je spacją.

OWNER, GROUP, MODE

Uprawnienia węzła urządzenia. Każda określona tu wartość nadpisuje wkompilowane domyślne wartości.

ATTR{ klucz }

Wartość, która powinna być zapisana jako atrybut sysfs w urządzeniu wywołującym zdarzenie. Przy odpowiednim operatorze klucz ten może być używany do dopasowania zadanej wartości.

ENV{ klucz }

Eksportuje zmienną do środowiska. Przy odpowiednim operatorze klucz ten może być używany do dopasowania zadanej wartości zmiennej środowiskowej.

RUN

Dodaj program do listy programów mających być wykonanymi dla określonego urządzenia. Można tego używać dla bardzo krótkich zadań. Uruchomienie obsługi zdarzenia na długi czas może blokować obsługę dalszych zdarzeń dla tego lub zależnego urządzenia. Długo pracujące zadania potrzebują być natychmiast odłączone od obsługi zdarzenia (od tłum. zapewne to zdanie wymaga lepszej polskiej wersji i bez testów się nie obędzie ;)).

Jeśli podana wartość zaczyna się od socket: ścieżka , wszystkie bieżące wartości zdarzenia zostaną przekazane do wskazanego gniazda jako komunikat w takim formacie, w jakim jądro wysyła zdarzenia UEVENT. Jeśli pierwszym znakiem określonej ścieżki jest '@', zostanie użyte gniazdo z abstrakcyjnej przestrzeni nazw zamiast istniejącego pliku gniazda.

LABEL

Etykieta, do której można skoczyć za pomocą GOTO .

GOTO

Skacze do najbliższej następnej etykiety LABEL o pasującej nazwie.

IMPORT{ typ }

Importuje do środowiska zdarzenia zestaw zmiennych zależnie od typu :

program

Wykonuje zewnętrzny program określony w przypisanej wartości i importuje jego wyjście, które musi być w formacie klucza przypisania zmiennej środowiskowej.

file

Importuje treść z określonego w wartości pliku tekstowego Treść musi być podana w formacie klucza przypisania zmiennej środowiskowej.

parent

Importuje przez odczyt bazy danych zgromadzone klucze z nadrzędnego urządzenia. Wartości przypisane do klucza IMPORT{parent} użyte są jako filtr nazw kluczy do zaimportowania. Filtr ten jest takim samym wzorcem dopasowania jak przy porównaniach.

Jeśli nie podano żadnej z powyższych opcji, udev dokona wyboru między program a file na podstawie bitu wykonywalności w prawach dostępu.

WAIT_FOR

Czekaj aż plik stanie się dostępny.

OPCJE

Opcje reguł i urządzeń:

last_rule

Zapobiega wykonaniu dalszych reguł spełniających to samo dopasowanie. Żadna z takich dalszych reguł nie odniesie rezultatu.

ignore_device

Zupełnie zignoruj to zdarzenie.

ignore_remove

Nie usuwaj węzła tego urządzenia w momencie zdarzenia usunięcia samego urządzenia. Może to być przydatnym obejściem problemów z nieprawidłowo działającymi sterownikami.

link_priority= wartość

Określ priorytet tworzenia dowiązań. Urządzenia z określonym wyższym priorytetem nadpiszą istniejące dowiązania do węzłów innych urządzeń. Domyślną wartością jest 0.

all_partitions

Utwórz węzły urządzeń dla wszystkich dostępnych partycji urządzenia blokowego. Można tego użyć dla wymiennych nośników, kiedy zmiana nośnika nie jest wykryta.

event_timeout=

Liczba sekund, w których zdarzenie UDEV będzie czekało na zakończenie zadania, nim dokona samolikwidacji.

string_escape= none|replace

Na ogół kontrolne lub potencjalne niebezpieczne znaki zastępowane są znakami używanymi w nazewnictwie urządzeń. W tej opcji można określić tryb zastępowania.

Pola NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE oraz RUN obsługują podstawienia łańcuchów w stylu printf. Znaki formatujące pola RUN zastosowane są dopiero po przetworzeniu wszystkich reguł i bezpośrednio przed wykonaniem programu. Pozwala to wykorzystać kompletne środowisko za sprawą wcześniejszego dopasowania reguł. W przypadku innych pól, podstawienia wykonywane są w momencie przetwarzania pojedynczej reguły. (od. tłum.: tłumaczenie zdań o momencie korzystania z podstawień wymaga koniecznie porównania z oryginalną wersją i rzeczywistym działaniem). Dostępnymi podstawieniami są:

$kernel, %k

Nazwa urządzenia dana przez jądro.

$number, %n

Numer urządzenia dany przez jądro. Przykładowo, numerem 'sda3' jest '3'.

$devpath, %p

Ścieżka urządzenia.

$id, %b

Nazwa urządzenia dopasowanego podczas szukania w górę ścieżki urządzenia dla opcji SUBSYSTEMS, KERNELS, DRIVERS oraz ATTRS.

$driver

Nazwa sterownika urządzenia dopasowanego podczas szukania w górę ścieżki urządzenia dla opcji SUBSYSTEMS, KERNELS, DRIVERS oraz ATTRS.

$attr{ file } , %s{ file }

Wartość atrybutu sysfs dla urządzenia, gdzie wszystkie klucze reguły zostały dopasowane. Jeśli dopasowane urządzenie nie posiada takiego atrybutu, następuje szukanie w górę łańcucha nadrzędnych urządzeń i użyty jest pierwszy dopasowany atrybut. Jeśli atrybutem jest dowiązanie (symlink), zwracany jest ostatni element z celu dowiązania.

$env{ key } , %E{ key }

Wartość zmiennej środowiskowej.

$major , %M

Numer główny urządzenia dany przez jądro.

$minor , %m

Numer podrzędny urządzenia dany przez jądro.

$result , %c

Łańcuch zwracany przez zewnętrzny program wywołany kluczem PROGRAM. Spacje w nim zawarte wyznaczają pola, do których można odnosić się liczbowo. N-te pole zwracane jest przez %c{N}. Jeśli po liczbie N następuje znak '+' (%c{N}), zwracany jest łańcuch zaczynający się polem o tym numerze i zawierającym wszystkie następne pola.

$parent , %P

Nazwa węzła nadrzędnego urządzenia.

$name

Bieżąca nazwa węzła urządzenia. Jeśli nie została zmieniona przez którąś z reguł, jest to nazwa dana przez jądro.

$links

Bieżąca lista dowiązań oddzielonych spacją. Wartość ta jest ustawiona tylko, gdy wcześniejsza reguła przypisała wartość lub w momencie usuwania urządzenia.

$root , %r

Wartość zmiennej udev_root.

$sys , %S

Punkt montowania sysfs.

$tempnode , %N

Nazwa stworzonego tymczasowego węzła urządzenia umożliwiającego dostęp do urządzenia za pomocą zewnętrznego programu zanim zostanie stworzony docelowy węzeł.

%%

Dosłowny znak '%'.

$$

Dosłowny znak '$'.

Liczbę znaków do podstawienia można ograniczyć formatem długości. Dla przykładu, '%3s{file}' wstawi tylko pierwsze trzy znaki atrybutu sysfs.

AUTOR

Greg Kroah-Hartman i Kay Sievers . Sporo pomogli Dan Stekloff i wielu innych.

TŁUMACZENIE

26.09.2008, Tomasz Nowiński na podstawie podręcznika udev dla wersji 128. Kilka zdań wymaga jeszcze solidnego sprawdzenia: nie tylko zestawienia z oryginałem, ale i zrobienia dobrych testów.

ZOBACZ TAKŻE

udevd(8) , udevadm(8)