Xの「サブレイヤー」のキーボード再マッピング

Xの「サブレイヤー」のキーボード再マッピング

キーマッピングはあまり明確に定義されていませんが、OSIモデルと同様のプロセスに従います。私は現在私が望むものよりも高いレベルで再マッピングしています。明らかに、レイヤー1は物理キーボードに対応し、レイヤー7はアプリケーションに対応しますが、他のレイヤーがどこに配置されているのかわかりません.

プログラム可能な専用の物理キーボードがあるデスクトップであれば問題ありませんが、残念ながらこれはノートブックなので、内蔵キーボードを使用するときに再マッピングを維持する必要があります。

FWIW、次のキーペアを変更しています: [Tilde/Esc]、[Caps/LCtrl]、[Back{space,slash}]。私もDvorakを使用していますが、オペレーティングシステムでは標準的な方法で構成されています。

私は現在Xを変更するために/usr/share/X11/xkb/keycodes/evdevを修正しています(そしてコンソール用のカスタムレイアウトファイルを作成しますが、ここでは関係ありません)。 「レイヤースタック」のどこにいるのかよくわかりません。

質問:私のキーマップは、Web VNCクライアントを使用するProxmoxコンソールセッションに変換されません。 (レイアウトも機能しませんが、期待されています。)問題は、VNCクライアントがまだevdevリマッピングを適用していないサブレイヤーにキーボードを接続していることです。

Windowsでは、デフォルトで「レイヤ3」のように見えるレジストリのスキャンコードマップを生成するために、KeyTweakというユーティリティを使用します。私がプレイしたゲームにはキーボードが「tier 2」にかかっているようですが、ほとんどのゲームで入力がほとんどないため、問題になることはほとんどありません。

要約すると、私が想像しているOSIキーボードモデルにevdevがどこに適しているかはわかりませんが、下位層から再マッピングするのはどうですか?何らかの理由でリマップを置き換える必要がないため、この変更は本質的に永続的になる可能性があります。 BIOSでこれを行うことができる場合は、そうします。

ベストアンサー1

答えはudevであることがわかった。基本的に従いましたこの投稿しかし、ポイントは次のとおりです。

  • インストールするevtest
  • 実行しevtestて再マップするキーを押して確認します。両方コードとキーコードをスキャンしてください。
  • /etc/udev/hwdb.d/70-keyremap.hwdb次の名前の新しいファイルを作成します。
    • この番号がファイルの順序であると仮定していますが、それに基づいて既存のファイルがないため、前提条件が何であるかわからず、実際よりも高い番号が必要になる場合があります。 。実際、hwdb.dTumbleweedのディレクトリは私には存在しなかったので作成する必要がありましたが、それでも機能します。
  • ランニングsystemd-hwdb update
  • 再起動

_

# This is from the brokkr.net post I linked above
# Format can be found on [https://wiki.archlinux.org/title/Map_scancodes_to_keycodes].

$ cat 70-keymap.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
 KEYBOARD_KEY_01=41     # Remap Tilde to Esc
 KEYBOARD_KEY_29=01     # Remap Esc to Tilde (evtest showed "1" but when I put that without the leading zero, it was interpreted as the literal [1] key.)
 KEYBOARD_KEY_3A=29     # Remap Caps to LCtrl
 KEYBOARD_KEY_1D=58     # Remap LCtrl to Caps
 KEYBOARD_KEY_0E=43     # Remap Backspace to Backslash
 KEYBOARD_KEY_2B=14     # Remap Backslash to Backspace

修正する: 上記の方法は私のラップトップでうまく機能しますが、接続すると、外部キーボードはまだ主キーマップを使用します。内部キーボードはPS / 2を使用して通信し、PS / 2はまだATスキャンコード(atkbdデバイス文字列から)を使用しますが、USBはまったく異なるためです。結局のところ、USBボードからスキャンコードを取得して別のマップを作成するためにevtestを再実行する必要がありました。私が生成したファイルは次のとおりです。

evdev:atkbd:dmi:*
 KEYBOARD_KEY_01=41
 KEYBOARD_KEY_29=01
 KEYBOARD_KEY_3A=29
 KEYBOARD_KEY_1D=58
 KEYBOARD_KEY_0E=43
 KEYBOARD_KEY_2B=14

evdev:input:b0003v*
 KEYBOARD_KEY_70029=41
 KEYBOARD_KEY_70035=01
 KEYBOARD_KEY_70039=29
 KEYBOARD_KEY_700e0=58
 KEYBOARD_KEY_7002a=43
 KEYBOARD_KEY_70031=14

おすすめ記事