Làm cách nào để thay đổi sơ đồ bàn phím của một thiết bị (người trình bày Logitech)?


20

Người trình bày Logitech R400 của tôi gửi các mã khóa sau:

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

Về cơ bản, tôi muốn sử dụng người dẫn chương trình này để điều khiển từ xa Banshee, vì vậy tôi muốn remap Priorđể B, Nextđể N, và vân vân.

Làm cách nào tôi chỉ có thể thay đổi sơ đồ bàn phím cho thiết bị này (vì tôi chắc chắn không muốn ánh xạ lại các mã khóa đó trên toàn cầu)?


AFAIU "con trỏ nô lệ" có nghĩa là chuột, không phải bàn phím. Bạn không thể tải sơ đồ bàn phím lên chuột. Là những thiết bị thực sự duy nhất hiện diện trong danh sách xinput?
Marius Gedminas

@MariusGedminas Tôi đã phải trải qua các thiết bị / dev / input / eventX và event5 là người trình bày, vì vậy dường như nó là một "bàn phím".
htorque

Câu trả lời:


15

Tôi chưa bao giờ làm điều đó nhưng tôi nghĩ bạn cần tạo một tệp sơ đồ bàn phím /lib/udev/keymaps/và thêm quy tắc cho thiết bị của mình vào/lib/udev/rules.d/95-keymap.rules


Chi tiết:

  • Sơ đồ bàn phím udev ánh xạ mã quét thành mã khóa, vì vậy bạn cần tìm cả hai để tạo tệp sơ đồ bàn phím. Để tìm mã quét, hãy chạy như sau và nhấn các nút trên thiết bị:

    sudo /lib/udev/keymap -i input/event5
    

    Bạn có thể cần thử các số khác nhau cho sự kiện * . Đầu ra sẽ trông như thế này:

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    Một danh sách các mã khóa có thể được tìm thấy ở đây .

    Bây giờ hãy tạo tệp sơ đồ bàn phím (Tôi đang lưu trữ dưới dạng / lib / udev / keymaps / logitech-r400 ):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    Không làm gì hữu ích - chỉ là một thử nghiệm để dễ dàng xem nó có hoạt động không.

  • Để kiểm tra sơ đồ bàn phím mới tạm thời, hãy chạy:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    Điều này sẽ dẫn đến kết quả đầu ra như thế này:

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    Các nút bây giờ sẽ thay đổi độ sáng.

  • Nếu bạn muốn thay đổi đó vĩnh viễn, bạn cần thêm quy tắc udev để /lib/udev/rules.d/95-keymap.rulesáp dụng tệp sơ đồ bàn phím cho thiết bị.

    1. Mở tập tin: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Ở dưới cùng của tệp, nhưng trước LABEL="keyboard_end"dòng, thêm:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Lưu, đóng và sau khi khởi động lại, các nút sẽ thay đổi độ sáng.


Ôi làm sao tôi có thể quên điều đó (/ lib / udev / keymaps / zepto-znote được đóng góp bởi tôi: D). Sau này tôi sẽ bổ sung thêm về cách tôi thực hiện nó cho câu trả lời của bạn.
htorque

Chỉ muốn thêm vào câu trả lời này là bạn có thể tham gia vào "eventX" bàn phím của bạn có thể bằng cách chạy /lib/udev/findkeyboards. Điều đó sẽ liệt kê tất cả các bàn phím hiện được đính kèm để bạn không phải thử quá nhiều. Logitech r400 hiển thị là "Bàn phím USB: input / event11" đối với tôi.
jat255

Câu trả lời hay, nhưng làm cách nào để khám phá ID_VENDOR và idSản phẩm để sử dụng? Tôi đã thử /sys/class/dmi/id/sys_vendor/sys/class/dmi/id/product_namenó không hoạt động.
PutzKipa

2
/lib/udev/keymap/lib/udev/findkeyboardskhông còn tồn tại vào ngày 13.10. forum.ubfox-fr.org/viewtopic.php?id=1395051 nói rằng hãy sử dụng evtest thay thế.
Stéphane Gourichon

6
Xin chào @htorque, bạn có thể cập nhật câu trả lời theo cách mới không? Trong Ubuntu Trusty tất cả các tệp này không tồn tại nữa. Bạn là người duy nhất tôi thấy trên mạng có cùng một điều kiện.
londumas

4

Tôi đang dùng Ubuntu 16.04. Tôi đã làm một hướng dẫn ở đây

Phát hiện với evtest

sudo evtest

Nhìn vào danh sách thiết bị:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

Lấy "Bộ thu USB Logitech" đầu tiên, ở đây có id sự kiện 9.

Testing ... (interrupt to exit)

OK bây giờ evtest muốn đầu vào, chỉ cần nhấp vào các nút từ xa Logitech, tôi đã nhận được điều này (đơn giản hóa):

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

Lưu ý: Tôi phát hiện ra rằng sau đó nhấp nhiều lần vào [>] là đưa ra 7003e, rồi 70029, rồi 7003e, v.v. Tôi không biết tại sao.

Sửa đổi udev conf

Bây giờ chúng ta có mã đầu vào, hãy xem udev conf:

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

Tìm kiếm "R400" và thay thế bản trình bày & hiển thị bằng các phím bạn muốn, nút phátnút mũi tên dừng:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Như đã đề cập trước đây, bởi vì 07003e & 070.029 là cùng một nút, tôi đưa cho họ cùng một sản lượng lên chủ chốt. 7004b & 7004e không xuất hiện ở đây theo mặc định, có thể vì chúng là các đầu vào PAGEUP & PAGEDOWN gốc và không liên quan đến "Logitech Presenter R400". Hãy thêm chúng:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

Đây là conf cuối cùng của tôi:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Quy tắc tải lại (mới)

sudo udevadm hwdb --update

Sau đó, bằng cách sử dụng cùng một id sự kiện mà chúng tôi đã chọn trước đây, ở đây sự kiện id 9:

sudo udevadm trigger /dev/input/event9

Bạn có thể kiểm tra ánh xạ mới này trong trình duyệt web, ví dụ:

$('body').on('keydown', function(e){ console.log(e.key) })

Điều đó đã cho tôi:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

Tôi đã thực hiện một số cải tiến nhỏ trong hướng dẫn logitech-r400-remap.md ban đầu của bạn từ GitHub. Xin vui lòng thay đổi chúng hoặc chỉnh sửa chúng vào trang web GitHub của bạn nếu bạn muốn (không cần ghi công cho tôi). Câu trả lời của bạn đã bị đánh giá thấp bởi vì đó là một liên kết chỉ trả lời theo ý kiến ​​của tôi, vì vậy tôi cũng đã gỡ bỏ downvote.
karel

Các downote đã bị xóa, vì vậy bây giờ câu trả lời của bạn có cơ hội được xem xét về giá trị riêng của nó giống như bất kỳ câu trả lời nào khác ở đây.
karel

1
Sử dụng hướng dẫn của bạn. Làm việc như một bùa mê :)
Costa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.