{"id":3284,"date":"2022-02-19T18:17:47","date_gmt":"2022-02-19T17:17:47","guid":{"rendered":"http:\/\/blogperso.union31.fr\/?p=3284"},"modified":"2022-02-27T18:37:30","modified_gmt":"2022-02-27T17:37:30","slug":"udev-lancer-script-a-linsertion-dune-clef-usb-en-cours-de-redaction","status":"publish","type":"post","link":"https:\/\/blogperso.union31.fr\/?p=3284","title":{"rendered":"(UDEV) Lancer script \u00e0 l&rsquo;insertion d&rsquo;une clef USB"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Sommaire<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#I_Introduction\" >I Introduction<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#II_Presentation_rapide_de_UDEV\" >II Pr\u00e9sentation rapide de UDEV<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III_Ecriture_de_regles_UDEV_personnalisees\" >III Ecriture de r\u00e8gles UDEV personnalis\u00e9es<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III1_Une_regle\" >III.1 Une r\u00e8gle<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III2_Les_operateurs\" >III.2 Les op\u00e9rateurs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III3_Exemple_de_regles_simples_permettant_lexecution_dun_script\" >III.3 Exemple de r\u00e8gles simples permettant l\u2019ex\u00e9cution d&rsquo;un script<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III31_Exemple_1_detection_dajout_dun_peripherique\" >III.3.1 Exemple 1 : d\u00e9tection d&rsquo;ajout d&rsquo;un p\u00e9riph\u00e9rique<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III32_Exemple_2_detection_dajout_dune_clef_USB\" >III.3.2 Exemple 2 : d\u00e9tection d&rsquo;ajout d&rsquo;une clef USB<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III4_Des_outils_pour_cibler_plus_precisement_un_peripherique\" >III.4 Des outils pour cibler plus pr\u00e9cis\u00e9ment un p\u00e9riph\u00e9rique<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III41_%C2%AB_udevman_monitor_%C2%BB_visualiser_les_messages_envoye_par_noyau_pour_les_peripheriques\" >III.4.1 \u00ab\u00a0udevman monitor\u00a0\u00bb : visualiser les messages envoy\u00e9 par noyau pour les p\u00e9riph\u00e9riques<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III42_%C2%AB_udevman_info_%C2%BB_retrouver_les_proprietes_et_valeurs_dun_peripherique\" >III.4.2 \u00ab\u00a0udevman info\u00a0\u00bb : retrouver les propri\u00e9t\u00e9s et valeurs d&rsquo;un p\u00e9riph\u00e9rique<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III5_Exemple_de_selection_dun_peripherique_particulier\" >III.5 Exemple de s\u00e9lection d&rsquo;un p\u00e9riph\u00e9rique particulier<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III51_Cibler_precisement_une_clef_USB_par_son_numero_de_serie\" >III.5.1 Cibler pr\u00e9cis\u00e9ment une clef USB par son num\u00e9ro de s\u00e9rie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III52_Cibler_tout_type_de_clef_USB_inseree\" >III.5.2 Cibler tout type de clef USB ins\u00e9r\u00e9e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III53_Cibler_toutes_les_partitions_dune_clef_USB_inseree\" >III.5.3 Cibler toutes les partitions d&rsquo;une clef USB ins\u00e9r\u00e9e<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#III54_Cibler_la_partition_dune_clef_USB_qui_porte_un_nom_logique_precis\" >III.5.4 Cibler la partition d&rsquo;une clef USB qui porte un nom logique pr\u00e9cis<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#IV_Propriete_UDEV_des_devices_non_visibles_dans_une_regle_dans_certains_cas\" >IV Propri\u00e9t\u00e9 UDEV des devices non visibles dans une r\u00e8gle (dans certains cas)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V_Exemples_finaux\" >V Exemples finaux<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V1_Sauvegarde_de_donnees_pour_une_clef_USB_bien_precise\" >V.1 Sauvegarde de donn\u00e9es pour une clef USB bien pr\u00e9cise<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V11_Definition_dune_regle_UDEV\" >V.1.1 D\u00e9finition d&rsquo;une r\u00e8gle UDEV<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V12_Script_bash_associe\" >V.1.2 Script bash associ\u00e9<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V2_Copie_systematique_du_contenu_dune_clef_USB_vers_le_PC\" >V.2 Copie syst\u00e9matique du contenu d&rsquo;une clef USB vers le PC<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V21_Definition_dune_regle_UDEV\" >V.2.1 D\u00e9finition d&rsquo;une r\u00e8gle UDEV<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#V22_Script_bash_associe\" >V.2.2 Script bash associ\u00e9<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/blogperso.union31.fr\/?p=3284\/#VI_Conclusion_et_ressources\" >VI Conclusion et ressources<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"i-introduction\"><span class=\"ez-toc-section\" id=\"I_Introduction\"><\/span>I Introduction<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>L&rsquo;objectif est de pouvoir lancer un script \u00e0 l&rsquo;insertion d&rsquo;une clef USB. Script pouvant effectuer une sauvegarde de donn\u00e9es, une copie ou lancer un processus particulier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ii-presentation-rapide-de-udev\"><span class=\"ez-toc-section\" id=\"II_Presentation_rapide_de_UDEV\"><\/span>II Pr\u00e9sentation rapide de UDEV<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>UDEV est mis en \u0153uvre depuis les versions Linux sup\u00e9rieures \u00e0 2.6 (cat \/proc\/version).  C&rsquo;est un gestionnaire de p\u00e9riph\u00e9riques qui permet la d\u00e9tection voire l&rsquo;installation lorsqu&rsquo;un nouveau est ins\u00e9r\u00e9.<\/p>\n\n\n\n<p>UDEV utilise Sysfs \u00e9galement mis en \u0153uvre \u00e0 partir du noyau 2.6. Ce dernier inscrit dans le r\u00e9pertoire \/sys tous les p\u00e9riph\u00e9riques d\u00e9tect\u00e9s par le noyau linux.<\/p>\n\n\n\n<p>Lorsqu&rsquo;un disque est d\u00e9tect\u00e9, UDEV fixe plusieurs noms. Ils sont plac\u00e9s dans <strong>\/dev\/disk<\/strong> et pour chaque r\u00e9f\u00e9rence un lien symbolique est fait vers le fichier p\u00e9riph\u00e9rique :<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code lang=\"bash\" class=\"language-bash\">xavior@mon_pc:~\/scripts\/udev$ tree \/dev\/disk\/\n\/dev\/disk\/\n\u251c\u2500\u2500 by-id\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8 -&gt; ..\/..\/nvme0n1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8-part1 -&gt; ..\/..\/nvme0n1p1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8-part2 -&gt; ..\/..\/nvme0n1p2\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8-part3 -&gt; ..\/..\/nvme0n1p3\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8-part4 -&gt; ..\/..\/nvme0n1p4\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-CT1000P5PSSD8_2135313D2BC8-part5 -&gt; ..\/..\/nvme0n1p5\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8 -&gt; ..\/..\/nvme0n1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8-part1 -&gt; ..\/..\/nvme0n1p1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8-part2 -&gt; ..\/..\/nvme0n1p2\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8-part3 -&gt; ..\/..\/nvme0n1p3\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8-part4 -&gt; ..\/..\/nvme0n1p4\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 nvme-eui.000000000000000100a07521313d2bc8-part5 -&gt; ..\/..\/nvme0n1p5\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 usb-General_USB_Flash_Disk_AA00000000013411-0:0 -&gt; ..\/..\/sda\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 usb-General_USB_Flash_Disk_AA00000000013411-0:0-part1 -&gt; ..\/..\/sda1\n\u2502&nbsp;&nbsp; \u2514\u2500\u2500 usb-General_USB_Flash_Disk_AA00000000013411-0:0-part2 -&gt; ..\/..\/sda2\n\u251c\u2500\u2500 by-label\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 EFI-USB -&gt; ..\/..\/sda1\n\u2502&nbsp;&nbsp; \u2514\u2500\u2500 GRUB-SOS -&gt; ..\/..\/sda2\n\u251c\u2500\u2500 by-partlabel\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 Basic\\x20data\\x20partition -&gt; ..\/..\/nvme0n1p3\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 EFI-USB -&gt; ..\/..\/sda1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 EFI\\x20system\\x20partition -&gt; ..\/..\/nvme0n1p1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 GRUB-SOS -&gt; ..\/..\/sda2\n\u2502&nbsp;&nbsp; \u2514\u2500\u2500 Microsoft\\x20reserved\\x20partition -&gt; ..\/..\/nvme0n1p2\n\u251c\u2500\u2500 by-partuuid\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 3eb7f155-14ef-47c5-9b9c-431a2a1288a0 -&gt; ..\/..\/nvme0n1p2\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 3f6e7377-15e6-4d8e-8b78-5a3e60c7fc66 -&gt; ..\/..\/sda1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 7618d45d-2513-46c4-8c4e-85159a05db05 -&gt; ..\/..\/nvme0n1p5\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 98a46934-67d7-4d04-8255-3672e33994c4 -&gt; ..\/..\/nvme0n1p3\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 a6881757-9e91-4f77-a28f-75c63e88e381 -&gt; ..\/..\/nvme0n1p4\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 ab7d9f47-7c39-4956-86d8-546bcd7db63c -&gt; ..\/..\/nvme0n1p1\n\u2502&nbsp;&nbsp; \u2514\u2500\u2500 f6c7c1ae-1fd3-4819-8a8e-f3a16f9def3c -&gt; ..\/..\/sda2\n\u251c\u2500\u2500 by-path\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0 -&gt; ..\/..\/sda\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0-part1 -&gt; ..\/..\/sda1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0-part2 -&gt; ..\/..\/sda2\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:03:00.0-nvme-1 -&gt; ..\/..\/nvme0n1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:03:00.0-nvme-1-part1 -&gt; ..\/..\/nvme0n1p1\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:03:00.0-nvme-1-part2 -&gt; ..\/..\/nvme0n1p2\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:03:00.0-nvme-1-part3 -&gt; ..\/..\/nvme0n1p3\n\u2502&nbsp;&nbsp; \u251c\u2500\u2500 pci-0000:03:00.0-nvme-1-part4 -&gt; ..\/..\/nvme0n1p4\n\u2502&nbsp;&nbsp; \u2514\u2500\u2500 pci-0000:03:00.0-nvme-1-part5 -&gt; ..\/..\/nvme0n1p5\n\u2514\u2500\u2500 by-uuid\n    \u251c\u2500\u2500 06F242C3F242B729 -&gt; ..\/..\/nvme0n1p4\n    \u251c\u2500\u2500 1e6402aa-22a8-4774-ba35-ea349e77b9a0 -&gt; ..\/..\/nvme0n1p2\n    \u251c\u2500\u2500 3b9c95e0-5e8c-4f2b-a71d-3d247c311e9b -&gt; ..\/..\/nvme0n1p5\n    \u251c\u2500\u2500 46484D6A5D2880DC -&gt; ..\/..\/sda2\n    \u251c\u2500\u2500 4CB8-B0FE -&gt; ..\/..\/nvme0n1p1\n    \u251c\u2500\u2500 5055-11ED -&gt; ..\/..\/sda1\n    \u2514\u2500\u2500 7466C75E66C7202A -&gt; ..\/..\/nvme0n1p3\n<\/code><\/pre>\n\n\n\n<p>Pour cela UDEV utilise des r\u00e8gles d\u00e9j\u00e0 existantes \u00e0 l&rsquo;installation du syst\u00e8me. Elles se trouvent dans le r\u00e9pertoire <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\/lib\/udev\/rules.d <\/mark><\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">xavior@mon_pc:\/lib\/udev\/rules.d$ ls\n39-usbmuxd.rules                  60-serial.rules                        75-net-description.rules                  80-iio-sensor-proxy.rules\n40-usb-media-players.rules        60-tpm-udev.rules                      75-probe_mtd.rules                        80-libinput-device-groups.rules\n40-usb_modeswitch.rules           60-virtualbox-dkms.rules               77-mm-broadmobi-port-types.rules          80-mm-candidate.rules\n40-vm-hotadd.rules                60-virtualbox-guest-utils.rules        77-mm-cinterion-port-types.rules          80-net-setup-link.rules\n50-apport.rules                   60-virtualbox.rules                    77-mm-dell-port-types.rules               80-udisks2.rules\n50-firmware.rules                 61-autosuspend-manual.rules            77-mm-dlink-port-types.rules              81-net-dhcp.rules\n50-udev-default.rules             61-gdm.rules                           77-mm-ericsson-mbm.rules                  84-nm-drivers.rules\n55-dm.rules                       61-gnome-settings-daemon-rfkill.rules  77-mm-fibocom-port-types.rules            85-brltty.rules\n55-ippusbxd.rules                 61-persistent-storage-android.rules    77-mm-foxconn-port-types.rules            85-hdparm.rules\n56-hpmud.rules                    64-btrfs.rules                         77-mm-gosuncn-port-types.rules            85-hplj10xx.rules\n56-lvm.rules                      64-xorg-xkb.rules                      77-mm-haier-port-types.rules              85-nm-unmanaged.rules\n60-autosuspend-chromiumos.rules   65-libwacom.rules                      77-mm-huawei-net-port-types.rules         85-regulatory.rules\n60-block.rules                    66-snapd-autoimport.rules              77-mm-longcheer-port-types.rules          90-alsa-restore.rules\n60-cdrom_id.rules                 69-cd-sensors.rules                    77-mm-mtk-port-types.rules                90-bolt.rules\n60-crda.rules                     69-libmtp.rules                        77-mm-nokia-port-types.rules              90-console-setup.rules\n60-drm.rules                      69-lvm-metad.rules                     77-mm-pcmcia-device-blacklist.rules       90-fwupd-devices.rules\n60-evdev.rules                    69-wacom.rules                         77-mm-qdl-device-blacklist.rules          90-libgpod.rules\n60-fido-id.rules                  70-joystick.rules                      77-mm-quectel-port-types.rules            90-libinput-fuzz-override.rules\n60-inputattach.rules              70-mouse.rules                         77-mm-sierra.rules                        90-nm-thunderbolt.rules\n60-input-id.rules                 70-nvmf-autoconnect.rules              77-mm-simtech-port-types.rules            90-pulseaudio.rules\n60-libfprint-2.rules              70-power-switch.rules                  77-mm-telit-port-types.rules              95-cd-devices.rules\n60-libgphoto2-6.rules             70-printers.rules                      77-mm-tplink-port-types.rules             95-dm-notify.rules\n60-libsane.rules                  70-spice-vdagentd.rules                77-mm-ublox-port-types.rules              95-upower-csr.rules\n60-pcmcia.rules                   70-touchpad.rules                      77-mm-usb-device-blacklist.rules          95-upower-hidpp.rules\n60-persistent-alsa.rules          70-u2f.rules                           77-mm-usb-serial-adapters-greylist.rules  95-upower-hid.rules\n60-persistent-input.rules         70-uaccess.rules                       77-mm-x22x-port-types.rules               95-upower-wup.rules\n60-persistent-storage-dm.rules    71-power-switch-proliant.rules         77-mm-zte-port-types.rules                96-e2scrub.rules\n60-persistent-storage.rules       71-seat.rules                          78-graphics-card.rules                    97-hid2hci.rules\n60-persistent-storage-tape.rules  71-u-d-c-gpu-detection.rules           78-sound-card.rules                       99-systemd.rules\n60-persistent-v4l.rules           73-seat-late.rules                     80-debian-compat.rules\n60-sensor.rules                   73-special-net-names.rules             80-drivers.rules\n<\/code><\/pre>\n\n\n\n<p>Pour int\u00e9grer ses propres r\u00e8gles, le r\u00e9pertoire suivant est \u00e0 utiliser :  <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\/etc\/udev\/rules.d<\/mark><\/strong><\/p>\n\n\n\n<p>Le nom de fichier doit avoir l&rsquo;extension\u00a0\u00bb.rules\u00a0\u00bb. Les fichiers sont pris en compte par ordre alphab\u00e9tique. Ainsi le nom suivant pouvant \u00eatre utilis\u00e9 \u00ab\u00a0<code><strong>10-local.rules<\/strong><\/code>\u00ab\u00a0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"iii-ecriture-de-regles-udev-personnalisees\"><span class=\"ez-toc-section\" id=\"III_Ecriture_de_regles_UDEV_personnalisees\"><\/span>III Ecriture de r\u00e8gles UDEV personnalis\u00e9es<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iii-1-une-regle\"><span class=\"ez-toc-section\" id=\"III1_Une_regle\"><\/span>III.1 Une r\u00e8gle<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Un r\u00e8gle comporte des <strong>clefs <\/strong>qui permettent :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>de <strong>rechercher<\/strong> sp\u00e9cifiquement un p\u00e9riph\u00e9rique :<ul><li>\u00ab\u00a0KERNEL\u00a0\u00bb<\/li><li>\u00ab\u00a0SUBSYSTEM\u00a0\u00bb<\/li><li>\u00ab\u00a0DRIVER\u00a0\u00bb<\/li><li>\u00ab\u00a0ENV{key}\u00a0\u00bb &#8211;&gt; cl\u00e9\/valeur de UDEV<\/li><li>\u00ab\u00a0ATTR {key}\u00a0\u00bb &#8211;&gt; cl\u00e9\/valeur de Sysfs<\/li><li>\u00ab\u00a0ATTR{filename}\u00a0\u00bb<\/li><li>\u00ab\u00a0ACTION\u00a0\u00bb<\/li><li>\u00ab\u00a0DEVPATH\u00a0\u00bb<\/li><li>\u00ab\u00a0SYMLINK\u00a0\u00bb<\/li><li>\u00ab\u00a0SYSCTL{kernel parameter}\u00a0\u00bb<\/li><li>\u00ab\u00a0TAG\u00a0\u00bb<\/li><li>&#8230;<\/li><\/ul><\/li><li>de <strong>d\u00e9finir des actions<\/strong> :<ul><li>\u00ab\u00a0NAME\u00a0\u00bb<\/li><li>\u00ab\u00a0SYMLINK\u00a0\u00bb<\/li><li>\u00ab\u00a0OWNER, GROUP, MODE\u00a0\u00bb<\/li><li>\u00ab\u00a0SECLABEL\u00a0\u00bb<\/li><li>\u00ab\u00a0ATTR{Key}\u00a0\u00bb<\/li><li>\u00ab\u00a0SYSCTL{Key}\u00a0\u00bb<\/li><li>\u00ab\u00a0ENV{key}\u00a0\u00bb<\/li><li>\u00ab\u00a0RUN{type}\u00a0\u00bb<\/li><li>&#8230;<\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iii-2-les-operateurs\"><span class=\"ez-toc-section\" id=\"III2_Les_operateurs\"><\/span>III.2 Les op\u00e9rateurs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Les op\u00e9rateurs permettent de d\u00e9finir soit une recherche soit une affectation et qui sont :<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table><thead><tr><th>Op\u00e9rateur<\/th><th>Signification<\/th><\/tr><\/thead><tbody><tr><td>==<\/td><td>\u00e9galit\u00e9<\/td><\/tr><tr><td>!=<\/td><td>non \u00e9galit\u00e9<\/td><\/tr><tr><td>=<\/td><td>affecte valeur<\/td><\/tr><tr><td>-=<\/td><td>enl\u00e8ve valeur<\/td><\/tr><tr><td>:=<\/td><td>affecte valeur puis non modifiable ensuite<\/td><\/tr><tr><td>+=<\/td><td>ajoute une nouvelle valeur<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iii-3-exemple-de-regles-simples-permettant-l-execution-d-un-script\"><span class=\"ez-toc-section\" id=\"III3_Exemple_de_regles_simples_permettant_lexecution_dun_script\"><\/span>III.3 Exemple de r\u00e8gles simples permettant l\u2019ex\u00e9cution d&rsquo;un script<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-3-1-exemple-1-detection-d-ajout-d-un-peripherique\"><span class=\"ez-toc-section\" id=\"III31_Exemple_1_detection_dajout_dun_peripherique\"><\/span>III.3.1 Exemple 1 : d\u00e9tection d&rsquo;ajout d&rsquo;un p\u00e9riph\u00e9rique<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Premi\u00e8re r\u00e8gle pour voir ce qui se passe :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\", RUN+=\"\/bin\/sh  -c '\/bin\/echo %k : %p &gt;&gt; \/home\/xavior\/events.log'\"<\/code><\/pre>\n\n\n\n<p>Cette r\u00e8gle va loguer tout les ajouts de p\u00e9riph\u00e9riques :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>filtre : \u00ab\u00a0ACTION==\u00a0\u00bbadd\u00a0\u00bb<\/li><li>action : RUN+=\u00a0\u00bb\/bin\/sh  -c &lsquo;\/bin\/echo %k : %p &gt;&gt; \/home\/xavior\/events.log'\u00a0\u00bb<\/li><\/ul>\n\n\n\n<p>Pour \u00eatre s\u00fbr que la r\u00e8gle soit prise en compte :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">sudo udevadm control --reload-rules<\/code><\/pre>\n\n\n\n<p>ce qui donne le r\u00e9sultat suivant en branchant une clef USB :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">xavior@mon_pc:~$ cat events.log\nscsi_tmf_0 : \/devices\/virtual\/workqueue\/scsi_tmf_0\n2-3 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\n2-3:1.0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\nhost0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\nhost0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/scsi_host\/host0\ntarget0:0:0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\n0:0:0:0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\n0:0:0:0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/bsg\/0:0:0:0\nsg0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_generic\/sg0\n0:0:0:0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_disk\/0:0:0:0\n0:0:0:0 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_device\/0:0:0:0\n8:0 : \/devices\/virtual\/bdi\/8:0\nsda : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\nsda1 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1\nsda2 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda2\n8:2-fuseblk : \/devices\/virtual\/bdi\/8:2-fuseblk\n<\/code><\/pre>\n\n\n\n<p>Comme on peut le voir, des param\u00e8tres ont \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9s de UDEV et affich\u00e9 par le script shell:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u00ab\u00a0<strong>%k<\/strong>\u00a0\u00bb &#8211;&gt; le nom donn\u00e9e par le Kernel pour le p\u00e9riph\u00e9rique trouv\u00e9<\/li><li>\u00ab\u00a0<strong>%p<\/strong>\u00a0\u00bb &#8211;&gt; le chemin du p\u00e9riph\u00e9rique<\/li><\/ul>\n\n\n\n<p>Il existe une vingtaine de variables utilisables, toutes renseign\u00e9es dans le \u00ab\u00a0<strong>man udev<\/strong>\u00ab\u00a0<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-3-2-exemple-2-detection-d-ajout-d-une-clef-usb\"><span class=\"ez-toc-section\" id=\"III32_Exemple_2_detection_dajout_dune_clef_USB\"><\/span>III.3.2 Exemple 2 : d\u00e9tection d&rsquo;ajout d&rsquo;une clef USB<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Nous allons maintenant voir comment filtrer que sur l&rsquo;insertion de clef USB. Pour cela nous allons ajouter d&rsquo;autres filtres pour affiner la recherche.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\", KERNEL==\"sd*\" ,RUN+=\"\/bin\/sh  -c '\/bin\/echo %N : $name : %P : %k : %p &gt;&gt; \/home\/xavior\/events2.log'\"<\/code><\/pre>\n\n\n\n<p>Apr\u00e8s avoir branch\u00e9 2 clefs USB nous obtenons le r\u00e9sultat suivant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">xavior@mon_pc~$ cat events2.log \n\/dev\/sda : sda : : sda : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\n\/dev\/sda1 : sda1 : sda : sda1 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1\n\/dev\/sda2 : sda2 : sda : sda2 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda2\n\/dev\/sdb : sdb : : sdb : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-6\/2-6:1.0\/host1\/target1:0:0\/1:0:0:0\/block\/sdb\n\/dev\/sdb1 : sdb1 : sdb : sdb1 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-6\/2-6:1.0\/host1\/target1:0:0\/1:0:0:0\/block\/sdb\/sdb1<\/code><\/pre>\n\n\n\n<p>Nous obtenons ici les clefs USB (sda et sdb) ainsi que les partitions associ\u00e9es&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iii-4-des-outils-pour-cibler-plus-precisement-un-peripherique\"><span class=\"ez-toc-section\" id=\"III4_Des_outils_pour_cibler_plus_precisement_un_peripherique\"><\/span>III.4 Des outils pour cibler plus pr\u00e9cis\u00e9ment un p\u00e9riph\u00e9rique<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>UDEV fonctionne via les messages envoy\u00e9s par le noyau.  Des outils sont disponibles pour les visualiser ou conna\u00eetre les propri\u00e9t\u00e9s des p\u00e9riph\u00e9riques install\u00e9s.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-4-1-udevman-monitor-visualiser-les-messages-envoye-par-noyau-pour-les-peripheriques\"><span class=\"ez-toc-section\" id=\"III41_%C2%AB_udevman_monitor_%C2%BB_visualiser_les_messages_envoye_par_noyau_pour_les_peripheriques\"><\/span>III.4.1 \u00ab\u00a0udevman monitor\u00a0\u00bb : visualiser les messages envoy\u00e9 par noyau pour les p\u00e9riph\u00e9riques<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Pour visualiser en temps r\u00e9el ces messages il peut \u00eatre utilis\u00e9 la commande \u00ab\u00a0<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">udevadm monitor<\/mark><\/strong>\u00ab\u00a0. Ainsi pour voir ces messages :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">udevadm monitor -k<\/code><\/pre>\n\n\n\n<p>ce qui donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">monitor will print the received events for:\nKERNEL - the kernel uevent\n\nKERNEL[75339.500524] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3 (usb)\nKERNEL[75339.503965] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0 (usb)\nKERNEL[75339.504052] add      \/devices\/virtual\/workqueue\/scsi_tmf_0 (workqueue)\nKERNEL[75339.504137] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0 (scsi)\nKERNEL[75339.504157] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/scsi_host\/host0 (scsi_host)\nKERNEL[75339.504196] bind     \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0 (usb)\nKERNEL[75339.504238] bind     \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3 (usb)\nKERNEL[75340.783708] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0 (scsi)\nKERNEL[75340.783739] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0 (scsi)\nKERNEL[75340.783763] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_device\/0:0:0:0 (scsi_device)\nKERNEL[75340.783798] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_disk\/0:0:0:0 (scsi_disk)\nKERNEL[75340.783823] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/scsi_generic\/sg0 (scsi_generic)\nKERNEL[75340.783856] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/bsg\/0:0:0:0 (bsg)\nKERNEL[75340.802225] add      \/devices\/virtual\/bdi\/8:0 (bdi)\nKERNEL[75340.811131] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda (block)\nKERNEL[75340.811170] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1 (block)\nKERNEL[75340.811203] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda2 (block)\nKERNEL[75340.840671] bind     \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0 (scsi)\nKERNEL[75341.052677] add      \/devices\/virtual\/bdi\/8:2-fuseblk (bdi)<\/code><\/pre>\n\n\n\n<p>Pour conna\u00eetre les propri\u00e9t\u00e9s associ\u00e9es \u00e0 chaque signal :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">udevadm monitor -k -p<\/code><\/pre>\n\n\n\n<p>Ce qui donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">monitor will print the received events for:\nKERNEL - the kernel uevent\n\nKERNEL[75441.408389] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3 (usb)\nACTION=add\nDEVPATH=\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\nSUBSYSTEM=usb\nDEVNAME=\/dev\/bus\/usb\/002\/084\nDEVTYPE=usb_device\nPRODUCT=90c\/1000\/1100\nTYPE=0\/0\/0\nBUSNUM=002\nDEVNUM=084\nSEQNUM=9090\nMAJOR=189\nMINOR=211\n\nKERNEL[75441.411726] add      \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0 (usb)\nACTION=add\nDEVPATH=\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\nSUBSYSTEM=usb\nDEVTYPE=usb_interface\nPRODUCT=90c\/1000\/1100\nTYPE=0\/0\/0\nINTERFACE=8\/6\/80\nMODALIAS=usb:v090Cp1000d1100dc00dsc00dp00ic08isc06ip50in00\nSEQNUM=9091\n\n...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-4-2-udevman-info-retrouver-les-proprietes-et-valeurs-d-un-peripherique\"><span class=\"ez-toc-section\" id=\"III42_%C2%AB_udevman_info_%C2%BB_retrouver_les_proprietes_et_valeurs_dun_peripherique\"><\/span>III.4.2 \u00ab\u00a0udevman info\u00a0\u00bb : retrouver les propri\u00e9t\u00e9s et valeurs d&rsquo;un p\u00e9riph\u00e9rique<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Il est \u00e9galement possible de retrouver toutes les clefs et valeurs d&rsquo;un p\u00e9riph\u00e9rique d\u00e9j\u00e0 connect\u00e9.  Pour cela on utilise toujours la commande \u00ab\u00a0<strong>udevadm<\/strong>\u00a0\u00bb avec le param\u00e8tre &lsquo;<strong>info<\/strong>&lsquo; et le p\u00e9riph\u00e9rique recherch\u00e9<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">udevadm info \/dev\/sda<\/code><\/pre>\n\n\n\n<p>Ce qui donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">P: \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\nN: sda\nL: 0\nS: disk\/by-path\/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0\nS: disk\/by-id\/usb-General_USB_Flash_Disk_AA00000000013411-0:0\nE: DEVPATH=\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\nE: DEVNAME=\/dev\/sda\nE: DEVTYPE=disk\nE: MAJOR=8\nE: MINOR=0\nE: SUBSYSTEM=block\nE: USEC_INITIALIZED=75442785275\nE: ID_VENDOR=General\nE: ID_VENDOR_ENC=General\\x20\nE: ID_VENDOR_ID=090c\nE: ID_MODEL=USB_Flash_Disk\nE: ID_MODEL_ENC=USB\\x20Flash\\x20Disk\\x20\\x20\nE: ID_MODEL_ID=1000\nE: ID_REVISION=1100\nE: ID_SERIAL=General_USB_Flash_Disk_AA00000000013411-0:0\nE: ID_SERIAL_SHORT=AA00000000013411\nE: ID_TYPE=disk\nE: ID_INSTANCE=0:0\nE: ID_BUS=usb\nE: ID_USB_INTERFACES=:080650:\nE: ID_USB_INTERFACE_NUM=00\nE: ID_USB_DRIVER=usb-storage\nE: ID_PATH=pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0\nE: ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0\nE: ID_PART_TABLE_UUID=ae60942d-dbbf-4514-9585-9ee78cf6b983\nE: ID_PART_TABLE_TYPE=gpt\nE: DEVLINKS=\/dev\/disk\/by-path\/pci-0000:00:14.0-usb-0:3:1.0-scsi-0:0:0:0 \/dev\/disk\/by-id\/usb-General_USB_Flash_Disk_AA00000000013411-0:0\nE: TAGS=:systemd:<\/code><\/pre>\n\n\n\n<p>Pour la colonne de gauche :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>E : une propri\u00e9t\u00e9 &#8211;&gt; <strong>il faudra utiliser ENV{} pour filtrer sur ce type de clef <\/strong>;<ul><li>\u00e0 savoir que les propri\u00e9t\u00e9s commen\u00e7ant par ID_xxxx sont ajout\u00e9es par des r\u00e8gles UDEV<\/li><\/ul><\/li><li>N : nom du p\u00e9riph\u00e9rique propos\u00e9 par le noyau ;<\/li><li>S : lien symbolique cr\u00e9\u00e9 vers le p\u00e9riph\u00e9rique ;<\/li><li>P: chemin vers sysfs (\/sys\/&#8230;).<\/li><\/ul>\n\n\n\n<p>Maintenant pour avoir plus d&rsquo;informations comprenant l&rsquo;ensemble des propri\u00e9t\u00e9s du device :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">udevadm info -a \/dev\/sda<\/code><\/pre>\n\n\n\n<p>Ce qui donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Udevadm info starts with the device specified by the devpath and then\nwalks up the chain of parent devices. It prints for every device\nfound, all possible attributes in the udev rules key format.\nA rule to match, can be composed by the attributes of the device\nand the attributes from one single parent device.\n\n  looking at device '\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda':\n    KERNEL==\"sda\"\n    SUBSYSTEM==\"block\"\n    DRIVER==\"\"\n    ATTR{removable}==\"1\"\n    ATTR{range}==\"16\"\n    ATTR{ext_range}==\"256\"\n    ATTR{stat}==\"     260        7     9088      228        0        0        0        0        0      192      228        0        0        0        0        0        0\"\n    ATTR{hidden}==\"0\"\n    ATTR{events_async}==\"\"\n    ATTR{events}==\"media_change\"\n    ATTR{inflight}==\"       0        0\"\n    ATTR{ro}==\"0\"\n    ATTR{capability}==\"51\"\n    ATTR{alignment_offset}==\"0\"\n    ATTR{size}==\"15720448\"\n    ATTR{events_poll_msecs}==\"-1\"\n    ATTR{discard_alignment}==\"0\"\n\n  looking at parent device '\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0':\n    KERNELS==\"0:0:0:0\"\n    SUBSYSTEMS==\"scsi\"\n    DRIVERS==\"sd\"\n...<\/code><\/pre>\n\n\n\n<p>Les valeurs <strong>ATTR{xxx} <\/strong>sont issues des prori\u00e9t\u00e9s fournies par Sysfs<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"iii-5-exemple-de-selection-d-un-peripherique-particulier\"><span class=\"ez-toc-section\" id=\"III5_Exemple_de_selection_dun_peripherique_particulier\"><\/span>III.5 Exemple de s\u00e9lection d&rsquo;un p\u00e9riph\u00e9rique particulier<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Apr\u00e8s avoir vu comment obtenir l&rsquo;ensemble des propri\u00e9t\u00e9s d&rsquo;un p\u00e9riph\u00e9rique nous allons voir comment d\u00e9finir nos r\u00e8gles Udev pour s\u00e9lectionner pr\u00e9cis\u00e9ment un p\u00e9riph\u00e9rique, ici une clef USB. Une fois la clef trouv\u00e9e, cela actionnera un script.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-5-1-cibler-precisement-une-clef-usb-par-son-numero-de-serie\"><span class=\"ez-toc-section\" id=\"III51_Cibler_precisement_une_clef_USB_par_son_numero_de_serie\"><\/span>III.5.1 Cibler pr\u00e9cis\u00e9ment une clef USB par son num\u00e9ro de s\u00e9rie<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Nous allons voir comment cibler pr\u00e9cis\u00e9ment une clef USB unique.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">ACTION==\"add\",KERNEL==\"sd[a-z]\" ATTRS{serial}==\"AA00000000015023\", RUN+=\"\/bin\/sh  -c '\/bin\/echo %N : $name : %P : %k : %p &gt;&gt; \/home\/xavior\/events3.log'\"\n<\/code><\/pre>\n\n\n\n<p>Explications :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ACTION==\u00a0\u00bbadd\u00a0\u00bb &#8211;&gt; ne s\u00e9lectionne que les \u00e9v\u00e8nements d&rsquo;ajout de p\u00e9riph\u00e9rique<\/li><li>KERNEL==\u00a0\u00bbsd[a-z]\u00a0\u00bb &#8211;&gt; ne s\u00e9lectionne que la clef physique (et non les partitions)<\/li><li>ATTRS{serial}==\u00a0\u00bbAA00000000015023&Prime; &#8211;&gt; filtre sur le num\u00e9ro de s\u00e9rie de la clef (via les propri\u00e9t\u00e9s Sysfs)<\/li><\/ul>\n\n\n\n<p>Ce qui nous donne :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/dev\/sdb : sdb : : sdb : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-6\/2-6:1.0\/host1\/target1:0:0\/1:0:0:0\/block\/sdb<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-5-2-cibler-tout-type-de-clef-usb-inseree\"><span class=\"ez-toc-section\" id=\"III52_Cibler_tout_type_de_clef_USB_inseree\"><\/span>III.5.2 Cibler tout type de clef USB ins\u00e9r\u00e9e<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Il suffit de reprendre la r\u00e8gle d&rsquo;avant et d&rsquo;enlever un filtre comme suivant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\",KERNEL==\"sd[a-z]\", RUN+=\"\/bin\/sh  -c '\/bin\/echo %N : $name : %P : %k : %p &gt;&gt; \/home\/xavior\/events3.log'\"<\/code><\/pre>\n\n\n\n<p>Ce qui donne apr\u00e8s insertion de 2 clefs USB diff\u00e9rentes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/dev\/sda : sda : : sda : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\n\/dev\/sdb : sdb : : sdb : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-6\/2-6:1.0\/host1\/target1:0:0\/1:0:0:0\/block\/sdb<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-5-3-cibler-toutes-les-partitions-d-une-clef-usb-inseree\"><span class=\"ez-toc-section\" id=\"III53_Cibler_toutes_les_partitions_dune_clef_USB_inseree\"><\/span>III.5.3 Cibler toutes les partitions d&rsquo;une clef USB ins\u00e9r\u00e9e<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Maintenant on souhaite avoir seulement le nom des partitions d&rsquo;une clef usb :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\",KERNEL==\"sd*[0-9]\", RUN+=\"\/bin\/sh  -c '\/bin\/echo %N : $name : %P : %k : %p &gt;&gt; \/home\/xavior\/events3.log'\"<\/code><\/pre>\n\n\n\n<p>Ce qui donne apr\u00e8s l&rsquo;insertion d&rsquo;une clef :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/dev\/sda1 : sda1 : sda : sda1 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1\n\/dev\/sda2 : sda2 : sda : sda2 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda2<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"iii-5-4-cibler-la-partition-d-une-clef-usb-qui-porte-un-nom-logique-precis\"><span class=\"ez-toc-section\" id=\"III54_Cibler_la_partition_dune_clef_USB_qui_porte_un_nom_logique_precis\"><\/span>III.5.4 Cibler la partition d&rsquo;une clef USB qui porte un nom logique pr\u00e9cis<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Cette r\u00e8gle s&rsquo;activera que si la clef USB poss\u00e8de un nom logique de partition pr\u00e9cis.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\",KERNEL==\"sd*[0-9]\", ENV{PARTNAME}==\"GRUB-SOS\", RUN+=\"\/bin\/sh  -c '\/bin\/echo %N : $name : %P : %k : %p &gt;&gt; \/home\/xavior\/events3.log'\"<\/code><\/pre>\n\n\n\n<p>Ce qui donne apr\u00e8s l&rsquo;insertion de plusieurs clefs USB diff\u00e9rentes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">\/dev\/sda2 : sda2 : sda : sda2 : \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda2<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"iv-propriete-udev-des-devices-non-visibles-dans-une-regle-dans-certains-cas\"><span class=\"ez-toc-section\" id=\"IV_Propriete_UDEV_des_devices_non_visibles_dans_une_regle_dans_certains_cas\"><\/span>IV Propri\u00e9t\u00e9 UDEV des devices non visibles dans une r\u00e8gle (dans certains cas)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Lorsque on utilise la r\u00e8gle suivante qui effectue un filtre sur des propri\u00e9t\u00e9s qui ont \u00e9t\u00e9 ajout\u00e9es par UDEV (propri\u00e9t\u00e9 commen\u00e7ant par ID_xxxx) il se peut qu&rsquo;elle ne fonctionne pas car vide&#8230; alors que tout semble correct.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ACTION==\"add\", SUBSYSTEM==\"block\", ENV{ID_FS_USAGE}==\"filesystem\", RUN+=\"\/bin\/sh  -c '\/bin\/echo  ID_FS_USAGE :  $env{ID_FS_USAGE} : PARTNAME : $env{PARTNAME} : %N : $name : %P &gt;&gt; \/home\/xavior\/events4.log'\"<\/code><\/pre>\n\n\n\n<p>Il faut bien faire attention <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">au nom de fichier<\/mark> <\/strong>qui porte cette r\u00e8gle. Dans notre cas le nom de fichier utilis\u00e9 est \u00ab\u00a0<code><strong>10-local.rules<\/strong><\/code>\u00ab\u00a0. Il est pris en compte avant que les valeurs ajout\u00e9es par \u00ab\u00a0UDEV\u00a0\u00bb soient renseign\u00e9es. Sous Ubuntu 20.04 par exemple, les r\u00e8gles qui vont renseigner ces valeurs sont les fichiers commen\u00e7ant \u00e0 partir du num\u00e9ro 60xxx (dans \/liv\/udev\/rules.d).<\/p>\n\n\n\n<p>Donc pour filtrer sur les propri\u00e9t\u00e9s des devices de type disque, il faut changer l&rsquo;ordre de priorit\u00e9 de lecture de notre r\u00e8gle par une priorit\u00e9 plus tardive comme par exemple en utilisant le nom de fichier \u00ab\u00a0<code><strong>61-local.rules<\/strong><\/code>\u00ab\u00a0. Et ce n&rsquo;est qu&rsquo;\u00e0 ce moment que le r\u00e8gle pourra compl\u00e8tement agir et avoir un r\u00e9sultat comme celui-ci :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">ID_FS_USAGE : filesystem : PARTNAME : EFI-USB : \/dev\/sda1 : sda1 : sda\nID_FS_USAGE : filesystem : PARTNAME : GRUB-SOS : \/dev\/sda2 : sda2 : sda<\/code><\/pre>\n\n\n\n<p> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"v\"><span class=\"ez-toc-section\" id=\"V_Exemples_finaux\"><\/span>V Exemples finaux<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Nous trouverons 2 exemples pratiques d&rsquo;UDEV :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>une sauvegarde pour une clef usb bien pr\u00e9cise<\/li><li>une copie syst\u00e8matique des donn\u00e9es lors d&rsquo;un p\u00e9riph\u00e9rique ins\u00e9r\u00e9 USB<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V1_Sauvegarde_de_donnees_pour_une_clef_USB_bien_precise\"><\/span>V.1 Sauvegarde de donn\u00e9es pour une clef USB bien pr\u00e9cise<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V11_Definition_dune_regle_UDEV\"><\/span>V.1.1 D\u00e9finition d&rsquo;une r\u00e8gle UDEV<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Nous allons cibler un mat\u00e9riel (clef USB) bien pr\u00e9cis. Pour voir les propri\u00e9t\u00e9s nous allons dans un premier temps brancher la clef.<\/p>\n\n\n\n<p>Puis nous allons voir les propri\u00e9t\u00e9s : udevadm info \/dev\/sda1 :<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">xavior@mon_pc:\/etc\/udev\/rules.d$ <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">udevadm info \/dev\/sda1<\/mark><\/strong>\nP: \/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1\nN: sda1\nL: 0\nS: disk\/by-id\/usb-SMI_USB_DISK_AA00000000015023-0:0-part1\n...\nE: DEVPATH=\/devices\/pci0000:00\/0000:00:14.0\/usb2\/2-3\/2-3:1.0\/host0\/target0:0:0\/0:0:0:0\/block\/sda\/sda1\nE: DEVNAME=\/dev\/sda1\nE: DEVTYPE=partition\nE: PARTN=1\nE: <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">PARTNAME=Sauvegarde<\/mark><\/strong>\nE: MAJOR=8\nE: MINOR=1\nE: SUBSYSTEM=block\n...\nE: ID_REVISION=1100\nE: ID_SERIAL=SMI_USB_DISK_AA00000000015023-0:0\nE: <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">ID_SERIAL_SHORT=AA00000000015023<\/mark><\/strong>\nE: ID_TYPE=disk\n...\nE: ID_FS_UUID=C025-EDD1\nE: ID_FS_UUID_ENC=C025-EDD1\nE: ID_FS_VERSION=FAT32\nE: ID_FS_TYPE=vfat\nE: ID_FS_USAGE=filesystem\nE: ID_PART_ENTRY_SCHEME=gpt\nE: ID_PART_ENTRY_NAME=Sauvegarde\n...\n<\/code><\/pre>\n\n\n\n<p>Nos crit\u00e8res seront :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>PARTNAME : nom de la partition,<\/li><li>ID_SERIAL_SHORT : num\u00e9ro de s\u00e9rie de la clef USB.<\/li><\/ul>\n\n\n\n<p>Ce qui fera notre r\u00e8gle UDEV suivante : <strong>sudo vim \/etc\/udev\/rules.d\/61-local.rules<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">##########################\n# R\u00e8gles UDEV Perso\n#########################\n\n\n# Ajout clef USB d\u00e9di\u00e9e \u00e0 la sauvegarde\n<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">ACTION==\"add\"<\/mark><\/strong>,<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">KERNEL==\"sd[a-z][1-9]\"<\/mark><\/strong>, <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">ATTRS{serial}==\"AA00000000015023\"<\/mark><\/strong>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\"><strong>RUN+=\"\/home\/xavior\/scripts\/udev\/udev_test.sh $name $env{ID_SERIAL_SHORT} $env{ID_PART_ENTRY_NAME}<\/strong> <\/mark>\"\n<\/code><\/pre>\n\n\n\n<p>Cette r\u00e8gle se d\u00e9clenchera si :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>la clef USB est ins\u00e9r\u00e9e ;<\/li><li>le nom du p\u00e9riph\u00e9rique est de type disque USB (sda1, sdb2, autres&#8230;) ;<\/li><li>le num\u00e9ro de s\u00e9rie est celui de la clef.<\/li><\/ul>\n\n\n\n<p>On aurait pu ajouter le nom de la partition. Dans cet exemple il a \u00e9t\u00e9 d\u00e9cid\u00e9 de v\u00e9rifier ce point dans le script.<\/p>\n\n\n\n<p>Enfin, si les conditions sont remplies alors le script udev_test.sh sera execut\u00e9. Les param\u00e8tres donn\u00e9s au script sont :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>$name : le nom du p\u00e9riph\u00e9rique attribu\u00e9 par le noyau ;<\/li><li>$env{ID_SERIAL_SHORT} : le num\u00e9ro de s\u00e9rie de la clef usb ;<\/li><li>$env{IP_PART_ENTRY_NAME} : le nom de la partition.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V12_Script_bash_associe\"><\/span>V.1.2 Script bash associ\u00e9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Et maintenant le script bash \u00ab\u00a0udev_test\u00a0\u00bb qui va effectuer la sauvegarde de donn\u00e9es du PC vers la clef :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">##########################################################\n# Script permettant la sauvegarde des fichiers importants \n#  par simple insertion de la clef\n# --> lanc\u00e9 par r\u00e8gle UDEV\n#   $1 -> nom partition\n#   $2 -> num\u00e9ro de s\u00e9rie de la clef USB\n#   $3 -> libell\u00e9 de la partition\n##########################################################\n\n\n\n##########################################################\n#  Function permettant de notifier\n#   $1 -> texte \u00e0 afficher\n##########################################################\nfunction notifier() {\n\t# r\u00e9cup\u00e9rer les users Xorg et num display \n\tuserX=`who | cut -f 1 -d ' '`\n\tdisplayX=`who | cut -f 4 -d ' '`\n\n\t# si chaine non vide\n\tif [ \"$userX\" = \"\" ] \n\tthen\n\t\techo \"userX vide ....\"\n\telse\n       \t\texport DISPLAY=$displayX\n        \texport HOME=\/home\/$userX\n        \t# envoie de la notification\n        \tsu $userX -c \"zenity --notification --text=\\\"$1\\\"\"\n\tfi\n}\n\n\n#######################################################################\n#  Main\n#######################################################################\n\nclear\n\n# R\u00e9cup\u00e9ration des arguments\nnom_partition=$1\nnum_serial=$2\nlibelle_partition=$3\n\n# R\u00e9pertoire de montage cible\nnom_repertoire=\"\/mnt\/tmp_$nom_partition\"\n\n# Tests finaux pour confirmer ciblage clef USB\ncontinuer=0\nif [ \"$num_serial\" = \"AA00000000015023\" ] &amp;&amp; [ \"$libelle_partition\" = \"Sauvegarde\" ]; then\n\tcontinuer=1\nfi\n\nif [ $continuer -eq 1 ]; then\n\n\tnotifier \"Insertion clef USB $1 -- $2\\n D\u00e9but SAUVEGARDE...\"\n\n\t##################\n\t# Montage partition\n\tmkdir $nom_repertoire\n\tmount \/dev\/$nom_partition $nom_repertoire\n\n\t################\n\t# Op\u00e9rations \u00e0 faire : sauvegarde des donn\u00e9es...\n\n\t# Chemin r\u00e9pertoire final sur lequel sera mont\u00e9 la clef USB et effectu\u00e9 la sauvegarde\n\tnom_rep_sauvegarde=\"$nom_repertoire\/Sauvegarde\"\n\n\t# teste si r\u00e9pertoire sauvegarde existe --> si non on cr\u00e9\u00e9\n\tif [ ! -d $nom_rep_sauvegarde ]; then\n\t\tmkdir $nom_rep_sauvegarde\n\t\tmkdir $nom_rep_sauvegarde\/scripts\n\t\tmkdir $nom_rep_sauvegarde\/0_DOC_Vitaux\n\tfi\n\n\t# Copie des fichiers sur support amovible USB\n\n\trsync -az --delete-after \/home\/xavior\/scripts\/ $nom_rep_sauvegarde\/scripts\/\n\trsync -az --delete-after \/home\/xavior\/Documents\/0_DOC_Vitaux\/ $nom_rep_sauvegarde\/0_DOC_Vitaux\/\n\tcp -R -f '\/home\/xavior\/Bureau\/Mots de passe.kdbx' $nom_rep_sauvegarde\/\n\n\t######################\n\t# Demontage partition\n\tumount $nom_repertoire\n\trmdir $nom_repertoire\n\n\tnotifier \"FIN SAUVEGARDE : $1 -- $2\"\nfi<\/code><\/pre>\n\n\n\n<p>Ce qui donne le r\u00e9sultat ci-dessous une fois la clef ins\u00e9r\u00e9e :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blogperso.union31.fr\/wp-content\/uploads\/2022\/02\/popup_udev-1024x520.png\" alt=\"\" class=\"wp-image-3378\" width=\"708\" height=\"360\" srcset=\"https:\/\/blogperso.union31.fr\/wp-content\/uploads\/2022\/02\/popup_udev-1024x520.png 1024w, https:\/\/blogperso.union31.fr\/wp-content\/uploads\/2022\/02\/popup_udev-300x152.png 300w, https:\/\/blogperso.union31.fr\/wp-content\/uploads\/2022\/02\/popup_udev-768x390.png 768w, https:\/\/blogperso.union31.fr\/wp-content\/uploads\/2022\/02\/popup_udev.png 1155w\" sizes=\"auto, (max-width: 708px) 100vw, 708px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V2_Copie_systematique_du_contenu_dune_clef_USB_vers_le_PC\"><\/span>V.2 Copie syst\u00e9matique du contenu d&rsquo;une clef USB vers le PC<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Dans cet exemple nous allons jouer les mini-pirates : d\u00e8s qu&rsquo;une clef USB est ins\u00e9r\u00e9e sur le PC, on copie syst\u00e9matiquement le contenu de la clef &#8230;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V21_Definition_dune_regle_UDEV\"><\/span>V.2.1 D\u00e9finition d&rsquo;une r\u00e8gle UDEV<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Notre r\u00e8gle sera simple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"># copie syst\u00e9matique d'une clef USB\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">ACTION==\"add\"<\/mark>,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">KERNEL==\"sd[a-z][1-9]\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">RUN+=\"\/home\/xavior\/scripts\/udev\/udev_test2.sh $name $env{ID_SERIAL_SHORT} $env{ID_PART_ENTRY_NAME}<\/mark>\"<\/code><\/pre>\n\n\n\n<p>Les conditions d&rsquo;execution du script sont :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>l&rsquo;ajout d&rsquo;un p\u00e9riph\u00e9rique,<\/li><li>un p\u00e9riph\u00e9rique de type sda1, sdc2 ou autres &#8230;<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"V22_Script_bash_associe\"><\/span>V.2.2 Script bash associ\u00e9<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Le script ci-dessous va copier le contenu de la clef usb dans le home :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/bash\n\n##########################################################\n# Script permettant la sauvegarde des fichiers importants \n#  par simple insertion de la clef\n# --> lanc\u00e9 par r\u00e8gle UDEV\n#   $1 -> nom partition\n#   $2 -> num\u00e9ro de s\u00e9rie de la clef USB\n#   $3 -> libell\u00e9 de la partition\n##########################################################\n\n\n#######################################################################\n#  Main\n#######################################################################\n\nclear\n# R\u00e9cup\u00e9ration des arguments\nnom_partition=$1\nnum_serial=$2\nlibelle_partition=$3\n# R\u00e9pertoire de montage cible\nnom_repertoire=\"\/mnt\/tmp_$nom_partition\"\n\n##################\n# Montage partition\nmkdir $nom_repertoire\nmount \/dev\/$nom_partition $nom_repertoire\n\n################\n# Op\u00e9rations ...\n\n# cr\u00e9ation r\u00e9pertoire final\nrepertoire_final=\"\/home\/xavior\/usb\/$num_serial\/$nom_partition\"\nif [ ! -d $repertoire_final ]; then\n\tmkdir -p $repertoire_final\nfi\n\n# copie des donn\u00e9es\ncp -R -f -u $nom_repertoire\/* $repertoire_final \n\n######################\n# Demontage partition\numount $nom_repertoire\nrmdir $nom_repertoire<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"VI_Conclusion_et_ressources\"><\/span>VI Conclusion et ressources<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Nous avons vu comment impl\u00e9menter des scripts avec UDEV lors d&rsquo;ajout ou de retrait de p\u00e9riph\u00e9riques USB. UDEV est particuli\u00e8rment utile dans le cadre de l&rsquo;automatisation de t\u00e2ches en fonction d&rsquo;\u00e9v\u00e8nements de type mat\u00e9riel.<\/p>\n\n\n\n<p>Ressources :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/linuxembedded.fr\/2015\/05\/une-introduction-a-udev\" target=\"_blank\">https:\/\/linuxembedded.fr\/2015\/05\/une-introduction-a-udev<\/a> <\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.debian.org\/fr\/udev\" target=\"_blank\">https:\/\/wiki.debian.org\/fr\/udev<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/fcebron.github.io\/Udev\/\" target=\"_blank\">https:\/\/fcebron.github.io\/Udev\/<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.malekal.com\/comment-creer-les-regles-udev-rules\/\" target=\"_blank\">https:\/\/www.malekal.com\/comment-creer-les-regles-udev-rules\/<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/doc.ubuntu-fr.org\/udev\" target=\"_blank\">https:\/\/doc.ubuntu-fr.org\/udev<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.archlinux.org\/title\/udev\" target=\"_blank\">https:\/\/wiki.archlinux.org\/title\/udev<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>I Introduction L&rsquo;objectif est de pouvoir lancer un script \u00e0 l&rsquo;insertion d&rsquo;une clef USB. Script pouvant effectuer une sauvegarde de donn\u00e9es, une copie ou lancer un processus particulier. II Pr\u00e9sentation rapide de UDEV UDEV est mis en \u0153uvre depuis les<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-3284","post","type-post","status-publish","format-standard","hentry","category-_systeme"],"_links":{"self":[{"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/posts\/3284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3284"}],"version-history":[{"count":99,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/posts\/3284\/revisions"}],"predecessor-version":[{"id":3401,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=\/wp\/v2\/posts\/3284\/revisions\/3401"}],"wp:attachment":[{"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogperso.union31.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}