{"id":1892,"date":"2023-09-09T19:00:54","date_gmt":"2023-09-09T17:00:54","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=1892"},"modified":"2023-09-09T19:00:56","modified_gmt":"2023-09-09T17:00:56","slug":"udev-geraete-unter-linux-automatisieren","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/09\/udev-geraete-unter-linux-automatisieren\/","title":{"rendered":"Udev &#8211; Ger\u00e4te unter Linux automatisieren"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Schlie\u00dft man unter Linux Ger\u00e4te an, passiert etwas damit &#8211; das Ger\u00e4t wird erkannt und l\u00e4sst sich nutzen. Egal ob es sich um einen USB-Stick, eine externe oder interne Festplatte handelt, eine Webcam oder was auch immer &#8211; der Linux-Kernel muss die Hardware erkennen &#8211; dies geschieht nat\u00fcrlich automatisch, anschlie\u00dfend sorgt entsprechende Software daf\u00fcr, was mit der Hardware geschieht.<br>Verantwortlich f\u00fcr die Einbindung von Hardware ist unter Linux eine Systemsoftware namens Udev. Udev bindet die Hardware ein und sorgt daf\u00fcr, dass diese vom System genutzt werden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nehmen wir als Beispiel eine externe Festplatte, man schlie\u00dft eine solche an, der Linux-Kernel erkennt diese &#8211; anschlie\u00dfend nimmt sich Udev der Hardware an und bindet diese in das Systemverzeichnis &#8222;<em>\/dev<\/em>&#8220; als neue Ger\u00e4tedatei ein, dann ist die Hardware nutzbar.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"865\" height=\"173\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/dia.png\" alt=\"\" class=\"wp-image-1893\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/dia.png 865w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/dia-300x60.png 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/dia-768x154.png 768w\" sizes=\"auto, (max-width: 865px) 100vw, 865px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Udev stellt jegliche Hardware, egal ob eingebaut oder angeschlossen, unter &#8222;<em>\/dev<\/em>&#8220; zur Verf\u00fcgung. Doch kann die Software nicht nur Hardware nutzbar machen, die Software kann uns auch weiter behilflich sein &#8211; sie kann daf\u00fcr sorgen, dass mit der Hardware geschieht, was wir m\u00f6chten &#8211; etwa dass sich der Dateimanager automatisch \u00f6ffnet, wenn ein USB-Medium angeschlossen wird &#8230;<br>Sehen wir uns einfach einmal an, wie Udev funktioniert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gehen wir wieder zur\u00fcck zu unserer externen Festplatte &#8211; wir schlie\u00dfen die Hardware an den Computer an, der Linux-Kernel erkennt diese. Der Linux-Kernel erstellt unter &#8222;<em>\/sys<\/em>&#8220; einen Ger\u00e4tenamen. Udev erkennt die neu angeschlossene Hardware und bindet diese unter &#8222;<em>\/dev<\/em>&#8220; ein. Was mit Hardware geschehen soll, liest diese Software aus den Dateien unter &#8222;<em>\/lib\/udev\/rules.d\/<\/em>&#8220; aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1024x576.jpg\" alt=\"\" class=\"wp-image-1894\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1024x576.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-300x169.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-768x432.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1536x864.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Und genau dieses Verzeichnis k\u00f6nnen wir nutzen, um dem System zu zeigen, was mit entsprechender Hardware geschehen soll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zu Beginn m\u00fcssen wir erst einmal den eindeutigen Namen der Hardware kennen. H\u00e4ngen wir ein externes USB-Medium ein, zeigt uns der Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mount<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">wo das System dieses einh\u00e4ngt. Ein Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/dev\/sda1 on \/media\/robertg\/Ventoy type exfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,iocharset=utf8,errors=remount-ro,uhelper=udisks2)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wir finden diesen USB-Stick unter &#8222;<em>\/media\/robertg\/Ventoy\/<\/em>&#8222;, er nennt sich also ganz einfach &#8222;<em>Ventoy<\/em>&#8220; &#8211; er kann aber auch recht kryptische Bezeichnungen haben, wenn Sie ihn nicht umbenannt haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als\u00a0root\u00a0zeigen uns:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lsblk<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"690\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1-1024x690.jpg\" alt=\"\" class=\"wp-image-1895\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1-1024x690.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1-300x202.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1-768x517.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-1.jpg 1485w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(<em>MBR<\/em>) oder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>blkid<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-1024x586.jpg\" alt=\"\" class=\"wp-image-1896\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-1024x586.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-300x172.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-768x440.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-1536x880.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-2-2048x1173.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">(<em>GPT<\/em>) dies sch\u00f6n \u00fcbersichtlich. Der Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>journalctl -f<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">zeigt uns, was passiert, w\u00e4hrend man Hardware anschlie\u00dft (<em>erst starten, dann anschlie\u00dfen, mit <kbd>Strg+c<\/kbd> beenden<\/em>):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-1024x586.jpg\" alt=\"\" class=\"wp-image-1897\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-1024x586.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-300x172.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-768x440.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-1536x880.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-3-2048x1173.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hier vor allem wichtig ist die eindeutige Bezeichnung:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dez 10 03:54:41 debian-huawei kernel: usb 2-3: New USB device found, idVendor=0781, idProduct=5591, bcdDevice= 1.00<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Speziell &#8222;<strong>idVendor=0781<\/strong>&#8220; und &#8222;<strong>idProduct=5591<\/strong>&#8222;. \u00c4hnliche Ausgaben zur eindeutigen Erkennung zeigt uns der Befehl<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dmesg | grep -i usb<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">nach dem Anschlie\u00dfen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-1024x586.jpg\" alt=\"\" class=\"wp-image-1898\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-1024x586.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-300x172.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-768x440.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-1536x880.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-4-2048x1173.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Auch folgender Befehl kann zur eindeutigen Identifizierung beitragen (<em>nach dem Anschlie\u00dfen<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>udevadm info --attribute-walk --name=\/dev\/sda1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In diesem Fall gibt man einfach die Partition an:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>udevadm info --attribute-walk --name=\/dev\/sda1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Oder w\u00e4hrend des Anschlie\u00dfens (<em>erster Befehl ist jedoch verst\u00e4ndlicher<\/em>):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"586\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-1024x586.jpg\" alt=\"\" class=\"wp-image-1899\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-1024x586.jpg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-300x172.jpg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-768x440.jpg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-1536x880.jpg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/udev-5-2048x1173.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dies war alles ein wenig viel &#8211; mehr als &#8222;<strong>idVendor=<\/strong>&#8220; und &#8222;<strong>idProduct=<\/strong>&#8220; und Informationen wie &#8222;<strong>KERNEL==&#8220;sda1&#8243;<\/strong>&#8220; und &#8222;<strong>SUBSYSTEM==&#8220;block&#8220;<\/strong>&#8220; ben\u00f6tigen Sie jedoch nicht. Jetzt k\u00f6nnen wir dem System mit einer Udev-Regel zeigen, was es mit der Hardware anstellen soll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als Beispiel m\u00f6chte ich, dass der Stick sich mit dem Namen &#8222;<strong>musik<\/strong>&#8220; im System einh\u00e4ngt und der Benutzer &#8222;<strong>robert<\/strong>&#8220; vollen Zugriff (<em>alle Rechte<\/em>) darauf hat. Wir legen (<em>nat\u00fcrlich als root<\/em>) unter &#8222;<em>\/lib\/udev\/rules.d\/<\/em>&#8220; eine neue Datei an &#8211; ich nenne diese beispielsweise &#8222;<strong>10-usb-music.rules<\/strong>&#8220; und bef\u00fclle sie wie folgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>KERNEL==\"sda1\", SUBSYSTEM==\"block\", ATTR{ID_VENDOR_ID}==\"0781\", ATTR{ID_SERIAL_SHORT}==\"5591\", OWNER=\"robert\", SYMLINK+=\"musik\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt k\u00f6nnen wir nat\u00fcrlich nicht nur dem System sagen, wo sich der USB-Stick etwa einh\u00e4ngen soll &#8211; wir k\u00f6nnen nat\u00fcrlich auch etwa ein Script ausf\u00fchren lassen, wenn er eingeh\u00e4ngt wird &#8211; Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>KERNEL==\"sda1\", ACTION==\"add\", SUBSYSTEM==\"block\", ATTR{ID_VENDOR_ID}==\"0781\", ATTR{ID_SERIAL_SHORT}==\"5591\", OWNER=\"robert\", SYMLINK+=\"musik\", RUN==\"\/pfad\/zum\/Script.sh\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Um eine Aktion auszuf\u00fchren, f\u00fcgen wir &#8222;<strong>ACTION==&#8220;add&#8220;<\/strong>&#8220; hinzu, am Ende der Regel folgt mit &#8222;<strong>RUN==&#8220;\/pfad\/zum\/Script.sh&#8220;<\/strong>&#8220; die Aufgabe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sollte die Regel nicht sofort wirken, hilft ein Neustart des Systems.&nbsp;<strong>Wichtig:<\/strong>&nbsp;geben Sie der neuen Regel einen Namen mit einer niedrigen Zahl, Regeln mit niedriger Zahl (<em>im Beispiel &#8222;10&#8220;<\/em>) werden zuerst ausgef\u00fchrt.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Dokumentation:\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/udev.html\" target=\"_blank\">Freedesktop.org<\/a>\u00a0und\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.archlinux.de\/title\/Udev\" target=\"_blank\">Archlinux<\/a>.<\/p>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"1892\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">3    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"1892\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Schlie\u00dft man unter Linux Ger\u00e4te an, passiert etwas damit &#8211; das Ger\u00e4t wird erkannt und l\u00e4sst sich nutzen. Egal ob es sich um einen USB-Stick, eine externe oder interne Festplatte handelt, eine Webcam oder was auch immer &#8211; der Linux-Kernel muss die Hardware erkennen &#8211; dies geschieht nat\u00fcrlich automatisch, anschlie\u00dfend sorgt entsprechende Software daf\u00fcr, was [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1898,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[15],"class_list":["post-1892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-system","tag-system"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=1892"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1892\/revisions"}],"predecessor-version":[{"id":1900,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1892\/revisions\/1900"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/1898"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=1892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=1892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=1892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}