我正在笔记本电脑上运行Ubuntu 9.10(Karmic Koala),并希望NumLock根据我的USB键盘是插入(数字锁定打开)还是拔出(数字锁定关闭)自动切换。
为此,我首先安装了“ numlockx”软件包。numlockx on
并且numlockx off
工作正常。
为了连接到设备系统,我想我会使用udev。我已经阅读了“编写udev规则”,但是我无法让udev规则正常工作。
首先,这是dmesg
输出示例:
[20906.985102] USB 3-2:使用uhci_hcd和地址6的新低速USB设备 [20907.166403] USB 3-2:从1个选项中选择了配置#1 [20907.192904]输入:MicrosoftNatural®人体工学键盘4000作为/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-0000:00:1a.0-2 / input0上的USB HID v1.11键盘[MicrosoftNatural®Ergonomic Keyboard 4000] [20907.217810]输入:MicrosoftNatural®人体工学键盘4000为/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:usb-0000:00:1a.0-2 / input1上的USB HID v1.11设备[MicrosoftNatural®Ergonomic Keyboard 4000]
我曾经udevadm info
收集设备信息:
> udevadm信息-a -p /devices/pci0000:00/0000:00:1a.0/usb3/3-2/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} ==“ 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“ 查看父设备'/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1': 内核==“ 3-2:1.1” SUBSYSTEMS ==“ 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” 查看父设备'/devices/pci0000:00/0000:00:1a.0/usb3/3-2': 内核==“ 3-2” SUBSYSTEMS ==“ 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 {version} ==“ 2.00” ATTRS {maxchild} ==“ 0” ATTRS {quirks} ==“ 0x0” ATTRS {authorized} ==“ 1” ATTRS {manufacturer} ==“ Microsoft” 查看父设备'/devices/pci0000:00/0000:00:1a.0/usb3': 内核==“ usb3” SUBSYSTEMS ==“ 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 {version} ==“ 1.10” ATTRS {maxchild} ==“ 2” ATTRS {quirks} ==“ 0x0” ATTRS {authorized} ==“ 1” ATTRS {manufacturer} ==“ Linux 2.6.31-16-通用uhci_hcd” ATTRS {product} ==“ UHCI主机控制器” ATTRS {serial} ==“ 0000:00:1a.0” ATTRS {authorized_default} ==“ 1” 查看父设备“ /devices/pci0000:00/0000:00:1a.0”: KERNELS ==“ 0000:00:1a.0” SUBSYSTEMS ==“ pci” DRIVERS ==“ uhci_hcd” ATTRS {vendor} ==“ 0x8086” ATTRS {device} ==“ 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} ==“” 查看父设备“ / devices / pci0000:00”: 内核==“ pci0000:00” SUBSYSTEMS ==“” DRIVERS ==“”
所以我创建了一个文件/etc/udev/rules.d/usb-keyboard.rules
:
#插入键盘后打开NumLock。 ACTION ==“ add”,ATTRS {manufacturer} ==“ Microsoft”,SUBSYSTEM ==“ input”,RUN + =“ / usr / bin / numlockx on” #拔下键盘时,关闭NumLock。 ACTION ==“ remove”,ATTRS {manufacturer} ==“ Microsoft”,SUBSYSTEM ==“ input”,RUN + =“ / usr / bin / numlockx off”
我曾经用来udevadm test
验证规则是否正确:
> udevadm test --action = add /devices/pci0000:00/0000:00:1a.0/usb3/3-2/2/3-2:1.1/input/input21 run_command:调用:测试 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:运行'/ sbin / modprobe -b $ env {MODALIAS}'/lib/udev/rules.d/80-drivers.rules:5 udev_rules_apply_to_event:运行'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:运行'/ usr / bin / numlockx on'/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 / 2 / 3-2:1.1 / input / input21 udevadm_test:PRODUCT = 3 / 45e / db / 111 udevadm_test:NAME =“ MicrosoftNatural®人体工学键盘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 =添加 udevadm_test:SUBSYSTEM =输入 udevadm_test:运行:'/ 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:运行:'socket:@ / org / freedesktop / hal / udev_event' udevadm_test:运行:'/ usr / bin / numlockx on'
这是“删除”测试:
> udevadm test --action =删除/devices/pci0000:00/0000:00:1a.0/usb3/3-2/2/3-2:1.1/input/input21 run_command:调用:测试 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:运行'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:运行'/ 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 / 2 / 3-2:1.1 / input / input21 udevadm_test:PRODUCT = 3 / 45e / db / 111 udevadm_test:NAME =“ MicrosoftNatural®人体工学键盘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 =删除 udevadm_test:SUBSYSTEM =输入 udevadm_test:运行:'socket:@ / org / freedesktop / hal / udev_event' udevadm_test:运行:'/ usr / bin / numlockx off'
问题是插入或拔出键盘后,NumLock状态不会更改。我尝试重启udev服务,但没有成功。我的udev规则有误吗?我会以错误的方式处理吗?