多媒體鍵盤重新映射

多媒體鍵盤重新映射

我有一個 G7BTS 遙控器,它有鍵盤和多媒體按鈕。除了「確定」按鈕外,大多數按鈕都可以正常使用。

OK 按鈕的鍵碼為 353,表示 KEY_SELECT。但我的ubuntu 20.04不辨識。

以下是我所做的一些研究:

  1. sudo evtest

輸出:

/dev/input/event9:  G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
  1. grep "" /sys/class/input/event11/device/id/*

輸出:

/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300
  1. sudo evtest /dev/input/event11

輸出:

Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------
  1. /etc/udev/hwdb.d/60-keyboard.hwdb

我嘗試將“確定”按鈕重新映射為“輸入”。

60-keyboard.hwdb檔案內容:

# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

輸出:

KEYBOARD_KEY_c0041=enter

到目前為止,當我按下「確定」按鈕時,我仍然看不到 xev 中的任何輸出。

任何建議和幫助將不勝感激。

答案1

感謝大家。

我花了幾天時間尋找解決方案,終於找到了正確的方法。

參考

將掃描碼對應到鍵碼

背景

X 協定版本 11 僅支援單字節金鑰代碼。因此 255 以上的鍵碼將被忽略。 Ubuntu 20.04 LTS 到目前為止,仍然使用 X 協定版本 11。

我的 G7BTS 遠端鍵盤有一個「確定」按鈕。此按鈕的鍵碼為 353。

解決方案

簡而言之,解決方案是建立一個 hwdb 配置文件,用於將某些鍵重新映射到其他鍵。

烏德夫

udev 提供了一個名為 hwdb 的內建函數來維護 /etc/udev/hwdb.bin 中的硬體資料庫索引。這個資料庫是從位於目錄 /usr/lib/udev/hwdb.d/、/run/udev/hwdb.d/ 和 /etc/udev/hwdb.d/ 中擴展名為 .hwdb 的檔案編譯的。預設的掃描碼到鍵碼映射檔是 /usr/lib/udev/hwdb.d/60-keyboard.hwdb。

由 usb 核心模式別名識別的通用輸入裝置(也包括 USB 鍵盤):

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

其中 <bus_id>、<vendor_id> 和 <version_id> 是 4 位元十六進位大寫供應商、產品和版本 ID

如何找到上面那些id是關鍵

install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

另一個重要的事情是取得「確定」按鈕的掃描碼。

install evtest
sudo apt-get install evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:    Lid Switch
/dev/input/event1:    Sleep Button
/dev/input/event2:    Power Button
/dev/input/event3:    AT Translated Set 2 keyboard
/dev/input/event4:    SynPS/2 Synaptics TouchPad
/dev/input/event5:    TPPS/2 IBM TrackPoint
/dev/input/event6:    ThinkPad Extra Buttons
/dev/input/event7:    Video Bus
/dev/input/event8:    Integrated Camera: Integrated C
/dev/input/event9:    G7BTS Keyboard
/dev/input/event10:    G7BTS Mouse
/dev/input/event11:    G7BTS Consumer Control
/dev/input/event12:    G7BTS System Control
/dev/input/event13:    HDA Intel PCH Mic
/dev/input/event14:    HDA Intel PCH Dock Mic
/dev/input/event15:    HDA Intel PCH Headphone
/dev/input/event16:    HDA Intel PCH Dock Headphone
/dev/input/event17:    HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11:    HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19:    HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C

注意“/dev/input/event11”

sudo evtest /dev/input/event11

然後按下“確定”按鈕,輸出如下

Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------

注意“值c0041”。該值c0041是“OK”按鈕的掃描碼。

製作hwdb文件

現在,我們有了所需的 ID 和掃描碼。將它們放入上面的「USB 核心模式識別的通用輸入裝置(也是 USB 鍵盤)」中,最終我們得到如下設定檔 G7BTS.hwdb:

evdev:input:b0005v045Ep0041e0300*
 KEYBOARD_KEY_c0041=enter

在上下文中,“確定”按鈕映射為“輸入”鍵。您可以將其映射到您想要的任何鍵。

將文件放到目的地

sudo mv G7BTS.hwdb /etc/udev/hwdb.d/

更新

sudo udevadm hwdb --update
sudo udevadm trigger --verbose 

測試

sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'

結果是

KEYBOARD_KEY_c0041=enter

結束

這就是重新映射鍵的所有步驟。這些重新映射在重新啟動後仍然有效。

答案2

我使用來自的信息在 Ubuntu 20.04 中使用了一個外部鍵盤https://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/

  1. 用於sudo evtest查找有關鍵盤的信息,例如:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
  1. 用於sudo evemu-describe尋找鍵盤的屬性,包括前導零。在輸出中您可以找到類似以下內容:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
  1. 像您一樣建立 .hwdb 文件,但是包括所有領先的 000, 和將任何十六進位符號置於大寫喜歡:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*

  1. 您不必重新啟動系統,只需執行以下操作:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. 您可以使用以下命令檢查鍵盤是否已正確映射$ udevadm info /dev/input/event20(將 event20 替換為鍵盤的事件)

相關內容