Chụp đầu vào phím từ thiết bị sự kiện và ánh xạ nó (chuyển đổi phím TouchPad không được ánh xạ)


10

Tôi có Lenovo IdeaPad Yoga 13 được cài đặt Ubuntu 13.10. Thiết bị có nút "Toggle TouchPad" trên bàn phím ( F5). Các F*nút của bàn phím bị đảo ngược (vì vậy để có được F5, tôi cần nhấn Fn+ F5F5thực sự là phím chuyển đổi).

Tôi đã phát hiện ra rằng nút này thực sự được đọc bằng bàn phím (chứ không phải là TouchPad như một số thiết bị nhất định) /dev/input/event3. Vì vậy, bằng cách sử dụng sudo input-events 3tôi đã có thể nhận ra rằng nút gửi mã quét 190:

Đầu ra của 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

Đầu ra của 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

Không có chương trình nào khác (như xev) dường như có thể đọc được ngoại trừ input-events. Có cách nào để ánh xạ nút này để làm cho nó chuyển đổi TouchPad trên máy tính xách tay của tôi không? Nếu vậy, làm thế nào tôi có thể làm như vậy?

Câu trả lời:


7

Hóa ra kernel đã nhặt nó lên, nhưng vẫn phàn nàn rằng nó không được công nhận.

Đối với bất kỳ ai khác có vấn đề này hoặc muốn lập bản đồ khóa mà HĐH không đọc được, hãy đọc tiếp.

Mở một thiết bị đầu cuối và chạy dmesg | grep -A 1 -i setkeycodes. Điều này sẽ cung cấp cho bạn nhiều mục như thế này:

[    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.

Điều chúng tôi quan tâm là giá trị thập lục phân sau "setkeycodes", trong trường hợp này là e03e. Nếu bạn có nhiều trong số này, bạn có thể chạy tail -f /var/log/kern.log. Khi bạn đã thực hiện xong, bạn có thể nhấn vào nút bạn đang tìm kiếm và điều này sẽ cung cấp cho bạn một dòng giống như trên và một lần nữa, chúng tôi chỉ cần giá trị thập lục phân. Hãy ghi chú điều này.

Bây giờ chạy xmodmap -pke | lessvà tìm ánh xạ thích hợp. Trong trường hợp của tôi, tôi cần ánh xạ cái này để chuyển bàn phím cảm ứng của mình, điều đó có nghĩa là tôi quan tâm đến dòng sau:

keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle

Nếu bạn không thể tìm thấy bất cứ điều gì bạn quan tâm, hãy đọc câu trả lời @Gilles, vì bạn cũng có thể xác định ánh xạ tùy chỉnh, sau đó đọc tiếp (nếu hạt nhân đọc nó, bạn sẽ không cần thêm nó vào xorg.conf. d)

Bây giờ tôi chạy lệnh sau : sudo setkeycodes [hexadecimal] [keycode], vì vậy trong trường hợp của tôi đã trở thành : setkeycodes e03e 199.

Bây giờ bạn có thể sử dụng dòng sau để kiểm tra xem nó có hoạt động không và / hoặc bạn có ánh xạ chính xác:

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

Khi bạn chạy lệnh này, bạn cần tập trung vào cửa sổ mới mở ( xev) và kiểm tra đầu ra của bàn điều khiển. Trong trường hợp của tôi, nó đọc như sau:

207 NoSymbol

Điều này rõ ràng là sai, vì tôi đã yêu cầu mã khóa 199, vì vậy nó được ánh xạ tới XF86TouchpadToggle. Tôi đã kiểm tra xmodmap -pkelại và nhận thấy rằng keycode 207nó thực sự được ánh xạ tới NoSymbolvà tôi nhận thấy rằng có chênh lệch bù là 8, vì vậy tôi đã thử lại setkeycodeslệnh, nhưng khóa được ánh xạ tới keycode 191.

sudo setkeycodes e03e 191

Điều này làm việc hoàn hảo.

EDIT - giải pháp tôi cung cấp để làm việc khi khởi động thì không. Tôi sẽ tìm ra điều này vào ngày mai và cập nhật câu trả lời này. Bây giờ tôi cho rằng bạn có thể chạy nó khi khởi động bằng tay.


1
Làm thế nào để làm cho nó vĩnh viễn theo cách tốt đẹp? (tức là sau khi thiết lập lại / khởi động lại)
vak

4

Nhìn từ vẻ ngoài của nó, thiết bị này là một bàn phím (được công nhận trong phần mềm là tách biệt với bàn phím lõi lõi củalen) nhưng máy chủ X không nghe.

Hãy thử thêm một phần đầu vào bên dưới/etc/X11/xorg.conf.d . Đó là, tạo một thư mục /etc/X11/xorg.conf.dnếu nó chưa tồn tại và tạo một tệp extra-keyboard-buttonstrong thư mục đó có chứa

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

Tôi không chắc chắn về MatchProductdòng đó ; nếu nó không hoạt động, hãy thử nghịch với các MatchXXXchỉ thị .

Khi tệp này được thiết lập chính xác, khi bạn khởi động máy chủ X, nó sẽ xử lý các sự kiện từ bàn phím này và bạn sẽ thấy các sự kiện trong xevvà ở nơi khác. Lưu ý mã khóa (Tôi không chắc mã khóa X11 có giống với mã khóa phần cứng trong trường hợp này không) và liên kết mã khóa với nó. Bạn có thể làm điều đó thông qua một tập tin được gọi .Xmodmaptrong thư mục nhà của bạn có chứa

keycode 190 = XF86_Launch5

Bây giờ bạn có thể xác định các phím tắt bằng cách sử dụng các phím này.

Để chuyển đổi bàn di chuột, sử dụng lệnh xinput. Chạy xinput listđể xem thiết bị đầu vào nào khả dụng và lưu ý tên của bàn di chuột của bạn (tôi sẽ gọi nó Touchpadbên dưới). Chạy xinput list-props Touchpadđể liệt kê các thuộc tính của nó; một trong số chúng nên được gọi là Thiết bị có khả năng kích hoạt với một số bên cạnh (ví dụ 135). Kịch bản sau đây sẽ chuyển đổi bàn di chuột:

#!/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"

Lưu cái này trong một tập tin ~/bin/toggle-touchpadvà làm cho nó có thể thực thi được ( chmod +x ~/bin/toggle-touchpad). Để liên kết nó với khóa, hãy cài đặt xbindkeys và định cấu hình nó để chạy tập lệnh của bạn bằng cách đặt các dòng sau vào ~/.xbindkeysrc:

"toggle-touchpad"
  XF86_Launch5

Cảm ơn câu trả lời. Thật không may, điều này đã không làm việc. Tôi đã làm cho nó hoạt động mặc dù, vì vậy hãy xem câu trả lời của riêng tôi! :)
Hosh Sadiq
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.