Samouczek na temat pisania podstawowych zasad UDEV w Linux

Samouczek na temat pisania podstawowych zasad UDEV w Linux

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?