Samouczek na temat pisania podstawowych zasad UDEV w Linux
- 2627
- 556
- Laura Zygmunt
Cel
Zrozumienie podstawowych pojęć za UDEV i naucz się pisać proste zasady
Wymagania
- Uprawnienia korzeniowe
Trudność
ŚREDNI
Konwencje
- # - Wymaga podanych poleceń Linuksa, które można wykonać z uprawnieniami root
bezpośrednio jako użytkownik root lub za pomocąsudo
Komenda - $ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny
Wstęp
W systemie GNU/Linux, podczas gdy obsługa niskiego poziomu urządzeń jest obsługiwana na poziomie jądra, zarządzanie wydarzeniami związanymi z nimi jest zarządzane w przestrzeni użytkownika Udev
, a ściślej przez Udevd
Demon. Uczenie się, jak pisać reguły, które należy zastosować podczas występowania tych zdarzeń, może być naprawdę przydatne do modyfikacji zachowania systemu i dostosowania go do naszych potrzeb.
Jak zorganizowane są zasady
Reguły UDEV są zdefiniowane w plikach z .zasady
rozszerzenie. Istnieją dwie główne lokalizacje, w których można umieścić te pliki: /usr/lib/udev/reguły.D
Jest to katalog używany do reguł zainstalowanych systemem, /etc/udev/reguły.D/
jest zarezerwowany dla reguł na zamówienie.
Pliki, w których definiowane są reguły, są konwencjonalnie wymienione z liczbą jako prefiks (e.G 50-udev-default.zasady
) i są przetwarzane w porządku leksykalnym niezależnie od katalogu, w którym znajdują się. Pliki zainstalowane w /etc/udev/reguły.D
, Zastąp jednak osoby o tej samej nazwie zainstalowanej na domyślnej ścieżce systemowej.
Składnia zasad
Składnia reguł UDEV nie jest zbyt skomplikowana, gdy zrozumiesz logikę za tym. Zasada składa się z dwóch głównych sekcji: część „dopasowania”, w której definiujemy warunki zastosowania reguły, przy użyciu serii kluczy oddzielonych przecinkiem, oraz części „akcji”, w której wykonujemy niektóre rodzaj działania, gdy warunki są spełnione.
Przypadek testowy
Cóż za lepszy sposób na wyjaśnienie możliwych opcji niż skonfigurowanie rzeczywistej reguły? Jako przykład zdefiniujemy regułę, aby wyłączyć touchpad, gdy mysz jest podłączona. Oczywiście atrybuty podane w definicji reguły, odzwierciedlają mój sprzęt.
Napiszemy naszą zasadę w /etc/udev/reguły.D/99-Togglemouse.zasady
Plik z pomocą naszego ulubionego edytora tekstu. Definicja reguły może obejmować wiele linii, ale jeśli tak jest, należy użyć krążka odwrotnego przed nową postacią, jako kontynuacją linii, podobnie jak w scenariuszach powłoki. Oto nasza zasada:
Action == "Dodaj" \, attrs idproduct == "c52f" \, attrs idvendor == "046d" \, env display = " użytkownik/1000/gdm/xauthority "\, run+="/usr/bin/xinput - -disable 16 "
Przeanalizujmy to.
Operatorzy
Przede wszystkim wyjaśnienie używanych i możliwych operatorów:
== i != Operatorzy
==
jest operatorem równości i !=
jest operatorem nierówności. Korzystając z nich, ustalamy, że aby reguła została zastosowana, zdefiniowane klucze muszą odpowiednio pasować lub nie pasować do określonej wartości.
Operatorzy przypisania: = i: =
=
Operator przypisania, służy do przypisania wartości do klawiszy, które ją akceptuje. Używamy : =
Operator zamiast tego, gdy chcemy przypisać wartość i chcemy upewnić się, że nie jest ona zastąpiona przez inne reguły: wartości przypisane do tego operatora, w rzeczywistości nie mogą zostać zmienione.
Operatorzy += i -=
+=
I -=
Operatorzy są używane odpowiednio do dodania lub usunięcia wartości z listy wartości zdefiniowanych dla określonego klucza.
Klucze, których użyliśmy
Przeanalizujmy klucze, których użyliśmy w regule. Przede wszystkim mamy DZIAŁANIE
Klucz: Korzystając z niego, określiliśmy, że nasza reguła ma być stosowana, gdy nastąpi konkretne zdarzenie dla urządzenia. Prawidłowe wartości są dodać
, usunąć
I zmiana
Następnie użyliśmy Attrs
Słowo kluczowe do określania atrybutu do dopasowania. Możemy wymienić atrybuty urządzenia za pomocą Informacje Udevadm
polecenie, podając swoją nazwę lub Sysfs
ścieżka:
UDEVADM INFO -AP/Urządzenia/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/Input/Input39 UDEVADM Informacje rozpoczynają się od urządzenia określonego przez DevPath, a następnie podchodzi do łańcucha urządzeń nadrzędnych. Drukuje dla każdego znalezionego urządzenia, wszystkie możliwe atrybuty w formacie kluczowego reguły UDEV. Reguła do dopasowania, może być skomponowana przez atrybuty urządzenia i atrybuty z jednego urządzenia rodzicielskiego. Patrząc na urządzenie/urządzenia/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/input/input39 ': kernel == "input39" podsystem == "input" Driver == "" attr name == "logitech USB odbiornik USB" attr phys == "USB-0000: 00: 1d.0-1.2/input1 "attr właściwości ==" 0 "attr uniq ==" "Patrząc na urządzenie nadrzędne '/devices/pCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010 ': jądra == "0003: 046d: C52f.0010 „Subsystems ==„ HID ”sterowniki ==„ HID-Generic ”attrs country ==" 00 "Patrząc na urządzenie nadrzędne '/urządzenia/PCI0000: 00/0000: 00: 1D 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1 ': jądra == "2-1.2: 1.1 „Subsystems ==„ USB ”sterowniki ==„ USBHID ”attrs autoryzowane ==„ 1 ”attrs BalternateSetting ==„ 0 ”attrs binterfaceclass ==" 03 "attrs binterfacenumber ==" 01 " Attrs binterfaceprotocol == "00" attrs binterfacesubclass == "00" attrs bnumendPoints == "01" attrs supports_autosuspend == "1" Patrząc na urządzenia macierzyste '/devices/pCI0000: 00/0000: 00: 1d.0/USB2/2-1/2-1.2 ': jądra == "2-1.2 „Subsystems ==„ USB ”Drivers ==„ USB ”attrs autoryzowany ==" 1 "attrs unikaj_reset_quirk ==" 0 attrs bconfigurationValue == "1" attrs bDeviceClass == "00" " Attrs bdeviceprotocol == "00" attrs bdevicesubclass == "00" attrs bmaxpacketSize0 == "8" attrs BmaxPower == "98ma" attrs BnumConfigurations == "1" attrs BnumInterFaces = = "2" attrs bcddevice == "3000" attrs bmattributes == "a0" attrs busnum == "2" attrs konfiguracja == "rqr30.00_b0009 "attrs devnum ==" 12 "attrs devPath ==" 1 1.2 "attrs idproduct ==" c52f "attrs idvendor ==" 046d "attrs ltm_capable ==" nie "attrs producent ==" logitech "attrs maxchild ==" 0 "attrs produkt produkt == "odbiornik USB" attrs quirks == "0x0" attrs wymienne == "usuwalny" attrs speed == "12" attrs urbnum == "1401" attrs wersja == " 2.00 "[…]
Powyżej jest obcięte wyjście otrzymane po uruchomieniu polecenia. Jak można go odczytać z samego wyjścia, Udevadm
zaczyna się od określonej ścieżki, którą podaliśmy, i podaje nam informacje o wszystkich urządzeniach nadrzędnych. Zauważ, że atrybuty urządzenia są zgłaszane w osobnej formie (e.G JĄDRO
), podczas gdy rodzice w postaci liczby mnogiej (e.G Jądra
). Informacje o rodzicach mogą być częścią reguły, ale tylko jednego z rodziców można odwoływać się na czas: mieszanie atrybutów różnych urządzeń macierzystych nie zadziała. W regule zdefiniowaliśmy powyżej, użyliśmy atrybutów jednego urządzenia nadrzędnego: idproduct
I Idvendor
.
Następną rzeczą, którą zrobiliśmy w naszej regule, jest użycie Env
Słowo kluczowe: Można go użyć do zarówno ustawiania lub prób dopasowania zmiennych środowiskowych. Przypisaliśmy wartość do WYŚWIETLACZ
I Xauthority
te. Te zmienne są niezbędne podczas interakcji z serwerem X programowym, aby skonfigurować niektóre potrzebne informacje: z WYŚWIETLACZ
Zmienna, określamy, na jakim maszynie działa serwer, jaki wyświetlacz i na jakim ekranie odwołujemy się, i z Xauthority
Podajemy ścieżkę do pliku zawierającego informacje o uwierzytelnianiu i autoryzacji XORG. Ten plik jest zwykle znajdujący się w katalogu „Home” użytkowników.
Wreszcie użyliśmy URUCHOMIĆ
Słowo kluczowe: Służy do uruchamiania programów zewnętrznych. Bardzo ważne: nie jest to wykonywane natychmiast, ale różne działania są wykonywane po przeanalizowaniu wszystkich zasad. W tym przypadku użyliśmy xinput
narzędzie do zmiany statusu Touchpad. Nie wyjaśnię tutaj składni xinput, byłoby to poza kontekstem, po prostu zauważ to 16
jest identyfikatorem Touchpad.
Po ustaleniu naszej reguły możemy ją debugować za pomocą Test Udevadm
Komenda. Jest to przydatne do debugowania, ale tak naprawdę nie uruchamia poleceń określonych za pomocą URUCHOMIĆ
klucz:
$ UDEVADM TEST -Action = "add"/Devices/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/wejście/input39
To, co przekazaliśmy do polecenia, to działanie do symulacji, za pomocą --działanie
opcja i ścieżka SYSFS urządzenia. Jeśli nie zgłoszono żadnych błędów, nasza zasada powinna być dobrze. Aby uruchomić go w prawdziwym świecie, musimy ponownie załadować zasady:
# UDEVADM Control -RELOAD
To polecenie ponownie załaduje pliki reguł, jednak będzie miało wpływ tylko na nowe wygenerowane zdarzenia.
Widzieliśmy podstawowe pojęcia i logikę używane do tworzenia zasady UDEV, jednak porysowaliśmy tylko powierzchnię wielu opcji i możliwych ustawień. Manpage UDEV zawiera wyczerpującą listę: PROSZĘ PROSZĘ POWIEDZIEĆ WIĘCEJ WIEDZIE.
Powiązane samouczki Linux:
- Rzeczy do zainstalowania na Ubuntu 20.04
- Jak obsługiwać zdarzenia ACPI w Linux
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Pobierz Linux
- Linux Pliki konfiguracyjne: Top 30 Najważniejsze
- Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…
- Zaawansowane rejestrowanie i audyt w systemie Linux
- Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?