मैं एक लैपटॉप पर उबंटू 9.10 (कार्मिक कोआला) चला रहा हूं और अपने यूएसबी कीबोर्ड प्लग इन (नॉकलॉक) या अनप्लग्ड (नॉकलॉक) के आधार पर स्वचालित रूप से टॉगल करने के लिए न्यूक्लॉक पसंद करेगा।
इसे पूरा करने के लिए, मैंने पहली बार "न्यूक्लॉक्स" पैकेज स्थापित किया। numlockx on
और numlockx off
ठीक काम करता है।
डिवाइस सिस्टम में हुक करने के लिए, मुझे लगा कि मैं udev का उपयोग करूंगा। मैंने "लेखन udev नियम" पढ़ा है , लेकिन मुझे काम करने के लिए udv नियम प्राप्त करने में परेशानी हो रही है।
सबसे पहले, यहाँ dmesg
आउटपुट का एक उदाहरण है :
[20906.985102] usb 3-2: uhci_hcd और एड्रेस 6 का उपयोग करके नई कम गति वाली USB डिवाइस [20907.166403] usb 3-2: कॉन्फ़िगरेशन # 1 को 1 पसंद से चुना गया [20907.192904] इनपुट: Microsoft प्राकृतिक® Ergonomic कीबोर्ड 4000 /देवियों /pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.0/input/input20 के रूप में [20907.193100] Microsoft 0003: 045E: 00DB.000B: इनपुट, hidraw1: USB छिपाई v1.11 कीबोर्ड [Microsoft Natural® Ergonomic Keyboard 4000] usb-0000: 00: 1: 00-2-2 / input0 पर [२० ९ ० Natural.२१1010१०] इनपुट: Microsoft नेचुरल® एर्गोनोमिक कीबोर्ड ४००० /देवियों के रूप में /pci0000:00/0000:00:१a.0/usb3/3-2/3-2:1.1/input/input21 [20907.217979] Microsoft 0003: 045E: 00DB.000C: इनपुट, hidraw2: USB छिपाई v1.11 डिवाइस [Microsoft Natural® Ergonomic Keyboard 4000] usb-0000: 00: 1: 00-2-2 / input1 पर
मैं udevadm info
उपकरण जानकारी एकत्र करता था:
> udvadm जानकारी -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': कर्नेल == "input21" सबसिस्टम == "इनपुट" ड्राइवर == "" ATTR {Phys} == "USB-0000: 00: 1a.0-2 / इनपुट 1" ATTR {uniq} == "" ATTR {modalias} == "इनपुट: b0003v045Ep00DBe0111-e0,1,2,3,4,14, k71,72,73,74,75,77,79,7A, 7 बी, 7, 7 दिन, 7E, 7F, 80 , 81,82,83,84,85,86,87,88,89,8A, 8 बी, 8C, 8E, 90,96,98,9B, 9, 9E, 9 फ, A1, A3, A4, A5, A6 , ए 7, ए 8, ए 9, अटल बिहारी, एसी, ई, एई, B0, बी 1, बी 2, बी 3, बी 4, B5, बी 6, बी 8, B9, बीए, बी बी, ई.पू., बीडी, बीई, बीएफ, C0, C1, C2 , सीई, सीएफ, D0, डी 1, डी 2, D5, D9, डीबी, DF, E2, E7, E8, E9, ईए, ईबी, 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" उप == "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' देख रहे हैं: गुठली == "3-2" उप == "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 {गति} == "1.5" ATTRS {busnum} == "3" ATTRS {devnum} == "6" ATTRS {संस्करण} == "2.00" ATTRS {maxchild} == "0" ATTRS {quirks} == "0x0" ATTRS {अधिकृत} == "1" ATTRS {निर्माता} == "माइक्रोसॉफ्ट" मूल उपकरण '/devices/pci0000:00/0000:00:1a.0/usb3' देख रहे हैं: गुठली == "USB3" उप == "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 {गति} == "12" ATTRS {busnum} == "3" ATTRS {devnum} == "1" एटीटीआरएस {संस्करण} == "1.10" ATTRS {maxchild} == "2" ATTRS {quirks} == "0x0" ATTRS {अधिकृत} == "1" ATTRS {निर्माता} == "लिनक्स 2.6.31-16- जेनेरिक uhci_hcd" ATTRS {उत्पाद} == "UHCI होस्ट कंट्रोलर" ATTRS {serial} == "0000: 00: 1a.0" ATTRS {authorized_default} == "1" मूल उपकरण '/devices/pci0000:00/0000:00:1a.0' देख रहे हैं: गुठली == "0000: 00: 1a.0" उप == "पीसीआई" ड्राइवरों == "uhci_hcd" ATTRS {विक्रेता} == "0x8086" ATTRS {device} == "0x2937" ATTRS {subsystem_vendor} == "0x1558" ATTRS {subsystem_device} == "0x0860" ATTRS {वर्ग} == "0x0c0300" ATTRS {आईआरक्यू} == "16" ATTRS {local_cpus} == "एफएफ" ATTRS {local_cpulist} == "0-7" ATTRS {modalias} == "पीसीआई: v00008086d00002937sv00001558sd00000860bc0Csc03i00" ATTRS {broken_parity_status} == "0" ATTRS {msi_bus} == "" मूल उपकरण '/ उपकरणों / pci0000: 00' को देखना: गुठली == "pci0000: 00" उप == "" ड्राइवरों == ""
इसलिए मैंने एक फाइल बनाई जिसका नाम है /etc/udev/rules.d/usb-keyboard.rules
:
# कीबोर्ड प्लग इन होने पर न्यूक्लॉक को चालू करें। ACTION == "जोड़ें", ATTRS {निर्माता} == "Microsoft", SUBSYSTEM == "इनपुट", RUN + = "/ usr / bin / numlockx" # कीबोर्ड अनप्लग होने पर न्यूक्लॉक को बंद कर दें। ACTION == "हटाएं", ATTRS {निर्माता} == "Microsoft", SUBSYSTEM == "इनपुट", RUN + = "/ usr / bin / numlockx off"
मैंने यह udevadm test
सत्यापित करने के लिए उपयोग किया है कि नियम सही हैं:
> udvadm test --action = add /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 run_command: कॉलिंग: टेस्ट udvadm_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 में देवपथ है / 'देवियाँ /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 'सॉकेट: @ / org / freedesktop / hal / udev_event' /lib/udev/rules.d/90-hal.rules2 udev_device_new_from_syspath: डिवाइस 0x28d8560 में devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2-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' /etc/udev/rules.d/usb-keyboard.rules:7 पर udvadm_test: UDEV_LOG = 6 udvadm_test: DEVPATH = / devices / pci0000: 00/0000: 00: 1a.0 / usb3 / 3-2 / 3-2: 1.1 / input / input21 udvadm_test: PRODUCT = 3 / 45e / db / 111 udvadm_test: NAME = "Microsoft प्राकृतिक® Ergonomic कीबोर्ड 4000" udvadm_test: PHYS = "usb-0000: 00: 1a.0-2 / input1" udvadm_test: UNIQ = "" udvadm_test: EV == 10001f udvadm_test: KEY == 837fff 2c3027 bf004444 0 0 1 10f84 8a27c007 ff7f7bfa d9415fff febeffdf ffefffff ffffffff fffffffe udvadm_test: REL == 40 udvadm_test: ABS == 1 0 udvadm_test: MSC == 10 udvadm_test: MODALIAS = इनपुट: b0003v045Ep00DBe0111-e0,1,2,3,4,14, k71,72,73,74,75,77,79,7A, 7B, 7C, 7D, 7E, 7F, 7F, 80,81, 80,81 82,83,84,85,86,87,88,89,8A, 8 बी, 8C, 8E, 90,96,98,9B, 9, 9E, 9 फ, A1, A3, A4, A5, A6, ए 7, ए 8, ए 9, अटल बिहारी, एसी, ई, एई, B0, बी 1, बी 2, बी 3, बी 4, B5, बी 6, बी 8, B9, बीए, बी बी, ई.पू., बीडी, बीई, बीएफ, C0, C1, C2, सीई, सीएफ, D0, डी 1, डी 2, D5, D9, डीबी, DF, E2, E7, E8, E9, ईए, ईबी, 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 udvadm_test: ACTION = जोड़ें udvadm_test: SUBSYSTEM = इनपुट udvadm_test: run: '/ sbin / modprobe -b इनपुट: b0003v045Ep00DBe0111-e0,1,2,3,4,14, k71,72,73,74,75,77,79,7A, 7B, 7C, 7D, 7E, 7E , 7F, 80,81,82,83,84,85,86,87,88,89,8A, 8 बी, 8C, 8E, 90,96,98,9B, 9, 9E, 9 फ, A1, A3, A4 , A5, A6, ए 7, ए 8, ए 9, अटल बिहारी, एसी, ई, एई, B0, बी 1, बी 2, बी 3, बी 4, B5, बी 6, बी 8, B9, बीए, बी बी, ई.पू., बीडी, बीएफ बीई, C0 , C1, C2, सीई, सीएफ, D0, डी 1, डी 2, D5, D9, डीबी, DF, E2, E7, E8, E9, ईए, ईबी, 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 ' udvadm_test: run: 'सॉकेट: @ / org / freedesktop / hal / udevmee' udvadm_test: run: '/ usr / bin / numlockx on'
और यहाँ "निकालें" परीक्षण है:
> udvadm test --action = निकालें /devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2:1.1/input/input21 run_command: कॉलिंग: टेस्ट udvadm_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 में देवपथ है / 'देवियाँ /pci0000:00/0000:00:1a.0/usb3/3-2/3-2/1.1/input/input21' udev_rules_apply_to_event: RUN 'सॉकेट: @ / org / freedesktop / hal / udev_event' /lib/udev/rules.d/90-hal.rules2 udev_device_new_from_syspath: डिवाइस 0xd2fff8 में devpath '/devices/pci0000:00/0000:00:1a.0/usb3/3-2/3-2-2.1.1' है। udev_device_new_from_syspath: डिवाइस 0xd30690 में देवपथ है / 'देवियाँ /pci0000:00/0000:00:1a.0/usb3/3-2' udev_rules_apply_to_event: RUN '/ usr / bin / numlockx बंद' /etc/udev/rules.d/usb-keyboard.rules:10 udvadm_test: UDEV_LOG = 6 udvadm_test: DEVPATH = / devices / pci0000: 00/0000: 00: 1a.0 / usb3 / 3-2 / 3-2: 1.1 / input / input21 udvadm_test: PRODUCT = 3 / 45e / db / 111 udvadm_test: NAME = "Microsoft प्राकृतिक® Ergonomic कीबोर्ड 4000" udvadm_test: PHYS = "usb-0000: 00: 1a.0-2 / input1" udvadm_test: UNIQ = "" udvadm_test: EV == 10001f udvadm_test: KEY == 837fff 2c3027 bf004444 0 0 1 10f84 8a27c007 ff7f7bfa d9415fff febeffdf ffefffff ffffffff fffffffe udvadm_test: REL == 40 udvadm_test: ABS == 1 0 udvadm_test: MSC == 10 udvadm_test: MODALIAS = इनपुट: b0003v045Ep00DBe0111-e0,1,2,3,4,14, k71,72,73,74,75,77,79,7A, 7B, 7C, 7D, 7E, 7F, 7F, 80,81, 80,81 82,83,84,85,86,87,88,89,8A, 8 बी, 8C, 8E, 90,96,98,9B, 9, 9E, 9 फ, A1, A3, A4, A5, A6, ए 7, ए 8, ए 9, अटल बिहारी, एसी, ई, एई, B0, बी 1, बी 2, बी 3, बी 4, B5, बी 6, बी 8, B9, बीए, बी बी, ई.पू., बीडी, बीई, बीएफ, C0, C1, C2, सीई, सीएफ, D0, डी 1, डी 2, D5, D9, डीबी, DF, E2, E7, E8, E9, ईए, ईबी, 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 udvadm_test: ACTION = निकालें udvadm_test: SUBSYSTEM = इनपुट udvadm_test: run: 'सॉकेट: @ / org / freedesktop / hal / udevmee' udvadm_test: run: '/ usr / bin / numlockx off'
समस्या यह है कि जब कीबोर्ड प्लग या अनप्लग होता है, तो NumLock स्टेटस नहीं बदलता है। मैंने udv सेवा को पुनः आरंभ करने की कोशिश की है, जिसमें कोई भाग्य नहीं है। क्या मेरे udv नियम गलत हैं? क्या मैं इसके बारे में गलत तरीके से जा रहा हूं?