xf86-input-evdev から xf86-input-libinput に切り替えたところ、キーボードレイアウトが壊れてしまいました。矢印キーと右 Alt、コンテキストメニューキー、Delete キー、テンキーの Enter キーなどがすべて奇妙に置き換わってしまいました。libinput debug-events
ただし、正しいキーが表示されました。確認したところ、Xorg.conf
、私は次の行に気づきました:
Option "XkbRules" "base"
に変更した後evdev
、キーボードは正常に動作しました。
私は「XKB 構成ガイド」では、さまざまなルールについて言及していますが、それらの違いについての詳細は説明されていません。
2 つのレイアウトの違いは何ですか? libinput でも evdev ルールを使用しても大丈夫ですか?
答え1
要約:Linux では、ルールを使用する必要がありますevdev
。リンク先の XKB ガイドに記載されているとおりです。
Linuxシステムでは、エヴデヴルールは最も一般的に使用されていますが、他のシステムではベースルールが使用されます。
この違いは主に歴史的なものです。は evdev
現代のLinuxカーネル入力サブシステムであり、XKBが最初に書かれたときには存在していませんでした。xキーボード設定evdev
では、 と の両方のbase
ルールが (ほとんど) 同じテンプレートから生成されていることがわかります。diff
ただし、システムの XKB データベースで生成されたファイルを と比較してください。ルールが特定のキーボード モデルのシンボルbase
をロードするエントリが多数あるのに対し、ルールはモデル固有のエントリのほとんどを削除し、より一般化されたセットをロードします。inet
evdev
/usr/share/X11/xkb/rules/base:
[...]
! model = symbols
a4techKB21 = +inet(media_nav_common)
asus_laptop = +inet(media_common)
acer_tm_800 = +inet(acer_laptop)
benqx730 = +inet(benqx)
btc9116u = +inet(btc9019u)
chromebook = +inet(chromebook)
dellsk8125 = +inet(dell)
// and about 50 more lines
// generated from xkeyboard-config/rules/base.m_s.part
/usr/share/X11/xkb/rules/evdev
[...]
! model = symbols
$evdevkbds = +inet(evdev)+inet(%m)
chromebook = +inet(evdev)+inet(chromebook)
applealu_jis = +inet(evdev)+macintosh_vndr/jp(alujiskeys)
* = +inet(evdev)
// ...that's all.
// generated from xkeyboard-config/rules/evdev.m_s.part
いや、実際は、これはルールのモデルからシンボルへのセクション全体ですevdev
が、base
バージョンは 60 行ほどです。evdev.m_s.part
ファイルは、ルールのそのセクションのソース テンプレートです。これは、モデルからシンボルへのマッピングです (!model = symbol
そのセクションの先頭の行。したがって、m_s
ファイル名に が含まれています)。ルールの evdev 固有の他のセクションはevdev.m_k.part
、ファイルから取得されるモデルからキーコードへのマッピング (!model = keycodes
ルールの セクション) であり、そこでの違いは似ています。
詳細については、キーコードそしてシンボルこれらのルールによって参照されるファイル(特に/usr/share/X11/xkb/keycodes/evdev
と/usr/share/X11/xkb/symbols/inet
)。XKBルールフォーマットのこの記事。