Saya menjalankan Ubuntu 9.10 (Karmic Koala) di laptop dan ingin NumLock untuk secara otomatis beralih tergantung pada apakah keyboard USB saya terhubung (numlock on) atau dicabut (numlock off).
Untuk mencapai ini, saya pertama kali menginstal paket "numlockx". numlockx ondan numlockx offbekerja dengan baik.
Untuk menghubungkan ke sistem perangkat, saya pikir saya akan menggunakan udev. Saya telah membaca "Menulis aturan udev" , tetapi saya mengalami masalah dalam menjalankan aturan udev.
Pertama, inilah contoh dmesgoutputnya:
[20906.985102] usb 3-2: perangkat USB kecepatan rendah baru menggunakan uhci_hcd dan alamat 6 [20907.166403] usb 3-2: konfigurasi # 1 dipilih dari 1 pilihan [20907.192904] masukan: Microsoft Natural® Ergonomic Keyboard 4000 sebagai /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] di usb-0000: 00: 1a.0-2 / input0 [20907.217810] masukan: Microsoft Natural® Ergonomic Keyboard 4000 sebagai /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: Perangkat USB HID v1.11 [Microsoft Natural® Ergonomic Keyboard 4000] di usb-0000: 00: 1a.0-2 / input1
Saya biasa udevadm infomengumpulkan info perangkat:
> info udevadm -a -p /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
melihat perangkat '/ perangkat/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21':
KERNEL == "input21"
SUBSYSTEM == "input"
DRIVER == ""
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, 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 "
melihat perangkat induk '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1':
KERNELS == "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 {support_autosuspend} == "1"
melihat perangkat induk '/devices/pci0000:00/0000:00:1a.0/usb3/3-2':
KERNELS == "3-2"
SUBSYSTEMS == "usb"
DRIVERS == "usb"
ATTRS {konfigurasi} == ""
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 {berwenang} == "1"
ATTRS {manufacturer} == "Microsoft"
melihat perangkat induk '/ tools/pci0000:00/0000:00:1a.0/usb3':
KERNELS == "usb3"
SUBSYSTEMS == "usb"
DRIVERS == "usb"
ATTRS {konfigurasi} == ""
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 {berwenang} == "1"
ATTRS {manufacturer} == "Linux 2.6.31-16-generic uhci_hcd"
ATTRS {product} == "Pengontrol Host UHCI"
ATTRS {serial} == "0000: 00: 1a.0"
ATTRS {berwenang_default} == "1"
melihat perangkat induk '/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: v00008086d00002937sv00001515sd00000860bc0Csc03i00"
ATTRS {broken_parity_status} == "0"
ATTRS {msi_bus} == ""
melihat perangkat induk '/ perangkat / pci0000: 00':
KERNELS == "pci0000: 00"
SUBSYSTEMS == ""
PENGEMUDI == ""
Jadi saya membuat file bernama /etc/udev/rules.d/usb-keyboard.rules:
# Nyalakan NumLock saat keyboard dicolokkan.
ACTION == "add", ATTRS {manufacturer} == "Microsoft", SUBSYSTEM == "input", RUN + = "/ usr / bin / numlockx on"
# Matikan NumLock saat keyboard dicabut.
ACTION == "hapus", ATTRS {manufacturer} == "Microsoft", SUBSYSTEM == "input", RUN + = "/ usr / bin / numlockx off"
Saya sudah terbiasa udevadm testmemverifikasi bahwa aturannya benar:
> tes udevadm --action = add /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21
run_command: calling: test
udevadm_test: versi 147
[...]
parse_file: membaca '/etc/udev/rules.d/usb-keyboard.rules' sebagai file aturan
udev_rules_new: aturan menggunakan token 180864 byte (15072 * 12 byte), penyangga 31614 byte
udev_rules_new: indeks sementara digunakan 49760 byte (2488 * 20 byte)
udev_device_new_from_syspath: perangkat 0x28d7d80 memiliki 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#
udev_rules_apply_to_event: RUN 'socket: @ / org / freedesktop / hal / udev_event' /lib/udev/rules.d/90-hal.rules:
udev_device_new_from_syspath: perangkat 0x28d8560 memiliki devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1'
udev_device_new_from_syspath: perangkat 0x28d8708 memiliki devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2'
udev_rules_apply_to_event: RUN '/ usr / bin / numlockx di' /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,75,77,79,7A, 7B, 7C, 7D, 7E, 7F, 80F, 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, 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 = add
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, 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, 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, 1A0, 1B0.1B1.1B7, r6 , a20, m4, lsfw '
udevadm_test: run: 'socket: @ / org / freedesktop / hal / udev_event'
udevadm_test: run: '/ usr / bin / numlockx on'
Dan inilah tes "hapus":
> tes udevadm --action = hapus /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 run_command: calling: test udevadm_test: versi 147 [...] parse_file: membaca '/etc/udev/rules.d/usb-keyboard.rules' sebagai file aturan udev_rules_new: aturan menggunakan token 180864 byte (15072 * 12 byte), penyangga 31614 byte udev_rules_new: indeks sementara digunakan 49760 byte (2488 * 20 byte) udev_device_new_from_syspath: perangkat 0xd2fd80 memiliki 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: udev_device_new_from_syspath: device 0xd2fff8 memiliki devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1' udev_device_new_from_syspath: perangkat 0xd30690 memiliki 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,75,77,79,7A, 7B, 7C, 7D, 7E, 7F, 80F, 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, 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 = hapus udevadm_test: SUBSYSTEM = input udevadm_test: run: 'socket: @ / org / freedesktop / hal / udev_event' udevadm_test: run: '/ usr / bin / numlockx off'
Masalahnya adalah ketika keyboard dicolokkan atau dicabut, status NumLock tidak berubah. Saya telah mencoba memulai kembali layanan udev, tanpa hasil. Apakah aturan udev saya salah? Apakah saya salah tentang hal ini?