鍵盤硬重映射鍵?
我正在嘗試找到一種方法來強制重新映射鍵盤鍵。
我嘗試使用 xmodmap 和 setxkbmap,但它們不適用於一個特定的應用程序。此類命令適用於 X 上的其他普通視窗/應用程序。
我認為應用程序可能正在讀取鍵盤原始數據並忽略 X 輸入?
那麼,如何在不使用 xmodmap 和 setxkbmap 的情況下重新映射鍵?如果有可能使用某些軟體來完成。
我還嘗試了 xkeycaps、xkbcomp,但沒有嘗試 loadkeys,因為它在 X 上執行。
我發現在這裡我可以嘗試
setkeycodes
,“因為在分配核心鍵碼後,按鈕應該在 xorg 中工作”,但我也發現“你不能在 USB 鍵盤上使用 ‘setkeycodes’”,這就是我的情況(我有興趣以防萬一有人讓它在 ps2 上工作,因為我認為我可以使用適配器)。這似乎很有希望“將掃描碼映射到鍵碼”,但經過幾次測試後沒有任何變化,它們是:
我在 vt1 找到了鍵碼“36”(“j”鍵),在 vt1
showkey
找到了掃描碼“7e”(鍵盤“.”) vt1 與
showkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb keyboard:usb:v*p* keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr* KEYBOARD_KEY_7e=36 $udevadm hwdb --update #updates file: /lib/udev/hwdb.bin $udevadm trigger #should apply the changes but nothing happened $cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao KEYBOARD_KEY_7eleftmeta $#that cat on hwdb.bin did not change after the commands..
Obs.: 不適用於:
KEYBOARD_KEY_7e=j
一些更多的替代方法(通過@vinc17)來查找鍵:
evtest /dev/input/by-id/...
或
input-kbd 3
(將id 索引放在ls -l /dev/input/by-id/*
從ex.event3 中找到)PS.:*如果您有興趣測試自己,該應用程序的相關執行緒是: http ://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/我的問題有是相同的:一些鍵(KP_Decimal,DownArrow,UpArrow,RightArrow)被忽略,並認為所有具有相同的值“0x00”
首先找到需要重新映射的密鑰的掃描碼,例如使用
evtest
實用程序。MSC_SCAN
應該輸出如下一行(其中包含):Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068
然後是第二個給出目前密鑰程式碼。如果沒有
MSC_SCAN
輸出行,這是由於核心驅動程序錯誤,但仍然可以使用input-kbd
實用程序找到掃描碼;evtest
應該給出關鍵程式碼,以便在input-kbd
輸出中很容易找到相應的行(例如,使用grep
)。一旦確定了要重新映射的鍵的掃描碼,請創建一個文件,例如
/etc/udev/hwdb.d/98-custom-keyboard.hwdb
包含重新映射的文件。文件的開頭/lib/udev/hwdb.d/60-keyboard.hwdb
提供了一些資訊。就我而言(有效),我有:evdev:input:b0003v05ACp0221* KEYBOARD_KEY_70035=102nd # Left to z: backslash bar KEYBOARD_KEY_70064=grave # Left to 1: grave notsign KEYBOARD_KEY_70068=insert # F13: Insert
(在udev 220之前,我不得不
keyboard:usb:v05ACp0221*
用於第一行。)
evdev:
字元串必須位於行首。請注意,供應商和產品 ID 中的字母應為大寫字母。每個KEYBOARD_KEY_
設置之前都應該有一個空格(注意:沒有空格的行會給出錯誤消息,舊的 udev 版本會默默地忽略有兩個空格的行)。KEYBOARD_KEY_
後面是十六進制的掃描碼(就像兩者都evtest
給出的那樣input-kbd
)。有效值可以從evtest
輸出或input-kbd
輸出中獲得,甚至可以從/usr/include/linux/input.h
文件中獲得:例如,KEY_102ND
將給出102nd
(通過刪除KEY_
並轉換為小寫),我在上面使用過。保存文件後,鍵入:
udevadm hwdb --update
(重新)建構數據庫
/etc/udev/hwdb.bin
(您可以檢查其時間戳)。然後,udevadm trigger --sysname-match="event*"
將考慮新設置。您可以使用
evtest
.2014 年發布的 udev 中包含不完整/錯誤的資訊
/lib/udev/hwdb.d/60-keyboard.hwdb
,但您可以查看該文件的最新開發版本和/或我的錯誤報告和有關文件和間距問題的討論。如果這不起作用,則在臨時增加
udevd
with的日誌級別後可能會發現問題(有關詳細資訊,udevadm control
請參閱 udevadm(8) 手冊頁)。
udev
對於204 等舊版本,此方法應該仍然有效。