Почему мое правило удева не работает

Я проверил форум и Google, но я не нашел ответа. Я пытаюсь добавить правило udev, чтобы отключить тачпад, когда мышь подключена. Сначала я написал общее правило, чтобы проверить его работу, но не. Это правило:

ACTION=="add", SUBSYSTEM=="input", RUN+="/usr/local/bin/touchpadtoggle.sh"
ACTION=="remove", SUBSYSTEM=="input", RUN+="/usr/local/bin/touchpadtoggle.sh"

это правило помещается в /etc/udev/rules.d/00-touchpad.rules

, и это тестовый сценарий bash:

#!/bin/bash
notify-send "Test"

Bash скрипт работает хорошо. Если я набираю «/usr/local/bin/touchpadtoggle.sh» в командной строке, отображается уведомление.

1
задан 8 September 2016 в 12:36

1 ответ

Правила yr udev могут либо (i) отставать от идентификации мыши yr как устройства USB, либо (ii) включать какое-то уведомление on-display (stdout), которое не понимается минимальной средой udev, в которой yr действуют. (Например, по умолчанию они не знают, что существует отображение y.)

Чтобы развеять последнее сомнение, пожалуйста, покажите содержимое /usr/local/bin/touchpadtoggle.sh).

Для прежний открытый терминал и его фокусные окна, отключите мышь и сделайте следующее в терминале:

 $ lsusb
 $ udevadm monitor --property

Затем подключите курсор мыши и сразу же после этого выйдите из CMD в терминале с помощью клавиши CTRL-C. Делайте это быстро, не касаясь самой мыши. Это не вредно, но беспорядочно, и вы получите много результатов на экране yr, если вы не будете делать что-то правильно. Вы узнаете следующие результаты (здесь для моей собственной мыши):

 $ lsusb
 Bus 002 Device 004: ID 192f:0916 Avago Technologies, Pte.

Моя мышь находится на шине 002. Ниже следует идентификатор поставщика, 192f и идентификатор модели, 0916. Когда доступны и известные, идентификаторы продуктов и поставщиков - это два атрибута, которые могут использоваться для однозначного определения конкретного устройства в правиле udev. Я бы одобрил их по сравнению с чрезмерно простым тестом SUBSYSTEM=="input", который, как я считаю, не различает устройства. Подтвердите и уточните это с помощью вывода второго cmd:

$ udevadm monitor --property
[.......]
UDEV  [25696.403834] add      /devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22/event4 (input)
ACTION=add
DEVLINKS=/dev/input/by-id/usb-192f_USB_Optical_Mouse-event-mouse /dev/input/by-path/pci-0000:00:1d.7-usb-0:3.4:1.0-event-mouse
DEVNAME=/dev/input/event4
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22/event4
ID_BUS=usb
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_MODEL=USB_Optical_Mouse
ID_MODEL_ENC=USB\x20Optical\x20Mouse
ID_MODEL_ID=0916
ID_PATH=pci-0000:00:1d.7-usb-0:3.4:1.0
ID_PATH_TAG=pci-0000_00_1d_7-usb-0_3_4_1_0
ID_REVISION=0200
ID_SERIAL=192f_USB_Optical_Mouse
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=192f
ID_VENDOR_ENC=192f
ID_VENDOR_ID=192f
MAJOR=13
MINOR=68
SEQNUM=2567
SUBSYSTEM=input
USEC_INITIALIZED=5875811

UDEV  [25696.407470] add      /devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22/mouse0 (input)
ACTION=add
DEVLINKS=/dev/input/by-id/usb-192f_USB_Optical_Mouse-mouse /dev/input/by-path/pci-0000:00:1d.7-usb-0:3.4:1.0-mouse
DEVNAME=/dev/input/mouse0
       *^^^ that's my device name ! ^^^*
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22/mouse0  
*^^^ that's my device path ! ^^^*
ID_BUS=usb
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_MODEL=USB_Optical_Mouse
ID_MODEL_ENC=USB\x20Optical\x20Mouse
ID_MODEL_ID=0916
^^^^^^^^^^^^^^^^
ID_PATH=pci-0000:00:1d.7-usb-0:3.4:1.0
ID_PATH_TAG=pci-0000_00_1d_7-usb-0_3_4_1_0
ID_REVISION=0200
ID_SERIAL=192f_USB_Optical_Mouse
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=192f
ID_VENDOR_ENC=192f
ID_VENDOR_ID=192f
^^^^^^^^^^^^^^^^^
MAJOR=13
MINOR=32
SEQNUM=2566
SUBSYSTEM=input
USEC_INITIALIZED=5875565

[Я остановил мониторинг здесь с помощью CTRL-C]

. Выше вы знаете, что ядро ​​распознает мой ввод устройства как /dev/input/event4 или /dev/input/mouse0. Обратите внимание, что вы снова найдете подтверждение: ID_MODEL_ID=0916 и ID_VENDOR_ID=192f. При этом я могу написать правило udev, которое должно распознать конкретное устройство. Просто добавление ID_MODEL_ID=="0916",ID_VENDOR_ID=="192f" в SUBSYSTEM=="input" в правилах udev выше должно быть достаточным для лечения.

Существует другой способ сделать это, что я предпочитаю. Поскольку я знаю свое имя устройства (сверху), в терминале я делаю:

$ udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse0)
                                                         ^^^^^^^
                                                   may be different for you
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.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22/mouse0':
    KERNEL=="mouse0"
    SUBSYSTEM=="input"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003/input/input22':
    KERNELS=="input22"
    SUBSYSTEMS=="input"
    DRIVERS==""
    ATTRS{name}=="USB Optical Mouse"
    ATTRS{phys}=="usb-0000:00:1d.7-3.4/input0"
    ATTRS{uniq}==""
    ATTRS{properties}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4/2-3.4:1.0/0003:192F:0916.0003':
    KERNELS=="0003:192F:0916.0003"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-generic"

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

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3.4':
    KERNELS=="2-3.4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{devpath}=="3.4"
    ATTRS{idVendor}=="192f"
    ATTRS{speed}=="1.5"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="8"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="98mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="a0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="0200"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="62095"
    ATTRS{ltm_capable}=="no"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="0916"
    ATTRS{bDeviceClass}=="00"
    ATTRS{product}=="USB Optical Mouse"

Итак, если я не хочу отображать что-либо на экране, правило udev становится: [!d11 ]

ACTION=="add",SUBSYSTEMS=="usb",ATTRS{idVendor}=="192f",ATTRS{idProduct}=="0916",RUN+="/usr/local/bin/touchpadtoggle.sh"

[Я остановил мониторинг здесь с помощью CTRL-C] HTH. Обратная связь приветствуется.

0
ответ дан 23 May 2018 в 06:21

Другие вопросы по тегам:

Похожие вопросы: