Xorg

在沒有 Xmodmap 的情況下將超級鍵映射到控制項

  • October 16, 2014

我一直在嘗試在 Macbook 上的 X 中切換我的超級鍵和控制鍵,並且成功了一半。如果可能的話,我想避免創建自定義 .Xmodmap,因為每次載入自定義地圖時都會彈出一個臨時的 100% cpu 錯誤(更不用說我遇到的一般使用 xmodmap 的各種警告) .

經過一番探勘,我最終將 Option “XkbOptions” “altwin:ctrl_win” 放在了我的 01-keyboard-layout.conf 文件中,這讓我走到了一半:例如,left 命令現在映射到 133 Control_L。但是,控制鍵保持不變。左控制,例如仍然映射到 37 Control_L。

瀏覽 evdev.lst (和一堆Google搜尋)發現沒有相關的 XkbOption 將控制鍵變成超級,現在我很卡住。

我現在正在閱讀 Doug Palmer 的An Unreliable Guide to XKB Configuration的瘋狂之處,但正如他所描述的那樣,它是地獄的墮落。

任何曾經嘗試過這種切換並知道完成它的確切規則/符號/鍵盤映射的人,您的幫助都會很棒。

謝謝!

好的,我終於讓它工作了。

首先,這兩個資源對於任何想要深入研究這個爛攤子的人來說都是驚人的:

http://madduck.net/docs/extending-xkb/ & http://www.charvolant.org/~doug/xkb/html/index.html

對於專門嘗試進行此切換的任何人,這就是我所做的:

  1. 在 /usr/share/X11/xkb/symbols 中為您的新映射創建一個文件 2) 將其放入其中:
// Control is SWAPPED with Win-keys 
partial modifier_keys
xkb_symbols "cmd_n_ctrl" {
   key <LWIN> {        [       Control_L               ]       };
   key <RWIN> {        [       Control_R               ]       };
   key <LCTL> {       [       Super_L         ]       };
   modifier_map Control { <LWIN>, <RWIN> };
   modifier_map Mod4 { <LCTL> };
};

3:編輯 /usr/share/X11/xkb/rules 中的 evdev 以包括:

altwin2:cmd_n_ctrl               =       +altwin2(cmd_n_ctrl)

(在選項 = 符號部分下)

4:將您的新選項添加到 evdev.lst(相同的目錄):

altwin2:cmd_n_ctrl

(在選項部分下)

5:現在編輯您的 01-Keyboard conf 文件以包含您創建的新選項。我的看起來像這樣:

Section "InputClass"
       Identifier "keyboard-layout"
       Driver "evdev"
       MatchIsKeyboard "yes"
       Option "XkbLayout" "us, ru, ca, fr"
       Option "XkbOptions" "altwin2:cmd_n_ctrl"
EndSection

6:重新啟動,你應該很好去。

上述資源可以更好地解釋所有這些,或者您可能遇到的任何障礙。可能有更好的方法來做到這一點(可能不會改變 /usr/share 的內容),但到目前為止,這就是讓我開始並執行的原因。

希望能幫助困在這個地方的其他人!

以下解決方案比提問者的解決方案更簡單。(在戴爾上執行的 Ubuntu 14.04 上測試。)

1)在文件/usr/share/X11/xkb/keycodes/evdev中,交換要交換的鍵的掃描碼(數字)。注意:您的硬體可能針對不同的密鑰程式碼文件而不是evdev.

2)執行sudo rm /var/lib/xkb/*.xkm以清除xkb記憶體,然後重新啟動。

引用自:https://unix.stackexchange.com/questions/60235