我想使用正确的 ALT 键作为“mod4”(最值得注意的是,默认情况下,“awesome”窗口管理器使用 mod4 作为大多数 WM 命令的修饰符,我非常喜欢这个想法)。
但是我有一个问题:一旦我添加:
xmodmap -e 'add mod4 = Alt_R'
那么我就不能使用 CTRL+ALT+F2 从 X 切换到文本控制台。
(请注意,我总是使用左 ALT 来执行此操作,而不是右 ALT:实际上在将右 ALT 分配给 mod4 之前,我从未使用过该键)
这确实是快捷方式/修饰符的问题,因为我仍然可以通过使用(例如)从 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+...作为很棒的快捷方式
CTRL+ALT+F{1,9} 切换到不同的 VT
当然,现在我可以使用“chvt”切换到文本控制台,但如果我的 X 卡住了,那效果就不那么好了。
我总是喜欢能够切换到文本控制台,比如说,如果 X 卡住了就杀死它(从 slackware 的早期就开始这么做了)。
答案1
当第一次尝试使用类似的窗口管理器(xwem、ratpoison)时,我首先尝试遵循涉及xmodmap
获取窗口管理器的修改键的设置说明,但后来我觉得xmodmap
在我的系统中使用会导致一些混乱,因为在我的系统(一个 ALTLinux 发行版)中,注意力始终集中在通过 XKB 进行多语言键盘配置,而不是通过xmodmap
.
因此,我找到了一个 XKB 选项将我想要的密钥标记为“Hyper”,然后在 xwem 或ratpoison 的配置中使用“Hyper”修饰符。
就我而言,选项setxkbmap
是:
-option altwin:hyper_win
这是我在将其添加到我的设置时保存的评论:
xemacs-xwem 使用 Hyper,所以我找到了这个预定义的 XKB 映射(在 xkb/symbols/altwin 中),它使用 WIN 键。
也许稍后我会为我制作另一个 XKB 地图,例如,使用正确的 Control 作为 Hyper(这将迫使我的手使用正确的 Control - 现在我的手只是忽略它)。
我认为这是通过 XKB 而不是通过 xmodmap (如 XWEM 文档中所述)为自己获取超级密钥的更干净的方法,因为:
修改键的 xmodmap 配置似乎不太好,因为它迫使人们表达自己的意图:必须说一些关于任意编号的修改位的事情,但我不想考虑这些技术问题:我只需要一个“超” 修饰符,而不是对内部进行一些晦涩的操作!在 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 };
};