Systemd

如何創建udev規則?

  • March 14, 2021

我正在嘗試為以下設備創建一個簡單的 udev 規則,Sony Computer Entertainment Inc BD Remote Control,但它不起作用,我已經閱讀了幾個教程,一些文件和其他類似這樣的疑問文章,無論如何我都不能讓它起作用。

我只是不知道這是否是設備屬性錯誤、不支持 udev 規則的分發或任何其他錯誤。

“sudo reboot”僅用於測試目的。

我正在使用 Linux Mint。

Linux Mint Linux HP 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

這是我做過的幾個測試之一:

ACTION=="add", SUBSYSTEM=="input", SUBSYSTEMS=="input",
ATTR{phys}=="00:19:86:00:15:36", RUN+="sudo reboot"

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

 looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/bluetooth/hci0/hci0:11/0005:054C:0306.003A/input/input70/event15':
   KERNEL=="event15"
   SUBSYSTEM=="input"
   DRIVER==""

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/bluetooth/hci0/hci0:11/0005:054C:0306.003A/input/input70':
   KERNELS=="input70"
   SUBSYSTEMS=="input"
   DRIVERS==""
   ATTRS{name}=="Sony Computer Entertainment Inc BD Remote Control"
   ATTRS{phys}=="00:19:86:00:15:36"
   ATTRS{properties}=="0"
   ATTRS{uniq}=="00:06:f5:97:ab:94"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/bluetooth/hci0/hci0:11/0005:054C:0306.003A':
   KERNELS=="0005:054C:0306.003A"
   SUBSYSTEMS=="hid"
   DRIVERS=="sony"
   ATTRS{country}=="21"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/bluetooth/hci0/hci0:11':
   KERNELS=="hci0:11"
   SUBSYSTEMS=="bluetooth"
   DRIVERS==""

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0/bluetooth/hci0':
   KERNELS=="hci0"
   SUBSYSTEMS=="bluetooth"
   DRIVERS==""

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.0':
   KERNELS=="2-1.1:1.0"
   SUBSYSTEMS=="usb"
   DRIVERS=="btusb"
   ATTRS{authorized}=="1"
   ATTRS{bAlternateSetting}==" 0"
   ATTRS{bInterfaceClass}=="ff"
   ATTRS{bInterfaceNumber}=="00"
   ATTRS{bInterfaceProtocol}=="01"
   ATTRS{bInterfaceSubClass}=="01"
   ATTRS{bNumEndpoints}=="03"
   ATTRS{supports_autosuspend}=="1"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1':
   KERNELS=="2-1.1"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{authorized}=="1"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bDeviceClass}=="ff"
   ATTRS{bDeviceProtocol}=="01"
   ATTRS{bDeviceSubClass}=="01"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{bMaxPower}=="0mA"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{bNumInterfaces}==" 4"
   ATTRS{bcdDevice}=="0112"
   ATTRS{bmAttributes}=="e0"
   ATTRS{busnum}=="2"
   ATTRS{configuration}==""
   ATTRS{devnum}=="22"
   ATTRS{devpath}=="1.1"
   ATTRS{idProduct}=="21e8"
   ATTRS{idVendor}=="0a5c"
   ATTRS{ltm_capable}=="no"
   ATTRS{manufacturer}=="Broadcom Corp"
   ATTRS{maxchild}=="0"
   ATTRS{product}=="BCM20702A0"
   ATTRS{quirks}=="0x0"
   ATTRS{removable}=="removable"
   ATTRS{serial}=="001986001536"
   ATTRS{speed}=="12"
   ATTRS{urbnum}=="434"
   ATTRS{version}==" 2.00"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
   KERNELS=="2-1"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{authorized}=="1"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bDeviceClass}=="09"
   ATTRS{bDeviceProtocol}=="01"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{bMaxPower}=="0mA"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bcdDevice}=="0000"
   ATTRS{bmAttributes}=="e0"
   ATTRS{busnum}=="2"
   ATTRS{configuration}==""
   ATTRS{devnum}=="2"
   ATTRS{devpath}=="1"
   ATTRS{idProduct}=="0024"
   ATTRS{idVendor}=="8087"
   ATTRS{ltm_capable}=="no"
   ATTRS{maxchild}=="6"
   ATTRS{quirks}=="0x0"
   ATTRS{removable}=="fixed"
   ATTRS{speed}=="480"
   ATTRS{urbnum}=="497"
   ATTRS{version}==" 2.00"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2':
   KERNELS=="usb2"
   SUBSYSTEMS=="usb"
   DRIVERS=="usb"
   ATTRS{authorized}=="1"
   ATTRS{authorized_default}=="1"
   ATTRS{avoid_reset_quirk}=="0"
   ATTRS{bConfigurationValue}=="1"
   ATTRS{bDeviceClass}=="09"
   ATTRS{bDeviceProtocol}=="00"
   ATTRS{bDeviceSubClass}=="00"
   ATTRS{bMaxPacketSize0}=="64"
   ATTRS{bMaxPower}=="0mA"
   ATTRS{bNumConfigurations}=="1"
   ATTRS{bNumInterfaces}==" 1"
   ATTRS{bcdDevice}=="0415"
   ATTRS{bmAttributes}=="e0"
   ATTRS{busnum}=="2"
   ATTRS{configuration}==""
   ATTRS{devnum}=="1"
   ATTRS{devpath}=="0"
   ATTRS{idProduct}=="0002"
   ATTRS{idVendor}=="1d6b"
   ATTRS{interface_authorized_default}=="1"
   ATTRS{ltm_capable}=="no"
   ATTRS{manufacturer}=="Linux 4.15.0-20-generic ehci_hcd"
   ATTRS{maxchild}=="2"
   ATTRS{product}=="EHCI Host Controller"
   ATTRS{quirks}=="0x0"
   ATTRS{removable}=="unknown"
   ATTRS{serial}=="0000:00:1d.0"
   ATTRS{speed}=="480"
   ATTRS{urbnum}=="187"
   ATTRS{version}==" 2.00"

 looking at parent device '/devices/pci0000:00/0000:00:1d.0':
   KERNELS=="0000:00:1d.0"
   SUBSYSTEMS=="pci"
   DRIVERS=="ehci-pci"
   ATTRS{broken_parity_status}=="0"
   ATTRS{class}=="0x0c0320"
   ATTRS{companion}==""
   ATTRS{consistent_dma_mask_bits}=="32"
   ATTRS{d3cold_allowed}=="1"
   ATTRS{device}=="0x1e26"
   ATTRS{dma_mask_bits}=="32"
   ATTRS{driver_override}=="(null)"
   ATTRS{enable}=="1"
   ATTRS{irq}=="23"
   ATTRS{local_cpulist}=="0-3"
   ATTRS{local_cpus}=="0f"
   ATTRS{msi_bus}=="1"
   ATTRS{numa_node}=="-1"
   ATTRS{revision}=="0x04"
   ATTRS{subsystem_device}=="0x1854"
   ATTRS{subsystem_vendor}=="0x103c"
   ATTRS{uframe_periodic_max}=="100"
   ATTRS{vendor}=="0x8086"

 looking at parent device '/devices/pci0000:00':
   KERNELS=="pci0000:00"
   SUBSYSTEMS==""
   DRIVERS==""

更新:使用該命令sudo systemctl status udev.service似乎規則正在執行,但沒有執行腳本(.sh)或程序(/usr/bin/qbittorrent)並引用此錯誤。

● systemd-udevd.service - udev Kernel Device Manager
Loaded: loaded (/etc/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
Active: active (running) since Wed 2019-03-06 12:21:22 -03; 8min ago
Docs: man:systemd-udevd.service(8)
     man:udev(7)
Main PID: 399 (systemd-udevd)
Status: "Processing with 16 children at max"
Tasks: 1
CGroup: /system.slice/systemd-udevd.service
       └─399 /lib/systemd/systemd-udevd

mar 06 12:21:25 HP systemd-udevd[1939]: Process '/home/luiz/loop.sh' failed with exit code 1.
mar 06 12:21:26 HP systemd-udevd[2196]: Process '/home/luiz/loop.sh' failed with exit code 1. 
mar 06 12:21:26 HP systemd-udevd[2220]: Process '/home/luiz/loop.sh' failed with exit code 1. 
mar 06 12:21:31 HP systemd-udevd[2504]: Process '/home/luiz/loop.sh' failed with exit code 1.
mar 06 12:25:42 HP systemd-udevd[3225]: Process '/home/luiz/loop.sh' failed with exit code 1. 

我找到的解決方案是/lib/udev/rules.d使用以下格式創建一個 udev 規則:

ACTION=="add", \
   SUBSYSTEM=="input", \
       ATTR{uniq}=="00:06:f5:97:ab:94" \
               RUN+="/bin/systemctl start --no-block ps3bdremote.service

我沒有執行腳本,而是使用命令執行服務/bin/systemctl start --no-block,這就是服務,如果我沒記錯的話,這個解決方案可以在執行長時間執行的腳本時糾正超時問題,但我沒有去測試它。

這是服務/etc/systemd/system/ps3bdremote.service

[Unit]
Description=PS3 BD Remote Script.

[Service]
Type=simple
User=luiz
Environment=XAUTHORITY=/home/luiz/.Xauthority
Environment=DISPLAY=:0
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
ExecStart=/usr/bin/python3 /media/luiz/HD/posinstall/repos/ps3bdremote/ps3bdremote.py -s

[Install]
WantedBy=graphical.target

我認為這部分是可選的,如果有人嘗試類似的東西,我使用它是因為它允許生成桌面通知(使用 KDE),但在其他界面中必須相同。

Environment=XAUTHORITY=/home/luiz/.Xauthority
Environment=DISPLAY=:0
Environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

引用自:https://unix.stackexchange.com/questions/504832