Estoy ejecutando Ubuntu 9.10 (Karmic Koala) en una computadora portátil y me gustaría que NumLock se active automáticamente dependiendo de si mi teclado USB está enchufado (bloqueo numérico activado) o desconectado (bloqueo numérico desactivado).
Para lograr esto, primero instalé el paquete "numlockx". numlockx ony numlockx offfunciona bien
Para conectarme al sistema del dispositivo, pensé que usaría udev. He leído "Escribir reglas de udev" , pero tengo problemas para que la regla de udev funcione.
Primero, aquí hay un ejemplo de la dmesgsalida:
[20906.985102] usb 3-2: nuevo dispositivo USB de baja velocidad usando uhci_hcd y dirección 6 [20907.166403] usb 3-2: configuración # 1 elegida de 1 opción [20907.192904] entrada: Microsoft Natural® Ergonomic Keyboard 4000 como /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/input/input20 [20907.193100] microsoft 0003: 045E: 00DB.000B: input, hidraw1: USB HID v1.11 Keyboard [Microsoft Natural® Ergonomic Keyboard 4000] en usb-0000: 00: 1a.0-2 / input0 [20907.217810] entrada: Microsoft Natural® Ergonomic Keyboard 4000 como /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 [20907.217979] microsoft 0003: 045E: 00DB.000C: input, hidraw2: Dispositivo USB HID v1.11 [Microsoft Natural® Ergonomic Keyboard 4000] en usb-0000: 00: 1a.0-2 / input1
Solía udevadm inforecopilar la información del dispositivo:
> udevadm info -a -p /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
mirando el dispositivo '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21':
KERNEL == "input21"
SUBSISTEMA == "entrada"
CONDUCTOR == ""
ATTR {phys} == "usb-0000: 00: 1a.0-2 / input1"
ATTR {uniq} == ""
ATTR {modalias} == "entrada: 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 "
mirando el dispositivo principal '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1':
KERNELS == "3-2: 1.1"
SUBSISTEMA == "usb"
DRIVERS == "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"
mirando el dispositivo principal '/devices/pci0000:00/0000:00:1a.0/usb3/3-2':
KERNELS == "3-2"
SUBSISTEMA == "usb"
DRIVERS == "usb"
ATTRS {configuration} == ""
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 {versión} == "2.00"
ATTRS {maxchild} == "0"
ATTRS {quirks} == "0x0"
ATTRS {autorizado} == "1"
ATTRS {fabricante} == "Microsoft"
mirando el dispositivo principal '/devices/pci0000:00/0000:00:1a.0/usb3':
KERNELS == "usb3"
SUBSISTEMA == "usb"
DRIVERS == "usb"
ATTRS {configuration} == ""
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 {versión} == "1.10"
ATTRS {maxchild} == "2"
ATTRS {quirks} == "0x0"
ATTRS {autorizado} == "1"
ATTRS {manufacturer} == "Linux 2.6.31-16-generic uhci_hcd"
ATTRS {product} == "Controlador de host UHCI"
ATTRS {serial} == "0000: 00: 1a.0"
ATTRS {Authorized_default} == "1"
mirando el dispositivo principal '/devices/pci0000:00/0000:00:1a.0':
KERNELS == "0000: 00: 1a.0"
SUBSISTEMA == "pci"
DRIVERS == "uhci_hcd"
ATTRS {proveedor} == "0x8086"
ATTRS {dispositivo} == "0x2937"
ATTRS {subsystem_vendor} == "0x1558"
ATTRS {subsystem_device} == "0x0860"
ATTRS {class} == "0x0c0300"
ATTRS {irq} == "16"
ATTRS {local_cpus} == "ff"
ATTRS {local_cpulist} == "0-7"
ATTRS {modalias} == "pci: v00008086d00002937sv00001558sd00000860bc0Csc03i00"
ATTRS {broken_parity_status} == "0"
ATTRS {msi_bus} == ""
mirando el dispositivo principal '/ devices / pci0000: 00':
KERNELS == "pci0000: 00"
SUBSISTEMA == ""
CONDUCTORES == ""
Entonces creé un archivo llamado /etc/udev/rules.d/usb-keyboard.rules:
# Active NumLock cuando el teclado esté enchufado.
ACTION == "add", ATTRS {manufacturer} == "Microsoft", SUBSYSTEM == "input", RUN + = "/ usr / bin / numlockx on"
# Apague NumLock cuando el teclado esté desconectado.
ACTION == "remove", ATTRS {manufacturer} == "Microsoft", SUBSYSTEM == "input", RUN + = "/ usr / bin / numlockx off"
Solía udevadm testverificar que las reglas son correctas:
> prueba de udevadm --acción = agregar /dispositivos/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
run_command: llamando: prueba
udevadm_test: versión 147
[...]
archivo_parse: lectura '/etc/udev/rules.d/usb-keyboard.rules' como archivo de reglas
udev_rules_new: las reglas usan tokens de 180864 bytes (15072 * 12 bytes), búfer de 31614 bytes
udev_rules_new: índice temporal utilizado 49760 bytes (2488 * 20 bytes)
udev_device_new_from_syspath: el dispositivo 0x28d7d80 tiene 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.rules:5
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: el dispositivo 0x28d8560 tiene devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1'
udev_device_new_from_syspath: el dispositivo 0x28d8708 tiene devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2'
udev_rules_apply_to_event: RUN '/ usr / bin / numlockx en' /etc/udev/rules.d/usb-keyboard.rules:7
udevadm_test: UDEV_LOG = 6
udevadm_test: DEVPATH = / devices / 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® Ergonomic Keyboard 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 = input: 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 = agregar
udevadm_test: SUBSYSTEM = input
udevadm_test: run: '/ sbin / modprobe -b input: 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: ejecutar: 'socket: @ / org / freedesktop / hal / udev_event'
udevadm_test: run: '/ usr / bin / numlockx on'
Y aquí está la prueba de "eliminar":
> prueba udevadm --acción = eliminar /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 run_command: llamando: prueba udevadm_test: versión 147 [...] archivo_parse: lectura '/etc/udev/rules.d/usb-keyboard.rules' como archivo de reglas udev_rules_new: las reglas usan tokens de 180864 bytes (15072 * 12 bytes), búfer de 31614 bytes udev_rules_new: índice temporal utilizado 49760 bytes (2488 * 20 bytes) udev_device_new_from_syspath: el dispositivo 0xd2fd80 tiene 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: el dispositivo 0xd2fff8 tiene devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1' udev_device_new_from_syspath: el dispositivo 0xd30690 tiene 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 = / devices / 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® Ergonomic Keyboard 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 = input: 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 = eliminar udevadm_test: SUBSYSTEM = input udevadm_test: ejecutar: 'socket: @ / org / freedesktop / hal / udev_event' udevadm_test: run: '/ usr / bin / numlockx off'
El problema es que cuando el teclado está enchufado o desenchufado, el estado de NumLock no cambia. He intentado reiniciar el servicio udev, sin suerte. ¿Están equivocadas mis reglas de udev? ¿Voy por esto de la manera incorrecta?