Я запускаю Ubuntu 9.10 (Karmic Koala) на ноутбуці і хотів би, щоб NumLock автоматично перемикався залежно від того, підключена моя клавіатура USB (включена numlock) чи відключена (numlock вимкнено).
Для цього я спочатку встановив пакет "numlockx". numlockx onі numlockx offпрацює чудово.
Щоб підключитися до системи пристроїв, я думав, що буду використовувати udev. Я читав "Написання правил udev" , але у мене виникають проблеми з тим, щоб правило udev працювало.
По-перше, ось приклад dmesgрезультату:
[20906.985102] usb 3-2: новий низькошвидкісний USB-пристрій за допомогою uhci_hcd та адреси 6 [20907.166403] usb 3-2: конфігурація №1 вибрана з 1 вибору [20907.192904] вхід: Microsoft Natural® Ергономічна клавіатура 4000 як /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/input/input20 [20907.193100] microsoft 0003: 045E: 00DB.000B: вхід, hidraw1: клавіатура USB HID v1.11 [Microsoft Natural® Ergonomic Keyboard 4000] на usb-0000: 00: 1a.0-2 / input0 [20907.217810] вхід: Microsoft Natural® Ергономічна клавіатура 4000 як /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 [20907.217979] microsoft 0003: 045E: 00DB.000C: вхід, hidraw2: Пристрій USB HID v1.11 [Ергономічна клавіатура Microsoft Natural®] на usb-0000: 00: 1a.0-2 / input1
Я udevadm infoзбирав інформацію про пристрій:
> udevadm info -a -p /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
дивлячись на пристрій '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21':
KERNEL == "input21"
SUBSYSTEM == "вхід"
Драйвер == ""
ATTR {phys} == "usb-0000: 00: 1a.0-2 / input1"
ATTR {uniq} == ""
ATTR {modalias} == "вхід: b0003v045Ep00DBe0111-e0,1,2,3,4,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, 8B, 8C, 8E, 90,96,98,9B, 9C, 9E, 9F, A1, A3, A4, A5, A6 , A7, A8, A9, AB, AC, AD, AE, B0, B1, B2, B3, B4, B5, B6, B8, B9, BA, BB, BC, BD, BE, BF, C0, C1, C2 , CE, CF, D0, D1, D2, D5, D9, DB, DF, E2, E7, E8, E9, EA, EB, F0,100,162,166,16A, 16E, 178,179,17A, 17B, 17C, 17D, 17F , 180,181,182,185,18C, 18D, 192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA, 1AB, 1AC, 1AD, 1AE, 1B0,1B1,1B7, r6, a20, m4 , lsfw "
дивлячись на батьківський пристрій '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1':
КЕРНЕЛЬ == "3-2: 1,1"
SUBSYSTEMS == "usb"
Драйвери == "usbhid"
ATTRS {bInterfaceNumber} == "01"
ATTRS {bAlternateSetting} == "0"
ATTRS {bNumEndpoints} == "01"
ATTRS {bInterfaceClass} == "03"
ATTRS {bInterfaceSubClass} == "00"
ATTRS {bInterfaceProtocol} == "00"
ATTRS {modalias} == "usb: v045Ep00DBd0173dc00dsc00dp00ic03isc00ip00"
ATTRS {supports_autosuspend} == "1"
дивлячись на батьківський пристрій '/devices/pci0000:00/0000:00:1a.0/usb3/3-2':
KERNELS == "3-2"
SUBSYSTEMS == "usb"
Драйвери == "usb"
ATTRS {конфігурація} == ""
ATTRS {bNumInterfaces} == "2"
ATTRS {bConfigurationValue} == "1"
ATTRS {bmAttributes} == "a0"
ATTRS {bMaxPower} == "100mA"
ATTRS {urbnum} == "532"
ATTRS {idVendor} == "045e"
ATTRS {idProduct} == "00db"
ATTRS {bcdDevice} == "0173"
ATTRS {bDeviceClass} == "00"
ATTRS {bDeviceSubClass} == "00"
ATTRS {bDeviceProtocol} == "00"
ATTRS {bNumConfigurations} == "1"
ATTRS {bMaxPacketSize0} == "8"
ATTRS {speed} == "1,5"
ATTRS {busnum} == "3"
ATTRS {devnum} == "6"
ATTRS {версія} == "2,00"
ATTRS {maxchild} == "0"
ATTRS {quirks} == "0x0"
ATTRS {дозволено} == "1"
ATTRS {виробник} == "Microsoft"
дивлячись на батьківський пристрій '/devices/pci0000:00/0000:00:1a.0/usb3':
KERNELS == "usb3"
SUBSYSTEMS == "usb"
Драйвери == "usb"
ATTRS {конфігурація} == ""
ATTRS {bNumInterfaces} == "1"
ATTRS {bConfigurationValue} == "1"
ATTRS {bmAttributes} == "e0"
ATTRS {bMaxPower} == "0mA"
ATTRS {urbnum} == "127"
ATTRS {idVendor} == "1d6b"
ATTRS {idProduct} == "0001"
ATTRS {bcdDevice} == "0206"
ATTRS {bDeviceClass} == "09"
ATTRS {bDeviceSubClass} == "00"
ATTRS {bDeviceProtocol} == "00"
ATTRS {bNumConfigurations} == "1"
ATTRS {bMaxPacketSize0} == "64"
ATTRS {speed} == "12"
ATTRS {busnum} == "3"
ATTRS {devnum} == "1"
ATTRS {версія} == "1,10"
ATTRS {maxchild} == "2"
ATTRS {quirks} == "0x0"
ATTRS {дозволено} == "1"
ATTRS {виробник} == "Linux 2.6.31-16-generic uhci_hcd"
ATTRS {product} == "Хост-контролер UHCI"
ATTRS {serial} == "0000: 00: 1a.0"
ATTRS {санкціонований_за умовчанням} == "1"
дивлячись на батьківський пристрій '/devices/pci0000:00/0000:00:1a.0':
KERNELS == "0000: 00: 1a.0"
SUBSYSTEMS == "pci"
Драйвери == "uhci_hcd"
ATTRS {постачальник} == "0x8086"
ATTRS {пристрій} == "0x2937"
ATTRS {subystem_vendor} == "0x1558"
ATTRS {subystem_device} == "0x0860"
ATTRS {class} == "0x0c0300"
ATTRS {irq} == "16"
ATTRS {local_cpus} == "ff"
ATTRS {local_cpulist} == "0-7"
ATTRS {modalias} == "pci: v00008086d00002937sv00001558sd00000860bc0Csc03i00"
ATTRS {break_parity_status} == "0"
ATTRS {msi_bus} == ""
дивлячись на батьківський пристрій '/ пристрої / pci0000: 00':
KERNELS == "pci0000: 00"
ПІДСУМКИ == ""
Драйвери == ""
Тому я створив файл під назвою /etc/udev/rules.d/usb-keyboard.rules:
# Увімкніть NumLock, коли підключена клавіатура.
ACTION == "додати", ATTRS {виробник} == "Microsoft", SUBSYSTEM == "введення", RUN + = "/ usr / bin / numlockx on"
# Вимкніть NumLock, коли клавіатура відключена.
ACTION == "видалити", ATTRS {виробник} == "Microsoft", SUBSYSTEM == "введення", RUN + = "/ usr / bin / numlockx вимкнено"
Я udevadm testперевіряв правильність правил:
> udevadm test --action = add /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
run_command: call: test
udevadm_test: версія 147
[...]
parse_file: читання '/etc/udev/rules.d/usb-keyboard.rules' як файл правил
udev_rules_new: правила використовують токени 180864 байт (15072 * 12 байт), буфер 31614 байт
udev_rules_new: тимчасовий індекс використано 49760 байт (2488 * 20 байт)
udev_device_new_from_syspath: пристрій 0x28d7d80 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21'
udev_rules_apply_to_event: RUN '/ sbin / modprobe -b $ env {MODALIAS}' /lib/udev/rules.d/80-drivers.ruleswhat
udev_rules_apply_to_event: RUN 'socket: @ / org / freedesktop / hal / udev_event' /lib/udev/rules.d/90-hal.rules:2
udev_device_new_from_syspath: пристрій 0x28d8560 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1'
udev_device_new_from_syspath: пристрій 0x28d8708 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2'
udev_rules_apply_to_event: RUN '/ usr / bin / numlockx on' /etc/udev/rules.d/usb-keyboard.rules:7
udevadm_test: UDEV_LOG = 6
udevadm_test: DEVPATH = / пристрої / pci0000: 00/0000: 00: 1a.0 / usb3 / 3-2 / 3-2: 1.1 / input / input21
udevadm_test: PRODUCT = 3 / 45e / db / 111
udevadm_test: NAME = "Ергономічна клавіатура Microsoft Natural® 4000"
udevadm_test: PHYS = "usb-0000: 00: 1a.0-2 / input1"
udevadm_test: UNIQ = ""
udevadm_test: EV == 10001f
udevadm_test: KEY == 837fff 2c3027 bf004444 0 0 1 10f84 8a27c007 ff7f7bfa d9415fff febeffdf ffefffff ffffffff fffffffe
udevadm_test: REL == 40
udevadm_test: ABS == 1 0
udevadm_test: MSC == 10
udevadm_test: MODALIAS = вхід: b0003v045Ep00DBe0111-e0,1,2,3,4,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, 8B, 8C, 8E, 90,96,98,9B, 9C, 9E, 9F, A1, A3, A4, A5, A6, A7, A8, A9, AB, AC, AD, AE, B0, B1, B2, B3, B4, B5, B6, B8, B9, BA, BB, BC, BD, BE, BF, C0, C1, C2, CE, CF, D0, D1, D2, D5, D9, DB, DF, E2, E7, E8, E9, EA, EB, F0,100,162,166,16A, 16E, 178,179,17A, 17B, 17C, 17D, 17F, 180,181,182,185, 18C, 18D, 192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA, 1AB, 1AC, 1AD, 1AE, 1B0,1B1,1B7, r6, a20, m4, lsfw
udevadm_test: ACTION = додати
udevadm_test: SUBSYSTEM = введення
udevadm_test: run: '/ sbin / modprobe -b вхід: b0003v045Ep00DBe0111-e0,1,2,3,4,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, 8B, 8C, 8E, 90,96,98,9B, 9C, 9E, 9F, A1, A3, A4 , A5, A6, A7, A8, A9, AB, AC, AD, AE, B0, B1, B2, B3, B4, B5, B6, B8, B9, BA, BB, BC, BD, BE, BF, C0 , C1, C2, CE, CF, D0, D1, D2, D5, D9, DB, DF, E2, E7, E8, E9, EA, EB, F0,100,162,166,16A, 16E, 178,179,17A, 17B, 17C , 17D, 17F, 180,181,182,185,18C, 18D, 192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA, 1AB, 1AC, 1AD, 1AE, 1B0,1B1,1B7, r6 , a20, m4, lsfw '
udevadm_test: run: 'socket: @ / org / freedesktop / hal / udev_event'
udevadm_test: run: '/ usr / bin / numlockx on'
І ось тест "видалити":
> udevadm test --action = delete /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 run_command: call: test udevadm_test: версія 147 [...] parse_file: читання '/etc/udev/rules.d/usb-keyboard.rules' як файл правил udev_rules_new: правила використовують токени 180864 байт (15072 * 12 байт), буфер 31614 байт udev_rules_new: тимчасовий індекс використано 49760 байт (2488 * 20 байт) udev_device_new_from_syspath: пристрій 0xd2fd80 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21' udev_rules_apply_to_event: RUN 'socket: @ / org / freedesktop / hal / udev_event' /lib/udev/rules.d/90-hal.rules:2 udev_device_new_from_syspath: пристрій 0xd2fff8 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1' udev_device_new_from_syspath: пристрій 0xd30690 має devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2' udev_rules_apply_to_event: RUN '/ usr / bin / numlockx off' /etc/udev/rules.d/usb-keyboard.rules:10 udevadm_test: UDEV_LOG = 6 udevadm_test: DEVPATH = / пристрої / pci0000: 00/0000: 00: 1a.0 / usb3 / 3-2 / 3-2: 1.1 / input / input21 udevadm_test: PRODUCT = 3 / 45e / db / 111 udevadm_test: NAME = "Ергономічна клавіатура Microsoft Natural® 4000" udevadm_test: PHYS = "usb-0000: 00: 1a.0-2 / input1" udevadm_test: UNIQ = "" udevadm_test: EV == 10001f udevadm_test: KEY == 837fff 2c3027 bf004444 0 0 1 10f84 8a27c007 ff7f7bfa d9415fff febeffdf ffefffff ffffffff fffffffe udevadm_test: REL == 40 udevadm_test: ABS == 1 0 udevadm_test: MSC == 10 udevadm_test: MODALIAS = вхід: b0003v045Ep00DBe0111-e0,1,2,3,4,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, 8B, 8C, 8E, 90,96,98,9B, 9C, 9E, 9F, A1, A3, A4, A5, A6, A7, A8, A9, AB, AC, AD, AE, B0, B1, B2, B3, B4, B5, B6, B8, B9, BA, BB, BC, BD, BE, BF, C0, C1, C2, CE, CF, D0, D1, D2, D5, D9, DB, DF, E2, E7, E8, E9, EA, EB, F0,100,162,166,16A, 16E, 178,179,17A, 17B, 17C, 17D, 17F, 180,181,182,185, 18C, 18D, 192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA, 1AB, 1AC, 1AD, 1AE, 1B0,1B1,1B7, r6, a20, m4, lsfw udevadm_test: ACTION = видалити udevadm_test: SUBSYSTEM = введення udevadm_test: run: 'socket: @ / org / freedesktop / hal / udev_event' udevadm_test: run: '/ usr / bin / numlockx off'
Проблема полягає в тому, що коли клавіатура підключена або відключена, стан NumLock не змінюється. Я спробував перезапустити службу udev, не пощастивши. Чи неправильні мої правила udev? Я йду про це неправильно?