{"id":256073,"date":"2021-11-22T18:26:59","date_gmt":"2021-11-22T10:26:59","guid":{"rendered":"https:\/\/blog.zhenglei.net\/?p=256073"},"modified":"2021-11-23T18:48:02","modified_gmt":"2021-11-23T10:48:02","slug":"creating-udev-rule-for-usb-dac","status":"publish","type":"post","link":"https:\/\/blog.zhenglei.net\/?p=256073","title":{"rendered":"Creating udev rule for USB DAC"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Target:<\/strong><\/p>\n\n\n\n<p>Create a new udev rule which will:<\/p>\n\n\n\n<p>   Stop the Jack Daemon if DAC power off<\/p>\n\n\n\n<p>   Start the Jack Daemon if DAC power on <\/p>\n\n\n\n<p>  <\/p>\n\n\n\n<p class=\"has-large-font-size\"><strong>Identify USB DAC Card:<\/strong><\/p>\n\n\n\n<p style=\"font-size:24px\">     Power on USB DAC<\/p>\n\n\n\n<p style=\"font-size:24px\"><em>     <\/em>Check the name of USB DAC<\/p>\n\n\n\n<p><strong><em>ls -l \/proc\/asound\/<\/em><\/strong><br>lrwxrwxrwx 1 root root 5 11\u6708 22 17:55 AUDIO -&gt; card2<br>dr-xr-xr-x 3 root root 0 11\u6708 16 18:43 card0<br>dr-xr-xr-x 4 root root 0 11\u6708 16 18:43 card1<br>dr-xr-xr-x 4 root root 0 11\u6708 22 17:55 card2<br>-r&#8211;r&#8211;r&#8211; 1 root root 0 11\u6708 16 16:36 cards<br>-r&#8211;r&#8211;r&#8211; 1 root root 0 11\u6708 16 18:43 devices<br>lrwxrwxrwx 1 root root 5 11\u6708 16 18:43 Generic -&gt; card0<br>-r&#8211;r&#8211;r&#8211; 1 root root 0 11\u6708 16 18:43 hwdep<br>-r&#8211;r&#8211;r&#8211; 1 root root 0 11\u6708 16 18:43 modules<br>dr-xr-xr-x 2 root root 0 11\u6708 16 18:43 oss<br>-r&#8211;r&#8211;r&#8211; 1 root root 0 11\u6708 16 18:43 pcm<\/p>\n\n\n\n<p style=\"font-size:24px\">    card2 is the name of DAC Card<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><em>ls  \/sys\/class\/sound<\/em><\/strong>\ncard0  card2      controlC1  hwC0D0  pcmC0D3p  pcmC1D0p  pcmC2D0p\ncard1  controlC0  controlC2  hwC1D0  pcmC1D0c  pcmC2D0c  timer\n\n\n<\/code><\/pre>\n\n\n\n<p style=\"font-size:24px\">Get the Attr List of card2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><em>udevadm info \/sys\/class\/sound\/card2<\/em><\/strong>\nP: \/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4\/2-4:1.0\/sound\/card2\nL: 0\nE: DEVPATH=\/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4\/2-4:1.0\/sound\/card2\nE: SUBSYSTEM=sound\nE: USEC_INITIALIZED=523137960408\nE: ID_PATH=pci-0000:00:12.0-usb-0:4:1.0\nE: ID_PATH_TAG=pci-0000_00_12_0-usb-0_4_1_0\nE: ID_FOR_SEAT=sound-pci-0000_00_12_0-usb-0_4_1_0\nE: SOUND_INITIALIZED=1\nE: ID_VENDOR_FROM_DATABASE=Actions Semiconductor Co., Ltd\nE: ID_VENDOR=ACTIONS\nE: ID_VENDOR_ENC=ACTIONS\nE: ID_VENDOR_ID=10d6\nE: ID_MODEL=USB_AUDIO\nE: ID_MODEL_ENC=USB\\x20AUDIO\nE: ID_MODEL_ID=dd01\nE: ID_REVISION=0100\nE: ID_SERIAL=ACTIONS_USB_AUDIO_4512482ADF0FEEEE\nE: ID_SERIAL_SHORT=4512482ADF0FEEEE\nE: ID_TYPE=audio\nE: ID_BUS=usb\nE: ID_USB_INTERFACES=:010100:010200:030000:\nE: ID_USB_INTERFACE_NUM=00\nE: ID_USB_DRIVER=snd-usb-audio\nE: ID_ID=usb-ACTIONS_USB_AUDIO_4512482ADF0FEEEE-00\nE: SYSTEMD_WANTS=sound.target\nE: TAGS=:systemd:seat:\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><strong><em>udevadm info --path=\/sys\/class\/sound\/card2 --attribute-walk<\/em><\/strong>\n\nlooking at device '\/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4\/2-4:1.0\/sound\/card2':\n    KERNEL==\"card2\"\n    SUBSYSTEM==\"sound\"\n    DRIVER==\"\"\n    ATTR{number}==\"2\"\n    ATTR{id}==\"AUDIO\"\n\n  looking at parent device '\/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4\/2-4:1.0':\n    KERNELS==\"2-4:1.0\"\n    SUBSYSTEMS==\"usb\"\n    DRIVERS==\"snd-usb-audio\"\n    ATTRS{supports_autosuspend}==\"1\"\n    ATTRS{bInterfaceProtocol}==\"00\"\n    ATTRS{authorized}==\"1\"\n    ATTRS{bNumEndpoints}==\"00\"\n    ATTRS{bInterfaceClass}==\"01\"\n    ATTRS{bInterfaceNumber}==\"00\"\n    ATTRS{bInterfaceSubClass}==\"01\"\n    ATTRS{bAlternateSetting}==\" 0\"\n\n  looking at parent device '\/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4':\n    KERNELS==\"2-4\"\n    SUBSYSTEMS==\"usb\"\n    DRIVERS==\"usb\"\n    ATTRS{devpath}==\"4\"\n    ATTRS{bDeviceProtocol}==\"00\"\n    ATTRS{bmAttributes}==\"c0\"\n    ATTRS{quirks}==\"0x0\"\n    ATTRS{tx_lanes}==\"1\"\n    ATTRS{product}==\"USB AUDIO\"\n    ATTRS{busnum}==\"2\"\n    ATTRS{bcdDevice}==\"0100\"\n    ATTRS{bNumConfigurations}==\"1\"\n    ATTRS{manufacturer}==\"ACTIONS\"\n    ATTRS{bNumInterfaces}==\" 4\"\n    ATTRS{bDeviceClass}==\"00\"\n    ATTRS{configuration}==\"\"\n    ATTRS{maxchild}==\"0\"\n    ATTRS{devnum}==\"20\"\n    ATTRS{serial}==\"4512482ADF0FEEEE\"\n    ATTRS{bMaxPower}==\"300mA\"\n    ATTRS{idVendor}==\"10d6\"\n    ATTRS{bDeviceSubClass}==\"00\"\n    ATTRS{urbnum}==\"25748\"\n    ATTRS{idProduct}==\"dd01\"\n    ATTRS{version}==\" 1.00\"\n    ATTRS{removable}==\"unknown\"\n    ATTRS{authorized}==\"1\"\n    ATTRS{bMaxPacketSize0}==\"64\"\n    ATTRS{speed}==\"12\"\n    ATTRS{rx_lanes}==\"1\"\n    ATTRS{lATTRS{avoid_reset_quirk}==\"0\"\n    ATTRS{bConfigurationValue}==\"1\"\n\n  looking at parent device '\/devices\/pci0000:00\/0000:00:12.0\/usb2':\n    KERNELS==\"usb2\"\n    SUBSYSTEMS==\"usb\"DRIVERS==\"usb\"\n    ATTRS{configuration}==\"\"\n    ATTRS{idProduct}==\"0001\"\n    ATTRS{version}==\" 1.10\"\n    ATTRS{tx_lanes}==\"1\"\n    ATTRS{bNumInterfaces}==\" 1\"\n    ATTRS{bDeviceClass}==\"09\"\n    ATTRS{removable}==\"unknown\"\n    ATTRS{authorized_default}==\"1\"\n    ATTRS{bDeviceSubClass}==\"00\"\n    ATTRS{interface_authorized_default}==\"1\"\n    ATTRS{busnum}==\"2\"\n    ATTRS{bDeviceProtocol}==\"00\"\n    ATTRS{bMaxPower}==\"0mA\"\n    ATTRS{quirks}==\"0x0\"\n    ATTRS{speed}==\"12\"\n    ATTRS{bcdDevice}==\"0419\"\n    ATTRS{maxchild}==\"5\"\n    ATTRS{idVendor}==\"1d6b\"\n    ATTRS{devpath}==\"0\"\n    ATTRS{manufacturer}==\"Linux 4.19.0-9-amd64 ohci_hcd\"\n    ATTRS{avoid_reset_quirk}==\"0\"\n    ATTRS{bMaxPacketSize0}==\"64\"\n    ATTRS{rx_lanes}==\"1\"\n    ATTRS{bmAttributes}==\"e0\"\n    ATTRS{urbnum}==\"511\"\n    ATTRS{bNumConfigurations}==\"1\"\n    ATTRS{product}==\"OHCI PCI host controller\"\n    ATTRS{serial}==\"0000:00:12.0\"\n    ATTRS{bConfigurationValue}==\"1\"\n    ATTRS{ltm_capable}==\"no\"\n    ATTRS{devnum}==\"1\"\n    ATTRS{authorized}==\"1\"\n\n    \n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Get kernel prop\n<strong>udevadm monitor --kernel --property --subsystem-match=usb<\/strong>\nmonitor will print the received events for:\nKERNEL - the kernel uevent\n\nKERNEL&#091;1083.319560] add      \/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4 (usb)\nACTION=add\nDEVPATH=\/devices\/pci0000:00\/0000:00:12.0\/usb2\/2-4\nSUBSYSTEM=usb\nDEVNAME=\/dev\/bus\/usb\/002\/002\nDEVTYPE=usb_device\nPRODUCT=10d6\/dd01\/100\nTYPE=0\/0\/0\nBUSNUM=002\nDEVNUM=002\nSEQNUM=2112\nMAJOR=189\nMINOR=129<\/code><\/pre>\n\n\n\n<p style=\"font-size:24px\">Write your udev rule based on selected attrs<\/p>\n\n\n\n<p class=\"has-normal-font-size\"><em><strong>cat \/opt\/local\/libexec\/udev\/rules.d\/99-AD-86d.rules<\/strong><\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ACTION==\"add\",SUBSYSTEM==\"sound\",ATTR{id}==\"AUDIO\",RUN+=\"\/opt\/local\/bin\/add_ad_86d.sh\"\nACTION==\"remove\",SUBSYSTEM==\"usb\",ATTRS{idVendor}==\"10d6\",ATTRS{idProduct}==\"dd01\",RUN+=\"\/opt\/local\/bin\/remove_ad_86d.sh\"<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Target: Create a new udev rule which wil &hellip; <a href=\"https:\/\/blog.zhenglei.net\/?p=256073\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4,18,1,206],"tags":[108],"class_list":["post-256073","post","type-post","status-publish","format-standard","hentry","category-linux","category-lfs","category-software-download","category-uncategorized","category-usb","tag-music"],"_links":{"self":[{"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/posts\/256073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=256073"}],"version-history":[{"count":8,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/posts\/256073\/revisions"}],"predecessor-version":[{"id":256084,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=\/wp\/v2\/posts\/256073\/revisions\/256084"}],"wp:attachment":[{"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=256073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=256073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhenglei.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=256073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}