Правило клавиатуры Debian 9 udev не работает

669
user3728501

Каждый раз, когда я блокирую экран / удаляю клавиатуру и снова подключаю ее (usb), скорость повторения клавиатуры сбрасывается. Я пытаюсь это исправить, создав правило udev.

Я создал правило в /etc/udev/rules.dназывается 21_persistent-local.rulesон содержит:

ACTION=="add", SUBSYSTEM=="usb", ATTRS=="413c", ATTRS=="2106", RUN+="/home/user/keyboard-connect-test-script.sh" 

keyboard-connect-test-script.sh содержит:

echo "keyboard connected" >> /home/user/keyboard.log 

Я применил chmod +xк этому сценарию, и файл keyboard.logсуществует.

Я запустил sudo udevadm control --reload-rulesи нет никаких очевидных ошибок, в udevadm test --action=add /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:413C:2106.001C/input/input40которых выдает:

calling: test version 235 This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run.  === trie on-disk === tool version: 235 file size: 9212225 bytes header size 80 bytes strings 1931297 bytes nodes 7280848 bytes Load module index Failed to read $container of PID 1, ignoring: Permission denied Found container virtualization none. timestamp of '/etc/systemd/network' changed timestamp of '/lib/systemd/network' changed Ignoring /lib/systemd/network/80-container-ve.network, because it's not a regular file with suffix .link. Ignoring /lib/systemd/network/80-container-vz.network, because it's not a regular file with suffix .link. Ignoring /lib/systemd/network/80-container-host0.network, because it's not a regular file with suffix .link. Parsed configuration file /lib/systemd/network/99-default.link Created link configuration context. timestamp of '/etc/udev/rules.d' changed Reading rules file: /etc/udev/rules.d/21_persistent-local.rules Reading rules file: /lib/udev/rules.d/39-usbmuxd.rules Reading rules file: /lib/udev/rules.d/40-usb-media-players.rules Reading rules file: /lib/udev/rules.d/40-usb_modeswitch.rules Reading rules file: /lib/udev/rules.d/50-firmware.rules Reading rules file: /lib/udev/rules.d/50-udev-default.rules Reading rules file: /lib/udev/rules.d/55-dm.rules Reading rules file: /lib/udev/rules.d/56-hpmud.rules Reading rules file: /lib/udev/rules.d/60-block.rules Reading rules file: /lib/udev/rules.d/60-cdrom_id.rules Reading rules file: /lib/udev/rules.d/60-crda.rules Reading rules file: /lib/udev/rules.d/60-drm.rules Reading rules file: /lib/udev/rules.d/60-evdev.rules Reading rules file: /lib/udev/rules.d/60-fuse.rules Reading rules file: /lib/udev/rules.d/60-input-id.rules Reading rules file: /lib/udev/rules.d/60-libgphoto2-6.rules Reading rules file: /lib/udev/rules.d/60-libsane.rules Reading rules file: /lib/udev/rules.d/60-persistent-alsa.rules Reading rules file: /lib/udev/rules.d/60-persistent-input.rules Reading rules file: /lib/udev/rules.d/60-persistent-storage-dm.rules Reading rules file: /lib/udev/rules.d/60-persistent-storage-tape.rules Reading rules file: /lib/udev/rules.d/60-persistent-storage.rules Reading rules file: /lib/udev/rules.d/60-persistent-v4l.rules Reading rules file: /lib/udev/rules.d/60-sensor.rules Reading rules file: /lib/udev/rules.d/60-serial.rules Reading rules file: /lib/udev/rules.d/64-btrfs.rules Reading rules file: /lib/udev/rules.d/64-xorg-xkb.rules Reading rules file: /lib/udev/rules.d/65-libwacom.rules Reading rules file: /lib/udev/rules.d/69-cd-sensors.rules Reading rules file: /lib/udev/rules.d/69-libmtp.rules Reading rules file: /lib/udev/rules.d/69-wacom.rules Reading rules file: /lib/udev/rules.d/70-debian-uaccess.rules Reading rules file: /lib/udev/rules.d/70-joystick.rules Reading rules file: /lib/udev/rules.d/70-mouse.rules Reading rules file: /lib/udev/rules.d/70-power-switch.rules Reading rules file: /lib/udev/rules.d/70-printers.rules Reading rules file: /lib/udev/rules.d/70-touchpad.rules Reading rules file: /lib/udev/rules.d/70-uaccess.rules Reading rules file: /lib/udev/rules.d/71-seat.rules Reading rules file: /lib/udev/rules.d/73-seat-late.rules Reading rules file: /lib/udev/rules.d/73-special-net-names.rules Reading rules file: /lib/udev/rules.d/73-usb-net-by-mac.rules Reading rules file: /lib/udev/rules.d/75-net-description.rules Reading rules file: /lib/udev/rules.d/75-probe_mtd.rules Reading rules file: /lib/udev/rules.d/77-mm-cinterion-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-dell-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-ericsson-mbm.rules Reading rules file: /lib/udev/rules.d/77-mm-haier-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-huawei-net-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-longcheer-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-mtk-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-nokia-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-pcmcia-device-blacklist.rules Reading rules file: /lib/udev/rules.d/77-mm-platform-serial-whitelist.rules Reading rules file: /lib/udev/rules.d/77-mm-qdl-device-blacklist.rules Reading rules file: /lib/udev/rules.d/77-mm-simtech-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-telit-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-usb-device-blacklist.rules Reading rules file: /lib/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules Reading rules file: /lib/udev/rules.d/77-mm-x22x-port-types.rules Reading rules file: /lib/udev/rules.d/77-mm-zte-port-types.rules Reading rules file: /lib/udev/rules.d/78-sound-card.rules Reading rules file: /lib/udev/rules.d/80-debian-compat.rules Reading rules file: /lib/udev/rules.d/80-drivers.rules Reading rules file: /lib/udev/rules.d/80-ifupdown.rules Reading rules file: /lib/udev/rules.d/80-libinput-device-groups.rules Reading rules file: /lib/udev/rules.d/80-mm-candidate.rules Reading rules file: /lib/udev/rules.d/80-net-setup-link.rules Reading rules file: /lib/udev/rules.d/80-udisks2.rules Reading rules file: /lib/udev/rules.d/84-nm-drivers.rules Reading rules file: /lib/udev/rules.d/85-hdparm.rules Reading rules file: /lib/udev/rules.d/85-hplj10xx.rules Reading rules file: /lib/udev/rules.d/85-hwclock.rules Reading rules file: /lib/udev/rules.d/85-nm-unmanaged.rules Reading rules file: /lib/udev/rules.d/85-regulatory.rules Reading rules file: /lib/udev/rules.d/90-alsa-restore.rules Reading rules file: /lib/udev/rules.d/90-console-setup.rules Reading rules file: /lib/udev/rules.d/90-libgpod.rules Reading rules file: /lib/udev/rules.d/90-libinput-model-quirks.rules Reading rules file: /lib/udev/rules.d/90-pulseaudio.rules Reading rules file: /lib/udev/rules.d/95-cd-devices.rules Reading rules file: /lib/udev/rules.d/95-dm-notify.rules Reading rules file: /lib/udev/rules.d/95-upower-csr.rules Reading rules file: /lib/udev/rules.d/95-upower-hid.rules Reading rules file: /lib/udev/rules.d/95-upower-wup.rules Reading rules file: /lib/udev/rules.d/99-systemd.rules rules contain 393216 bytes tokens (32768 * 12 bytes), 36236 bytes strings 28450 strings (232117 bytes), 24709 de-duplicated (199623 bytes), 3742 trie nodes used IMPORT builtin 'hwdb' /lib/udev/rules.d/50-udev-default.rules:14 IMPORT builtin 'hwdb' returned non-zero IMPORT builtin 'input_id' /lib/udev/rules.d/60-input-id.rules:5 capabilities/ev raw kernel attribute: 120013 capabilities/abs raw kernel attribute: 0 capabilities/rel raw kernel attribute: 0 capabilities/key raw kernel attribute: 1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe properties raw kernel attribute: 0 test_key: checking bit block 0 for any keys; found=1 test_key: checking bit block 64 for any keys; found=1 test_key: checking bit block 128 for any keys; found=1 test_key: checking bit block 192 for any keys; found=1 IMPORT builtin 'usb_id' /lib/udev/rules.d/60-persistent-input.rules:11 /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0: if_class 3 protocol 0 IMPORT builtin 'path_id' /lib/udev/rules.d/60-persistent-input.rules:35 RUN 'kmod load $env' /lib/udev/rules.d/80-drivers.rules:5 .INPUT_CLASS=kbd .MM_USBIFNUM=00 ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/0003:413C:2106.001E/input/input42 EV=120013 ID_BUS=usb ID_FOR_SEAT=input-pci-0000_00_1a_0-usb-0_1_4_1_0 ID_INPUT=1 ID_INPUT_KEY=1 ID_INPUT_KEYBOARD=1 ID_MODEL=Dell_QuietKey_Keyboard ID_MODEL_ENC=Dell\x20QuietKey\x20Keyboard ID_MODEL_ID=2106 ID_PATH=pci-0000:00:1a.0-usb-0:1.4:1.0 ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_4_1_0 ID_REVISION=0101 ID_SERIAL=DELL_Dell_QuietKey_Keyboard ID_TYPE=hid ID_USB_DRIVER=usbhid ID_USB_INTERFACES=:030101: ID_USB_INTERFACE_NUM=00 ID_VENDOR=DELL ID_VENDOR_ENC=DELL ID_VENDOR_ID=413c KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe LED=7 MODALIAS=input:b0003v413Cp2106e0110-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8C,8E,96,98,9E,9F,A1,A3,A4,A5,A6,AD,B0,B1,B2,B3,B4,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw MSC=10 NAME="DELL Dell QuietKey Keyboard" PHYS="usb-0000:00:1a.0-1.4/input0" PRODUCT=3/413c/2106/110 PROP=0 SUBSYSTEM=input TAGS=:seat: UNIQ="" USEC_INITIALIZED=422868148985 run: 'kmod load input:b0003v413Cp2106e0110-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,8C,8E,96,98,9E,9F,A1,A3,A4,A5,A6,AD,B0,B1,B2,B3,B4,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,sfw' Unload module index Unloaded link configuration context. 

Я получил idVendorи idProductкоды от lsusb -v, соответствующий раздел которого:

Bus 001 Device 024: ID 413c:2106 Dell Computer Corp. Dell QuietKey Keyboard Couldn't open device, some information will be missing Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0  bDeviceProtocol 0  bMaxPacketSize0 8 idVendor 0x413c Dell Computer Corp. idProduct 0x2106 Dell QuietKey Keyboard bcdDevice 1.01 iManufacturer 1  iProduct 2  iSerial 0  bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0  bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0  HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.10 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 65 Report Descriptors:  ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 

Однако я несколько раз отключал и снова подключал клавиатуру, и keyboard.logфайл все еще пуст.

0

1 ответ на вопрос

2
user3728501

Проблема заключалась в том, что в скрипте bash отсутствовал шебанг.

keyboard-connect-test-script.sh Изменился на:

#!/bin/bash echo "keyboard connected" >> /home/user/keyboard.log 

Теперь это работает, но повторяется keyboard connectedдважды для каждого события отключения / подключения. Зачем?

Хорошо, что ты ответил на свой вопрос. Но это последнее "почему?" должен быть отдельный вопрос. В качестве альтернативы (если нет других ответов на исходный вопрос), вы можете удалить этот ответ и перефразировать (отредактировать) вопрос, поэтому он спросит «почему дважды?» без упоминания оригинальной проблемы. Kamil Maciorowski 6 лет назад 1
@KamilMaciorowski Это на самом деле не имеет значения, но было бы приятно узнать. user3728501 6 лет назад 0
Вероятно, есть два события ядра, которые соответствуют вашим критериям. Используйте `udevadm monitor --udev --property`, чтобы увидеть, какие события вы получаете при подключении клавиатуры. dirkt 6 лет назад 0