การจับภาพอินพุตที่สำคัญจากอุปกรณ์ของเหตุการณ์และการแมปมัน (สลับปุ่ม TouchPad เป็น unmapped)


10

ฉันมี Lenovo IdeaPad Yoga 13 ที่ติดตั้ง Ubuntu 13.10 อุปกรณ์มีปุ่ม "Toggle TouchPad" บนแป้นพิมพ์ ( F5) F*ปุ่มของแป้นพิมพ์กลับด้าน (เพื่อรับF5ฉันต้องกดFn+ F5และF5จริง ๆ แล้วเป็นปุ่มสลับ)

ฉันได้พบว่าปุ่มจะอ่านจริงโดยแป้นพิมพ์ (มากกว่าทัชแพดเช่นเดียวกับอุปกรณ์บางอย่าง) /dev/input/event3ซึ่งอยู่ที่ ดังนั้นการใช้sudo input-events 3ฉันสามารถคิดออกว่าปุ่มส่งรหัสสแกน 190:

ผลลัพธ์ของsudo lsinput:

/dev/input/event3
   bustype : BUS_I8042
   vendor  : 0x1
   product : 0x1
   version : 43907
   name    : "AT Translated Set 2 keyboard"
   phys    : "isa0060/serio0/input0"
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

ผลลัพธ์ของsudo input-events 3:

23:13:03.849392: EV_MSC MSC_SCAN 190
23:13:03.849392: EV_SYN code=0 value=0
23:13:03.855413: EV_MSC MSC_SCAN 190
23:13:03.855413: EV_SYN code=0 value=0

ไม่มีโปรแกรมอื่น ๆ (เช่นxev) input-eventsดูเหมือนจะสามารถที่จะอ่านมันยกเว้น มีวิธีใดบ้างในการแมปปุ่มนี้เพื่อสลับเป็นทัชแพดบนแล็ปท็อปของฉัน ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร

คำตอบ:


7

มันกลับกลายเป็นว่าเคอร์เนลหยิบมันขึ้นมา แต่ก็ยังบ่นว่ามันไม่รู้จัก

สำหรับใครที่มีปัญหานี้หรือต้องการแมปกุญแจที่ไม่ได้อ่านจากระบบปฏิบัติการให้อ่านต่อ

เปิด terminal dmesg | grep -A 1 -i setkeycodesและเรียกใช้ สิ่งนี้จะทำให้คุณมีหลายรายการเช่นนี้:

[    9.307463] atkbd serio0: Unknown key pressed (translated set 2, code 0xbe on isa0060/serio0).
[    9.307476] atkbd serio0: Use 'setkeycodes e03e <keycode>' to make it known.

สิ่งที่เรามีความสนใจเป็นค่าเลขฐานสิบหกหลัง "setkeycodes" e03eในกรณีนี้นี้คือ tail -f /var/log/kern.logหากคุณมีหลายเหล่านี้คุณสามารถเรียกใช้ เมื่อคุณทำเช่นนั้นคุณสามารถแตะปุ่มที่คุณกำลังมองหาและสิ่งนี้จะทำให้คุณมีบรรทัดเดียวกันกับด้านบนและอีกครั้งเราจะต้องมีค่าเลขฐานสิบหก จดบันทึกสิ่งนี้

ตอนนี้เรียกใช้xmodmap -pke | lessและค้นหาการแมปที่เหมาะสม ในกรณีของฉันฉันต้องทำแผนที่นี้เพื่อสลับทัชแพดของฉันซึ่งหมายความว่าฉันสนใจในบรรทัดต่อไปนี้:

keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

หากคุณไม่พบสิ่งที่คุณสนใจอ่านคำตอบ @Gilles ด้วยเนื่องจากคุณสามารถกำหนดการแมปที่กำหนดเองได้เช่นกันจากนั้นอ่านต่อ (หากเคอร์เนลอ่านคุณจะไม่ต้องเพิ่มลงใน xorg.conf ง)

ตอนนี้ฉันรันคำสั่งต่อไปนี้: sudo setkeycodes [hexadecimal] [keycode]ดังนั้นในกรณีของฉันที่กลายเป็น: setkeycodes e03e 199.

ตอนนี้คุณสามารถใช้บรรทัดต่อไปนี้เพื่อทดสอบว่ามันใช้งานได้และ / หรือคุณมีการแมปที่ถูกต้อง:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

เมื่อคุณเรียกใช้คำสั่งนี้คุณจะต้องมุ่งเน้นไปที่หน้าต่างที่เพิ่งเปิดใหม่ ( xev) และตรวจสอบผลลัพธ์ของคอนโซล ในกรณีของฉันมันอ่านดังต่อไปนี้:

207 NoSymbol

นี้เป็นความผิดพลาดอย่างเห็นได้ชัดตามที่ผมขอ keycode จึงแมปไป199 XF86TouchpadToggleฉันจะตรวจสอบxmodmap -pkeอีกครั้งและพบว่าkeycode 207เป็นแมปจริงNoSymbolและผมสังเกตเห็นว่ามีความแตกต่างชดเชย 8 ดังนั้นฉันพยายามsetkeycodesคำสั่งอีกครั้ง keycode 191แต่ที่สำคัญคือการแมปไป

sudo setkeycodes e03e 191

มันทำงานได้อย่างสมบูรณ์แบบ

แก้ไข - วิธีแก้ปัญหาที่ฉันให้ไว้เพื่อเริ่มการทำงานไม่ได้ ฉันจะคิดออกพรุ่งนี้และอัพเดตคำตอบนี้ สำหรับตอนนี้ฉันคิดว่าคุณสามารถเรียกใช้สิ่งนี้เมื่อเริ่มต้นด้วยตนเอง


1
วิธีที่จะทำให้มันถาวรในทางที่ดี? (เช่นหลังจากรีเซ็ต / boot-up)
vak

4

จากรูปลักษณ์ของมันอุปกรณ์ดังกล่าวเป็นแป้นพิมพ์ (รับรู้ในซอฟต์แวร์แยกต่างหากจากแป้นพิมพ์“ คอร์”) แต่เซิร์ฟเวอร์ X ไม่ฟัง

ลองเพิ่มส่วนการป้อนข้อมูลภายใต้ /etc/X11/xorg.conf.dนั่นคือสร้างไดเรกทอรี/etc/X11/xorg.conf.dหากยังไม่มีอยู่และสร้างไฟล์extra-keyboard-buttonsในไดเรกทอรีที่มี

Section "InputClass"
    Identifier "extra-keyboard-buttons"
    Driver "kbd"
    MatchProduct "AT Translated Set 2 keyboard"
EndSection

ฉันไม่แน่ใจเกี่ยวกับMatchProductบรรทัดนั้น ถ้ามันไม่ได้ทำงานให้ลองเล่นซอกับคำสั่งMatchXXX

เมื่อตั้งค่าไฟล์นี้อย่างถูกต้องเมื่อคุณเริ่มเซิร์ฟเวอร์ X ไฟล์นั้นควรประมวลผลเหตุการณ์จากแป้นพิมพ์นี้และคุณจะเห็นเหตุการณ์ในxevและที่อื่น ๆ สังเกตรหัสกุญแจ (ฉันไม่แน่ใจว่ารหัส X11 จะเหมือนกับรหัสฮาร์ดแวร์ในกรณีนี้) และเชื่อมโยง keysym กับมัน คุณสามารถทำได้ผ่านไฟล์ที่เรียกว่า.Xmodmapในไดเรกทอรีบ้านของคุณที่มี

keycode 190 = XF86_Launch5

ตอนนี้คุณสามารถกำหนดแป้นพิมพ์ลัดโดยใช้ปุ่มเหล่านี้

xinputเพื่อสลับทัชแพดใช้คำสั่ง เรียกใช้xinput listเพื่อดูว่าอุปกรณ์อินพุตใดที่พร้อมใช้งานและจดชื่อทัชแพดของคุณ (ฉันจะโทรหาTouchpadด้านล่าง) เรียกใช้xinput list-props Touchpadเพื่อแสดงรายการคุณสมบัติ หนึ่งในนั้นควรเรียกว่า“ Device Enabled” โดยมีหมายเลขอยู่ข้างๆ (เช่น 135) สคริปต์ต่อไปนี้จะสลับเป็นทัชแพด:

#!/bin/sh
device_name='Touchpad'
property=135
flipped_state=$(xinput list-props "$device_name" |
                awk "/\\($property\\)/ {print 1 - \$NF}")
xinput set-prop "$device_name" "$property" "$flipped_state"

บันทึกสิ่งนี้ในไฟล์~/bin/toggle-touchpadและทำให้สามารถเรียกใช้งานได้ ( chmod +x ~/bin/toggle-touchpad) หากต้องการผูกกับคีย์ให้ติดตั้งxbindkeysและกำหนดค่าให้รันสคริปต์ของคุณโดยใส่บรรทัดต่อไปนี้ใน~/.xbindkeysrc:

"toggle-touchpad"
  XF86_Launch5

ขอบคุณสำหรับคำตอบ. น่าเสียดายที่นี่ใช้งานไม่ได้ ฉันทำให้มันทำงานได้ดังนั้นอย่าลังเลที่จะดูคำตอบของฉันเอง! :)
Hosh Sadiq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.