Tutoriel sur la façon d'écrire des règles de base UDEV dans Linux

Tutoriel sur la façon d'écrire des règles de base UDEV dans Linux

Objectif

Comprendre les concepts de base derrière Udev et apprendre à écrire des règles simples

Exigences

  • Autorisation

Difficulté

MOYEN

Conventions

  • # - nécessite que les commandes Linux soient exécutées avec des privilèges racine
    directement en tant qu'utilisateur racine ou en utilisant Sudo commande
  • $ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Introduction

Dans un système GNU / Linux, tandis que les appareils de bas niveau de support sont gérés au niveau du noyau, la gestion des événements qui y sont liés sont gérées dans l'espace utilisateur par udev, et plus précisément par le udevd démon. Apprendre à rédiger des règles à appliquer sur la survenue de ces événements peut être très utile pour modifier le comportement du système et l'adapter à nos besoins.

Comment les règles sont organisées

Les règles UDEV sont définies en fichiers avec le .règles extension. Il existe deux emplacements principaux dans lesquels ces fichiers peuvent être placés: / usr / lib / udev / règles.d C'est le répertoire utilisé pour les règles installées par le système, / etc / udev / règles.d/ est réservé aux règles sur mesure.

Les fichiers dans lesquels les règles sont définis sont conventionnellement nommés avec un nombre comme préfixe (e.g 50-odev-défaut.règles) et sont traités dans l'ordre lexical indépendamment du répertoire dans lequel ils se trouvent. Fichiers installés dans / etc / udev / règles.d, Cependant, remplacez ceux avec le même nom installé dans le chemin par défaut du système.



La syntaxe des règles

La syntaxe des règles Udev n'est pas très compliquée une fois que vous comprenez la logique derrière elle. Une règle est composée par deux sections principales: la partie «match», dans laquelle nous définissons les conditions de la règle à appliquer, en utilisant une série de clés séparées par une virgule, et la partie «Action», dans laquelle nous effectuons certains sorte d'action, lorsque les conditions sont remplies.

Un cas de test

Quelle meilleure façon d'expliquer les options possibles que de configurer une règle réelle? Par exemple, nous allons définir une règle pour désactiver le pavé tactile lorsqu'une souris est connectée. Évidemment, les attributs fournis dans la définition de la règle refléteront mon matériel.

Nous rédigerons notre règle dans le / etc / udev / règles.d / 99-togglemouse.règles dossier avec l'aide de notre éditeur de texte préféré. Une définition de règle peut s'étendre sur plusieurs lignes, mais si tel est le cas, une barre oblique inverse doit être utilisée avant le caractère Newline, en tant que continuation de ligne, tout comme dans les scripts shell. Voici notre règle:

Action == "add" \, attrs idProduct == "C52f" \, attrs idVendor == "046d" \, env affiche = ": 0" \, env xauthority = "/ run / Utilisateur / 1000 / GDM / XAuthority "\, run + =" / usr / bin / xinput - Disable 16 " 

Analysons-le.

Les opérateurs

Tout d'abord, une explication des opérateurs utilisés et possibles:

== et != opérateurs

Le == est l'opérateur d'égalité et le != est l'opérateur d'inégalité. En les utilisant, nous établissons que pour que la règle soit appliquée, les clés définies doivent correspondre, ou ne correspondent pas respectivement à la valeur définie.

Les opérateurs d'affectation: = et: =

Le = L'opérateur d'affectation est utilisé pour attribuer une valeur aux clés qui accepte une. Nous utilisons le : = L'opérateur, à la place, lorsque nous voulons attribuer une valeur et que nous voulons nous assurer qu'il n'est pas remplacé par d'autres règles: les valeurs attribuées avec cet opérateur, en fait, ne peuvent pas être modifiées.

Les opérateurs + = et - =

Le += et -= Les opérateurs sont utilisés respectivement pour ajouter ou supprimer une valeur de la liste des valeurs définies pour une clé spécifique.



Les touches que nous avons utilisées

Analyons maintenant les clés que nous avons utilisées dans la règle. Tout d'abord, nous avons le ACTION Clé: En l'utilisant, nous avons spécifié que notre règle doit être appliquée lorsqu'un événement spécifique se produit pour l'appareil. Les valeurs valides sont ajouter, retirer et changement

Nous avons ensuite utilisé le Attribution mot-clé pour spécifier un attribut à faire correspondre. Nous pouvons répertorier les attributs d'un appareil en utilisant le Informations Udevadm commande, fournissant son nom ou sysfs chemin:

Udevadm Info -P / Appareils / PCI0000: 00/0000: 00: 1D.0 / USB2 / 2-1 / 2-1.2/2-1.2: 1.1/0003: 046d: C52F.0010 / entrée / entrée39 Udevadm Les informations commencent par l'appareil spécifié par le devpath, puis montent la chaîne de périphériques parentaux. Il imprime pour chaque appareil trouvé, tous les attributs possibles dans le format de clé UDEV Règles. Une règle à correspondre, peut être composée par les attributs de l'appareil et les attributs d'un appareil monoparental. En regardant l'appareil '/ périphériques / 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" sous-système == "input" Driver == "" att name == "Logitech USB récepteur" att Phys == "USB-0000: 00: 1d.0-1.2 / input1 "att Properties ==" 0 "att Uniq ==" "En regardant le périphérique parent '/ périphériques / PCI0000: 00/0000: 00: 1D.0 / USB2 / 2-1 / 2-1.2/2-1.2: 1.1/0003: 046d: C52F.0010 ': Kernels == "0003: 046d: C52F.0010 "SousSystems ==" HID "Drivers ==" Hid-Generic "attrs country ==" 00 "En regardant le périphérique parent '/ périphériques / PCI0000: 00/0000: 00: 1D.0 / USB2 / 2-1 / 2-1.2/2-1.2: 1.1 ': grains == "2-1.2: 1.1 "SousSystems ==" USB "Drivers ==" USBHID "attrs autorisé ==" 1 "attrs BalternateStting ==" 0 "attrs binterfaceClass ==" 03 "attrs binterfacenumber ==" 01 " Attrs binterfaceprotoCol == "00" attrs binterfacesubclass == "00" attrs bnumendpoints == "01" attrs supports_autosuspennd == "1" en regardant le périphérique parent '/ dispositifs / pCI0000: 00/0000: 00: 1D.0 / USB2 / 2-1 / 2-1.2 ': grains == "2-1.2 "SousSystems ==" USB "Drivers ==" USB "attrs autorisé ==" 1 "attrs Eviter_Reset_Querk ==" 0 "attrs bconfigurationvalue ==" 1 "attrs bdeviceClass ==" 00 " Attrs bdeviceProtoCol == "00" attrs bdevicesubclass == "00" attrs bmaxpacketsize0 == "8" attrs bmaxpower == "98ma" attrs bnumconfigure == "1" attrs bnuminterfaces = = "2" attrs bcddevice == "3000" attrs bmattributes == "a0" attrs busnum == "2" attrs configuration == "rqr30.00_B0009 "attrs devnum ==" 12 "attrs devpath ==" 1.2 "attrs idProduct ==" c52f "attrs idVendor ==" 046d "attrs ltm_capable ==" no "attrs fabricrant ==" Logitech "attrs maxchild ==" 0 "attraS Product  == "récepteur USB" attrs Quirks == "0x0" attrs amovible == "amovible" attrs Speed == "12" attrs urbnum == "1401" attrs version == " 2.00 "[…] 


Ci-dessus est la sortie tronquée reçue après avoir exécuté la commande. Comme vous pouvez le lire à partir de la sortie elle-même, udevadm commence par le chemin spécifié que nous avons fourni et nous donne des informations sur tous les appareils parents. Notez que les attributs de l'appareil sont signalés sous une forme singulière (e.g NOYAU), tandis que les parents sous forme plurielle (e.g GRAINES). Les informations sur les parents peuvent faire partie d'une règle, mais un seul des parents peut être référencé à la fois: le mélange des attributs de différents appareils parents ne fonctionnera pas. Dans la règle que nous avons défini ci-dessus, nous avons utilisé les attributs d'un dispositif parent: produit d'id et ID Vendeur.

La prochaine chose que nous avons faite dans notre règle est d'utiliser le Env Mots-clés: il peut être utilisé à la fois pour définir ou essayer de faire correspondre les variables d'environnement. Nous avons attribué une valeur au AFFICHER et Xautorité ceux. Ces variables sont essentielles lors de l'interaction avec le serveur X par programme, pour configurer certaines informations nécessaires: avec le AFFICHER variable, nous spécifions sur quelle machine le serveur exécute, quel affichage et quel écran nous faisons référence, et avec Xautorité Nous fournissons le chemin d'accès au fichier qui contient des informations d'authentification et d'autorisation Xorg. Ce fichier est généralement situé dans le répertoire «Home» des utilisateurs.

Enfin nous avons utilisé le COURIR Mots-clés: Ceci est utilisé pour exécuter des programmes externes. Très important: ce n'est pas exécuté immédiatement, mais les différentes actions sont exécutées une fois que toutes les règles ont été analysées. Dans ce cas, nous avons utilisé le xinput Utilité pour modifier le statut du pavé tactile. Je n'expliquerai pas la syntaxe de Xinput ici, ce serait hors contexte, notez simplement que 16 est l'ID du pavé tactile.

Une fois notre règle définie, nous pouvons le déboguer en utilisant le Test Udevadm commande. Ceci est utile pour le débogage, mais il n'exécute pas vraiment les commandes spécifiées à l'aide du COURIR clé:

$ udevadm test --action = "add" / dispositifs / pci0000: 00/0000: 00: 1D.0 / USB2 / 2-1 / 2-1.2/2-1.2: 1.1/0003: 046d: C52F.0010 / entrée / entrée39

Ce que nous avons fourni à la commande, c'est l'action à simuler, en utilisant le --action option, et le chemin Sysfs de l'appareil. Si aucune erreur n'est signalée, notre règle devrait être bonne à partir. Pour l'exécuter dans le monde réel, nous devons recharger les règles:

# Contrôle Udevadm - Reload

Cette commande rechargera les fichiers de règles, cependant, n'aura effet que sur les nouveaux événements générés.

Nous avons vu les concepts de base et la logique utilisés pour créer une règle UDEV, mais nous avons seulement gratté la surface des nombreuses options et paramètres possibles. La page manuelle Udev fournit une liste exhaustive: veuillez y consulter pour une connaissance plus approfondie.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Comment gérer les événements ACPI sur Linux
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Téléchargement Linux
  • Fichiers de configuration Linux: 30 premiers
  • Linux peut-il obtenir des virus? Exploration de la vulnérabilité de Linux…
  • Journalisation et audit avancés sur Linux
  • Commandes Linux: les 20 meilleures commandes les plus importantes que vous devez…
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?