Keyboard

如何為 X11 的 Alt 鍵分配另一個修飾符?

  • February 21, 2013

目的:

我想將 Alt 分配給 CapsLock 鍵,將 Meta 分配給 Alt 鍵。但是這樣一來,Alt-key 將不再被辨識為 Alt,CapsLock-key 將不再被辨識為 CapsLock。

openSUSE 11.4

之前:

openSUSE 11.1——因為我是我電腦的唯一使用者,所以我“簡單地”編輯了 /usr/share/X11/xkb/keycodes/xfree86 文件,它沒有問題。鍵在最低級別連接到它們的符號。

問題:

  1. xkb

我創建了波蘭佈局(pl_ext)的變體,它(用於測試)由以下條目組成:

key <CAPS> { [ Alt_L ] };
modifier_map Mod1 { Alt_L, Alt_R };

然而,這根本沒有任何作用,xev 中的 CapsLock 鍵被辨識(符號)為 Alt_L,但是當我按下 CapsLock 鍵時,它的行為就像 CapsLock(例如,假設您在菜單中有文件,Alt+F 應該打開這個菜單,它不會)。

**問題:**如何定義一個佈局文件將CapsLock-key設置為Alt,Alt-key設置為Meta?

**編輯:**這裡成功了一半!現在我有這樣的條目:

key <CAPS> { [ Alt_L ] };
modifier_map Mod1 { <CAPS> }; // this is a difference

這可以按需要工作。這不會:

key <LALT> { [ Meta_L ] } ;
key <RALT> { [ Meta_R ] } ;
modifier_map Mod5 { <LALT>,<RALT> };

Alt 鍵被 xev 辨識為 Meta,但我仍然可以使用 Alt+F 打開菜單、切換視窗,但我不應該這樣做。另一方面,我不能輸入任何民族字元,我應該輸入。 2. xfree86

但是現在這不起作用,我猜是讀取其他文件表而不是 xfree86。

**問題:**如何找出系統(X/Gnome)使用的是哪個鍵碼表文件?

**編輯:**對我來說最好的選擇——編輯鍵碼表——由 macias 的回答解決了! 3. xmodmap

這裡成功了一半。這部分按需要工作:

刪除 Lock = Caps_Lock 鍵符 Caps_Lock = Alt_L

現在,我有真正映射到 Alt 的 CapsLock 鍵。但是這個:

鍵符 Alt_L = Meta_L

……做奇怪的事情。xev 顯示 Alt 鍵映射到 Meta,但是當我按下 Alt+F(這應該映射到 Meta+F –> 什麼都不做)時,文件菜單被打開。更重要的是,當我按下 Alt+Tab 時,我得到了視窗切換器(我不應該 – Alt 現在是 Meta)。

**問題:**如何“刪除” Alt 鍵的舊行為?

**編輯:**這部分由Gilles 的回答解決

概括:

回答任何問題都會(希望)解決我的問題,但是我更喜歡完全使用 xkb,因為我可以將所有文件打包為 xkb 並在一個地方更改佈局。預先感謝您的任何幫助!

(這個答案僅關於 xmodmap。我確信可以使用 XKB 來做到這一點,我只是不知道怎麼做。)

修飾符和鍵符是獨立分配的。但是,如果您不始終如一地設置它們,您會得到奇怪的效果。我認為您所缺少的只是add將修飾符分配給的命令Meta_L,儘管您可能還需要清除並重新分配修飾鍵。您可以將Mod1and替換Mod2Mod3, Mod4and Mod5:它們是可以互換的,只要確保不要將一個用於兩個不同的目的。

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R

編輯鍵碼方法

我在波蘭語 Ubuntu 論壇上找到了答案。現在不是編輯“xfree86”文件而是“evdev”文件。通過這種方式,您可以進行適用於所有佈局的永久更改。

範例(根據 Gilles 請求)- 以 root 身份登錄,轉到

/usr/share/X11/xkb/keycodes

備份“evdev”文件,然後編輯它。根據您的喜好更改程式碼,例如在我的情況下:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

您可以通過執行命令“xev”找到程式碼,但您可以簡單地查看原始“evdev”文件。

註銷,登錄,享受您的新鍵盤:-)。

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