使用 Alt_R 作為 mod4 後無法再切換到控制台
我想將正確的 ALT 鍵用作“mod4”(最值得注意的是,預設情況下,“真棒”視窗管理器使用 mod4 作為大多數 WM 命令的修飾符,我非常喜歡這個想法)。
但是我有一個問題:只要我添加:
xmodmap -e 'add mod4 = Alt_R'
那麼我不能使用 CTRL+ALT+F2 從 X 切換到文本控制台。
(請注意,我總是使用左 ALT 來執行此操作,而不是右 ALT:實際上在將右 ALT 分配給 mod4 之前,我從未使用過該鍵)
快捷方式 / 修飾符確實有問題,因為我仍然可以使用chvt命令從 X 切換到文本控制台。例如,以下始終可以正常工作:
chvt 1
一旦我清除 mod4:
xmodmap -e 'clear mod4'
我可以使用
CTRL+ALT+F2
(再次左 ALT)切換到我的文本控制台。但當然,我沒有得到很好的預設 mod4+…“真棒”快捷方式。
所以基本上我可以將正確的 ALT 用作 mod4 並且工作得很好*,或者*我可以清除 mod4(不將正確的 ALT 分配給任何修飾符)並能夠使用 CTRL+ALT+F2 切換到文本控制台。
但我不能兩者都做。
你們中有人知道為什麼將右 ALT 配置為 mod4 會阻止 CTRL+左 ALT+F2 切換到文本控制台嗎?
這是完整的xmodmap(當 CTRL+左 ALT+F2不起作用時):
shift Shift_L (0x32), Shift_R (0x3e) lock control Control_L (0x25), Control_L (0x42), Control_R (0x69) mod1 Alt_L (0x40), Alt_L (0xcc), Metal_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Alt_R (0x6c) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
再次清除那個mod4,我可以切換到文本控制台了……
我對使用其他設置不感興趣:
- 右 ALT 作為 mod4
- mod4+… 作為 awesome 的快捷方式
- CTRL+ALT+F{1,9} 切換到不同的 VT
現在我當然可以使用“chvt”切換到文本控制台,但是如果我的 X 卡住了,那它就不會那麼好用了。
我總是喜歡有可能切換到文本控制台,例如,如果 X 卡住了,就殺死它(從 slackware 的早期開始就一直這樣做)。
第一次嘗試使用類似的視窗管理器(xwem,ratpoison)時,我首先也嘗試按照設置說明
xmodmap
獲取視窗管理器的修改鍵,但後來我覺得xmodmap
在我的系統中使用會導致一些混亂,因為在我的系統(一個 ALTLinux 發行版)中,一直關注通過 XKB 配置多語言鍵盤,而不是通過xmodmap
.所以,我找到了一個 XKB 選項來將我想要的鍵標記為“Hyper”,然後在 xwem 或 ratpoison 的配置中使用“Hyper”修飾符。
就我而言,選項
setxkbmap
是:-option altwin:hyper_win
這是我在將其添加到我的設置時保存的評論:
xemacs-xwem 使用 Hyper,所以我找到了這個使用 WIN 鍵的預定義 XKB 映射(在 xkb/symbols/altwin 中)。
也許稍後我會為我製作另一個 XKB 映射,例如,使用正確的 Control 作為 Hyper(這將迫使我的手使用正確的 Control——現在我的手只是忽略它)。
我認為通過 XKB 而不是通過 xmodmap(如 XWEM 文件中所述)獲得 Hyper 密鑰是一種更乾淨的方法,因為:
- 修飾鍵的 xmodmap 配置似乎並不好,因為它迫使人們表達自己的意圖:人們必須對任意編號的修飾位說些什麼,但我不想考慮這些技術性的事情:我只需要一個*“Hyper “* 修飾符,而不是一些晦澀的內部操作!在 xmodmap 中,我需要給出 2 甚至 3 個晦澀的語句來實現結果,儘管從邏輯上講,這是一個單一的願望和操作。(如果將 Control_R 映射到 modN,則一個 xmodmap 語句是不夠的,參見 XEmacs 的警告(FIXME:插入!);存在一些技術限制。)
- 有人說 XKB 和 xmodmap 不能很好地配合使用,因此如果混合使用它們,並非所有 X 程序都能很好地連貫地執行(我必須在此處提供連結,FIXME)。
/usr/share/X11/xkb/symbols/altwin
如果有人感興趣,這是來自 的相關定義:partial modifier_keys xkb_symbols "hyper_win" { key <LWIN> { [ Hyper_L ] }; key <RWIN> { [ Hyper_R ] }; modifier_map Mod4 { Hyper_L, Hyper_R }; };