จะทำให้ตัวเลื่อนการซูมของ Microsoft Natural Ergonomic Keyboard 4000 (และปุ่มอื่น ๆ ) ทำงานอย่างไร


21

ฉันใช้ Microsoft Natural Ergonomic Keyboard 4000 บน Ubuntu 10.10 ปุ่มมัลติมีเดีย (ระดับเสียงเล่น / หยุดชั่วคราว) ใช้งานได้ปุ่มเมลและเครื่องคิดเลขก็เช่นกัน

ตอนนี้ฉันชอบที่จะใช้ตัวเลื่อนการซูมถ้าเป็นไปได้ฉันต้องการใช้การเลื่อนหน้าเว็บด้วยสิ่งนั้น มีวิธีการเปิดใช้งานที่?


2
ดูaskubuntu.com/questions/471802/… . คำตอบเดิมที่นี่อาจล้าสมัย
matt

คำตอบ:


18

สร้างไฟล์/etc/udev/rules.d/98-ms-ergo.rulesด้วยเนื้อหาต่อไปนี้:

ACTION=="remove", GOTO="keyboard_end"
KERNEL!="event*", GOTO="keyboard_end"
ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end"
SUBSYSTEMS!="usb", GOTO="keyboard_end"

SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"

ENV{ID_VENDOR}=="Microsoft", ENV{ID_MODEL_ID}=="00db", RUN+="keymap $name 0xc022d pageup 0xc022e pagedown"

GOTO="keyboard_end"

นี้จะ map สำคัญซูมไปยังหน้า-up / /lib/udevหน้าลงโดยไม่ต้องเปลี่ยนไฟล์ที่ติดตั้งใน

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


สิ่งนี้ใช้ได้กับฉันอย่างไม่มีที่ติในการใช้ Fedora 19
รูเบนส์ Mariuzzo

สำหรับ Microsoft Ergonomic 7000 รุ่นนี้ดูเหมือนจะเป็น 071d (ตามที่ได้รับจาก lsusb) แทนที่จะเป็น 00db ดังนั้นถ้าใครก็ตามลองใช้ 7000 นี้พวกเขาน่าจะแทนที่ 00db ด้วย 071d ในไฟล์ด้านบน อย่างไรก็ตามในกรณีของฉัน (Ubuntu 14.04) ที่ใช้งานไม่ได้อาจเกี่ยวข้องกับความจริงที่evtestแสดงให้เห็นว่าตัวเลื่อนการซูมไม่สามารถเรียกใช้เหตุการณ์ใด ๆ ซึ่งแตกต่างจากแป้นอื่น ๆ ส่วนใหญ่ของแป้นพิมพ์ Ergonomic 7000 ไม่แน่ใจว่าเป็นเพราะปุ่ม Web / Home ไม่แสดงผลลัพธ์ใด ๆ ในevtest- แม้ว่า Ubuntu จะหยิบมันขึ้นมา
matt

1
ฉันไม่สามารถให้ 4000 ทำงานบน 14.04 ได้ xevไม่เห็นเหตุการณ์ที่เกิดขึ้นใน
Michael

พยายามทำสิ่งนี้ใน 14.10 และไม่ทำงาน
รูเบนส์ Mariuzzo

@Cocoabean xevไม่ทำงานสำหรับฉันเช่นกัน evtest /dev/input/event3สิ่งที่ไม่เป็น หากevent3ไม่มีปฏิกิริยาใด ๆ ต่อคีย์นี้ให้ทดสอบกับเหตุการณ์อื่น ( event[0..9])
Nicolás

9

บน Xubuntu 13.10 (อาจเป็น Ubuntu 13.10 ด้วย) สามารถทำได้ดังนี้:

แก้ไขการแมปกุญแจใน/lib/udev/hwdb.d/60-keyboard.hwdb:

###########################################################
# Microsoft
###########################################################

# Microsoft Natural Ergonomic Keyboard 4000
keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_c022d=pageup
 KEYBOARD_KEY_c022e=pagedown

วิ่ง sudo udevadm hwdb --update

Reboot


1
ทำงานกับ 14.04 สำหรับฉัน
Amir Uval

60-keyboard.hwdb ของฉันมีรายการที่มีอยู่สำหรับ MNEK4K ด้วยแป้นพิมพ์: usb: b0003v045Ep00DB * การเปลี่ยนแปลงการกระทำไม่ทำงาน การเพิ่มรายการใหม่ด้วยการกระทำเหล่านั้นได้ผล
Alrekr

ทำงานเหมือนมนต์เสน่ห์ในวันที่ 16.04 ฉันใช้ "up" และ "down" (แทนที่จะเป็น resp. "pageup" และ "pagedown") เพื่อให้การเลื่อนราบรื่นขึ้นเมื่อเรียกดูเว็บเพจ ขอบคุณมาก!
ปิแอร์

คุณสามารถแมปkatakanaและkatakanahiragana(หรือรหัสที่ไม่ได้ใช้อื่น ๆ จากhal.freedesktop.org/quirk/quirk-keymap-list.txt ) แทนที่จะใช้นามแฝงกับคีย์ที่มีอยู่ วิธีนี้คุณสามารถจดจำและใช้คีย์ร่วมกับตัวดัดแปลงเพื่อสลับระดับเสียงภาษาขนาด ฯลฯ (กำหนดค่าตัวจัดการหน้าต่างของคุณเพื่อเพลิดเพลินกับซุปเปอร์คีย์ใหม่สองตัว)
dmitry_romanov

4

ในการกำหนดค่าแป้นพิมพ์ตามหลักสรีรศาสตร์ของ Microsoft 4000เราต้องสร้างไฟล์กำหนดค่าที่มีการประกาศแป้นพิมพ์และบันทึกสำหรับการจับคู่คีย์

ในการทำเช่นนั้นมีข้อมูลสามประเภทที่เราต้องพิจารณา:

  • ประเภทคีย์บอร์ด
  • ปุ่มscancodeซึ่งเป็นกุญแจจริงบนแป้นพิมพ์
  • ปุ่มnameเพื่อกำหนดฟังก์ชั่นที่ต้องการให้กับปุ่มที่เลือก

ค้นหาประเภทแป้นพิมพ์ก่อน:

ใน terminal รันคำสั่งต่อไปนี้:

lsusb 

ผลลัพธ์จะเป็นตัวกำหนดชนิดแป้นพิมพ์:

...
Bus 004 Device 022: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0
...    

IDมันจะปรากฏขึ้นหลังจาก ในกรณีนี้มันเป็น045e:00db

สองค้นหา scancode และชื่อของคีย์

เพื่อตรวจสอบพวกเราใช้evtestโปรแกรมที่ออกจากระบบข้อมูลเหตุการณ์ของอุปกรณ์เฉพาะใน terminal:

evtest

หากคุณไม่มีโปรแกรมให้ติดตั้งโดยใช้คำสั่งต่อไปนี้:

sudo apt-get install evtest

ด้วยการรันevtestโปรแกรมเราจะได้ผลลัพธ์ต่อไปนี้:

No device specified, trying to scan all of /dev/input/event* Available devices: 
/dev/input/event0:    Power Button     
/dev/input/event1:    Power Button     
/dev/input/event2:    PixArt USB Optical Mouse   
/dev/input/event3:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event4:    Microsoft Natural® Ergonomic Keyboard 4000   
/dev/input/event5:    HDA Intel Front Headphone     
/dev/input/event6:    HDA Intel Line Out     
/dev/input/event7:    HDA Intel Line   
/dev/input/event8:    HDA Intel Rear Mic     
/dev/input/event9:    HDA Intel Front Mic     
/dev/input/event10:   HDA ATI HDMI HDMI/DP,pcm=3
Select the device event number [0-10]:

เอาท์พุทเป็นคำอธิบายตัวเองสวยมากใส่หมายเลขที่เหมาะสมสำหรับแป้นพิมพ์ซึ่งนี่คือจำนวน3แล้วกด Enter:

การทำเช่นนั้นจะส่งสัญญาณข้อมูลจำนวนมากบนเทอร์มินัลและสิ้นสุดในบรรทัดต่อไปนี้:

... 

Testing ... (interrupt to exit)
Event: time 1472203902.240594, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1472203902.240594, -------------- SYN_REPORT ------------
Event: time 1472203902.281456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70058
Event: time 1472203902.281456, type 1 (EV_KEY), code 96 (KEY_KPENTER), value 0
Event: time 1472203902.281456, -------------- SYN_REPORT ------------

ขณะนี้มีทุกการกดปุ่มบนแป้นพิมพ์มันทิ้งข้อมูลที่สำคัญ ตัวอย่างเช่นปุ่ม Slashถัดจากปุ่ม Shift ขวาแสดง:

Event: time 1472205062.294078, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70038
Event: time 1472205062.294078, type 1 (EV_KEY), code 12 (KEY_SLASH), value 0
Event: time 1472205062.294078, -------------- SYN_REPORT ------------

บรรทัดแรกของบันทึกประกอบด้วยข้อมูลเกี่ยวกับคีย์จริงบนคีย์บอร์ดเช่นscancodeซึ่งมาหลังค่า ในกรณีนี้คือ70038

บรรทัดที่สองมีข้อมูลฟังก์ชันการทำงานที่กำหนดเช่นชื่อของคีย์ ในกรณีนี้มันเป็นSLASH ตรวจสอบคีย์อื่น ๆ เพื่อค้นหาชื่อที่เหมาะสม

ดังนั้นสรุป:

  • ประเภทแป้นพิมพ์ของเราคือ: 045e: 00db
  • Scancode ของปุ่ม Slash คือ: 70038
  • ชื่อของคีย์สำหรับการกำหนดคือSLASH

หลังจากรวบรวมข้อมูลที่จำเป็นแล้วเราจะสร้างไฟล์กำหนดค่า:

sudoedit /etc/udev/hwdb.d/61-keyboard-local.hwdb

กดiเพื่อเปิดใช้งานโหมดแทรกและพิมพ์ดังต่อไปนี้:

keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_70038=minus      

บันทึกและออกโดยการกดescapeจากนั้นพิมพ์:wqและกด Enter

จากนั้นรันสองคำสั่งต่อไปนี้เพื่อให้การกำหนดค่ามีผล:

sudo udevadm hwdb --update
sudo udevadm control --reload

ในที่สุดก็ถอดปลั๊กคีย์บอร์ดแล้วเสียบใหม่อีกครั้ง

หมายเหตุบางประการเกี่ยวกับไฟล์กำหนดค่า:

  • รูปแบบของไฟล์ควรจะตรงตามที่แสดงพื้นที่ก่อนที่จะบันทึกการทำแผนที่เป็นสิ่งสำคัญ
  • แทนที่จะsudoeditใช้ตัวแก้ไขข้อความอื่นโปรดอย่าลืมทำตามรูปแบบที่แน่นอนของไฟล์ดังที่อธิบายไว้ข้างต้น
  • มีการเพิ่มตัวอักขระสองตัวลงในชนิดแป้นพิมพ์: vและตัวpใดตัวหนึ่งที่ยืนสำหรับผู้ขายและผลิตภัณฑ์ พวกเขามีความสำคัญเช่นกัน
  • ชนิดแป้นพิมพ์ถูกเขียนเป็นตัวพิมพ์ใหญ่ในไฟล์กำหนดค่า ประเภทแป้นพิมพ์ของเราคือ045e: 00dbแต่ในการกำหนดค่าเราใส่v045Ep00DB *
  • scancode ของคีย์มาทันที KEYBOARD_KEY_
  • ชื่อคีย์ปรากฏเป็นตัวพิมพ์เล็กในไฟล์กำหนดค่า
  • คุณสามารถปรับแต่งทุก ๆ ปุ่มบนแป้นพิมพ์ของคุณตามบทช่วยสอนนี้

3

ปัญหาคือว่าคนขับ evdev ละเว้นการพิมพ์ซ้ำ> 255
การแก้ปัญหาขอบคุณMarco Chiappero :

1) คุณจะต้องกำหนดรีโมตทั้งหมดที่คุณต้องการ (ในรูปแบบของ 
รายการ "scancode keycode") และวางไว้ในไฟล์ภายใต้ "/ lib / udev / keymaps /" 
(ตัวอย่างเช่นฉันสร้าง logitech-lx710- ไร้สายที่นั่น) คุณสามารถค้นหา
ทำการสแกนโดยใช้ evtest ("sudo evtest / dev / input / eventX" โดยที่ X เป็นของคุณ 
อุปกรณ์แป้นพิมพ์ ระวังบางครั้งคีย์พิเศษเหล่านี้จะถูกเปิดเผยผ่าน
อุปกรณ์อื่นหรืออินเทอร์เฟซเมาส์ของคุณ: เช่น event3 -> kbd, event4 ->
เมาส์และปุ่มพิเศษ) ตัวอย่างผลลัพธ์ที่นี่:

เหตุการณ์: เวลา 1294153475.909379, ประเภท 4 (อื่น ๆ ), รหัส 4 (ScanCode), ค่า c1028
"c1028" เป็นค่า scancode ที่คุณจะใส่ในไฟล์ keymap ของคุณ 
รับตัวเลขจาก input.h ตามที่อธิบายไว้ก่อนหน้าและแปลงเป็น 
เลขฐานสิบหก จากนั้นเขียนคู่ทำการแมปในไฟล์ของคุณอาจมีคำอธิบาย
ความคิดเห็นเช่นนี้:

0xC1028 0x9a # ปุ่มหมุน

ทำซ้ำทุกปุ่ม> 255

2) คุณต้องบอก udev ให้ใช้ไฟล์ remapping นี้ทุกครั้งที่พบ 
แป้นพิมพ์ของคุณดังนั้นแก้ไขการเพิ่มไฟล์ "/lib/udev/rules.d/95-keymap.rules" 
กฎ udev ที่ตรงกับ HW ของคุณ โปรดอย่าถามฉันเพื่อกำหนดกฎสำหรับ
คุณ. 
หมายเหตุ: คุณสามารถใช้ไฟล์ keymap ของคุณได้ทันทีโดยพิมพ์ด้วยตัวเอง 
"sudo / lib / udev / keymap / dev / input / eventX / lib / udev / keymaps / $ YOUR_FILE" และ 
ตรวจสอบกับ evtest อีกครั้ง

ตอนนี้คุณสามารถใช้เครื่องมือแก้ไขทางลัด Gnome เพื่อดูว่าตอนนี้ปุ่มต่างๆ 
ใช้งานได้ภายใน X และสร้างทางลัดใหม่ อย่างไรก็ตามมันอาจเกิดขึ้นที่ไม่มี
keysym ถูกกำหนดให้กับ keycode นั้น (ดังนั้นคุณจะเห็น 0xXY แทน XF86Foo) 
คุณสามารถดูการแมปปัจจุบันผ่าน xmodmap -pke บันทึกผลลัพธ์ลงใน 
ไฟล์และแก้ไขหากคุณต้องการ (รายการรหัส keysym แบบเต็มมีอยู่ใน
"/ usr / lib / X11 / XKeysymDB")
เมื่อคุณเพิ่ม keysyms ในคีย์ที่คุณทำการแมปใหม่แล้วคุณสามารถบันทึกไฟล์นี้ได้
เป็น ~ / .Xmodmap (หรือ / etc / X11 / Xmodmap หากคุณต้องการใช้กับผู้ใช้ทุกคน)

ฉันหาว่าปุ่มที่ฉันต้องการคือ c022d และ c022e แต่ฉันไม่พบอินพุต h
Martin Ueding

ตามที่ผมเข้าใจ ( แต่ฉันไม่สามารถทดสอบเพราะผมไม่ได้มีฮาร์ดแวร์นี้) ที่คุณไม่ได้จริงๆต้อง input.h /lib/udev/rules.d/95-keymap.rulesคุณเพียงแค่ต้องแก้ไขไฟล์นี้: (อาจมาที่นี่ที่ launchpad คุณสามารถค้นหาผู้คนที่มีฮาร์ดแวร์เดียวกันจึงสามารถช่วยเหลือบั๊กได้มากขึ้น launchpad.net/ubuntu/+source/xorg-server/+bug/313514 ) คุณได้แก้ไขไฟล์ที่ฉันกล่าวถึงข้างต้นหรือไม่?
desgua

1
นี่เป็นเทคนิคมากเกินไปและไม่เป็นระเบียบคำตอบสำหรับคนส่วนใหญ่ ช่องว่างที่ร้ายแรงบางอย่าง: ไม่ช่วยในการกำหนด / dev / input / eventX ที่เหมาะสมไม่มีขั้นตอนที่ไม่ชัดเจนที่ผสมกับข้อมูลเชิงบริบทและการร้องขอไม่ขอคำแนะนำสำหรับการสร้างคีย์แมป
Alain O'Dea

1
evtest ไม่ได้ติดตั้งโดยค่าเริ่มต้นทำให้สิ่งนี้แย่ลงกว่าเดิม
Alain O'Dea

จากการทดลองและข้อผิดพลาดฉันพบว่าแป้นพิมพ์ของฉันคือ / dev / input / event3 และ evtest ไม่ได้รับกิจกรรมใด ๆ จากตัวเลื่อนการซูม
Alain O'Dea

0

บนเครื่องของฉันคีย์พิเศษ (HomePage, ค้นหา, Calc และอื่น ๆ ) และอินพุตซูมถูกส่งผ่านแม้ว่า / dev / input / event5 ในขณะที่ปุ่มธรรมดาถูกส่งผ่าน / dev / input / event4 ค่าของปุ่มซูมเห็นด้วยกับการไหลของคิว

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