基本規則和 evdev xkb 規則有什麼不同?

基本規則和 evdev xkb 規則有什麼不同?

我剛剛從 xf86-input-evdev 切換到 xf86-input-libinput,它破壞了我的鍵盤佈局 - 箭頭鍵與右 alt、上下文選單鍵、刪除鍵、數字鍵盤 Enter 等都奇怪地交換了。libinput debug-events不過,顯示了正確的密鑰。檢查後Xorg.conf,我注意到以下行:

Option "XkbRules" "base"

更改為 後evdev,鍵盤工作正常。

我發現 ”XKB配置指南」其中提到了各種規則,但沒有詳細說明它們的差異。

這兩種佈局有什麼差別?即使使用 libinput 也可以使用 evdev 規則嗎?

答案1

長話短說:在 Linux 上,您應該使用這些evdev規則。正如 XKB 指南中所述,您連結:

在 Linux 系統上,埃夫德夫規則是最常用的,在其他系統上根據使用規則。


這種差異很大程度上是歷史性的。 evdev是現代 Linux 核心輸入子系統,在首次編寫 XKB 時並不存在。如果你查看原始碼x鍵盤配置,您會發現evdevbase規則都是從(大部分)相同的範本產生的。不過,請將系統 XKB 資料庫中產生的檔案與 進行比較diff。您將看到許多條目,其中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 規則格式的這篇文章

相關內容