Làm cách nào để thanh trượt MS Natural Ergonom 4000 hoạt động trên Linux Mint?


8

Tôi đang cố gắng để làm cho thanh trượt trên bàn phím MS hoạt động, nhưng vẫn không được.

Những gì tôi đã thử:

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

keyboard:usb:v045Ep00DB*
  KEYBOARD_KEY_c022d=up
  KEYBOARD_KEY_c022e=down

evdev:input:b0003v045Ep00DB*
 KEYBOARD_KEY_c022d=up
 KEYBOARD_KEY_c022e=down

tiếp theo

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

và khởi động lại đã không làm gì cả.

Trong /lib/udev/keymaps/microsoft-ergonomic-keyboard

0xC022D 0xC1 # Zoom Up which we wish to be Scroll up
0xC022E 0xC2 # Zoom Down which we wish to be Scroll down

và khởi động lại đã không làm gì cả.

Trong /etc/X11/xorg.conf.d/10-keyboard.conf

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "evdev"
    Option      "Device" "/dev/input/event9"
    Option      "event_key_remap" "418=185 419=186 423=101 425=156 421=157"
EndSection

và khởi động lại đã không làm gì cả.

Những gì tôi có là

> sudo evtest /dev/input/event9             
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x45e product 0xdb version 0x111
Input device name: "Microsoft Natural® Ergonomic Keyboard 4000"
...
Testing ... (interrupt to exit)
Event: time 1478692111.766327, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.766327, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1
Event: time 1478692111.766327, -------------- SYN_REPORT ------------
Event: time 1478692111.886318, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.886318, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0
Event: time 1478692111.886318, -------------- SYN_REPORT ------------
Event: time 1478692112.678287, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.678287, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1
Event: time 1478692112.678287, -------------- SYN_REPORT ------------
Event: time 1478692112.798370, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.798370, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 0
Event: time 1478692112.798370, -------------- SYN_REPORT ------------

Vì vậy, thanh trượt hoạt động, evtestcó thể xem các sự kiện, nhưng xevkhông hiển thị bất cứ điều gì. Có điều gì khác tôi có thể cố gắng làm cho nó hoạt động vào năm 2016 không?

Tôi đang sử dụng Linux Mint 18 Sarah với kernel chung 4.4.0-34.


Câu trả lời:


6

Bối cảnh: Bàn phím của bạn là một thiết bị USB HID và hạt nhân nhận dạng chính xác các sự kiện USB HID cho các phím trượt của bạn và dịch chúng sang mã phím ( KEY_ZOOMINKEY_ZOOMOUT). Vì vậy, về mặt đó, nó đã "hoạt động": Bạn có thể nhận các sự kiện và làm điều gì đó hữu ích với nó.

Tuy nhiên, bản dịch bàn phím X chỉ hỗ trợ mã khóa lên tới 255 (xem câu trả lời này , đó là một hạn chế của giao thức X). Vì vậy, bạn không thể chuyển đổi chúng thành X keyyms. .

Nhưng từ những gì bạn đã cố gắng thực hiện, có vẻ như bạn muốn sắp xếp lại chúng updowncác phím, giống hệt với các phím mũi tên lên và xuống đã có sẵn như các phím khác trên bàn phím.

  1. Như đã đề cập trong câu trả lời đã được liên kết, để cho phép X ánh xạ lại mã khóa lớn hơn 255, ai đó đã tạo ra một biến thể vá của evdevtrình điều khiển X. Vì vậy, bạn cần phải biên dịch và cài đặt biến thể vá này, và sau đó tùy chọn event_key_remapsẽ được nhận ra. evdevTrình điều khiển tiêu chuẩn sẽ không được công nhận , vì vậy không có gì ngạc nhiên khi xorg.confmục nhập của bạn không làm gì cả.

    Đó có lẽ là phương pháp sạch nhất.

  2. Trong quá trình tiếp quản toàn bộ Linux, systemdgiờ đây rõ ràng cũng có cơ sở dữ liệu phần cứng riêng và có thể ghi đè lên ánh xạ bàn phím. Tôi không thực sự chắc chắn về mức độ của hạt nhân này đang hoạt động, vì vậy tôi không biết liệu nó có giúp ích gì không, và định dạng cho "cơ sở dữ liệu phần cứng" dường như không được ghi lại. Vì vậy, tôi không thể giúp bạn nhiều về mặt này.

    Tuy nhiên, định dạng phù hợp dường như đã thay đổi , vì vậy có thể bạn sẽ gặp nhiều may mắn hơn nếu bao gồm số xe buýt, như được mô tả.

    Chỉnh sửa : Đọc nguồn kernel, tôi thấy rằng mỗi thiết bị đầu vào có scancode riêng (phụ thuộc vào phần cứng, tối đa 8 byte, mặc dù ở nhiều nơi chỉ có 1/2/4 byte trong kernel được chuyển) sang mã khóa (những gì bạn thấy với evtest) ánh xạ dịch. Các giá trị mã lớn có thể được đặt và nhận với EVIOCGKEYCODE_V2EVIOCSKEYCODE_V2ioctls trên thiết bị. Một công cụ chung tương tự xmodmaphoặc loadkeys/dumpkeysdường như không tồn tại, mặc dù một số công cụ liên quan đến máy thu IR dường như sử dụng các ioctls này. Nếu đó là cách systemdcơ sở dữ liệu hoạt động, một sự thay thế linh hoạt hơn sẽ là sử dụng một công cụ như vậy trong một udevquy tắc (cũng đơn giản hơn để thử nghiệm). Tôi đã viết một chương trình C nhanh để kết xuất ánh xạ, có lẽ tôi nên đưa nó lên github ...

  3. Về nguyên tắc, bạn đã có thể xử lý các sự kiện bằng các chương trình hoặc tập lệnh của riêng bạn và làm bất cứ điều gì bạn muốn làm. Ví dụ: chạy evtesttrên nó, phân tích đầu ra bằng tập lệnh bash và gọi xdotoolbằng các lần nhấn nút 4 hoặc 5 để có được hiệu ứng tương tự như một con lăn chuột cho các nút trượt của bạn. V.v. (Có một câu hỏi stackexchange với một kịch bản thô sơ cho một mục đích tương tự, nhưng tôi không thể tìm thấy nó ngay bây giờ. Nếu cần, tôi có thể tìm kiếm thêm).

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.