使用 Alt_R 作为 mod4 后无法再切换到控制台

Ced*_*tin 5 xorg keyboard-shortcuts xmodmap console keyboard-layout

我想使用正确的 ALT 键作为“mod4”(最值得注意的是,默认情况下,“awesome”窗口管理器使用 mod4 作为大多数 WM 命令的修饰符,我非常喜欢这个想法)。

但是我有一个问题:一旦我添加:

xmodmap -e 'add mod4 = Alt_R'
Run Code Online (Sandbox Code Playgroud)

那么我不能使用,比如说,CTRL+ALT+F2 从 X 切换到文本控制台。

(请注意,我总是使用左 ALT 来执行此操作,而不是右 ALT:实际上在将右 ALT 分配给 mod4 之前我从未使用过该键)

这确实是快捷方式/修饰符的问题,因为我仍然可以使用chvt命令从 X 切换到文本控制台。例如,以下始终工作正常:

chvt 1
Run Code Online (Sandbox Code Playgroud)

一旦我清除了 mod4:

xmodmap -e 'clear mod4'
Run Code Online (Sandbox Code Playgroud)

我可以使用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)
Run Code Online (Sandbox Code Playgroud)

再次清除那个 mod4,我就可以切换到文本控制台了……

我对使用其他设置不感兴趣:

  • 正确的 ALT 作为 mod4

  • mod4+... 作为很棒的快捷方式

  • CTRL+ALT+F{1,9} 切换到不同的VT

现在当然我可以使用“chvt”来切换到文本控制台,但是如果我的 X 卡住了,那将不会那么好用。

我总是喜欢有可能切换到文本控制台,比如说,如果 X 卡住了,就杀死它(从 slackware 的早期就开始这样做了)。

imz*_*hev 4

当第一次尝试使用类似的窗口管理器(xwem、ratpoison)时,我首先尝试遵循涉及xmodmap获取窗口管理器的修改键的设置说明,但后来我觉得xmodmap在我的系统中使用会导致一些混乱,因为在我的系统(一个 ALTLinux 发行版)中,注意力始终集中在通过 XKB 进行多语言键盘配置,而不是通过xmodmap.

因此,我找到了一个 XKB 选项将我想要的密钥标记为“Hyper”,然后在 xwem 或ratpoison 的配置中使用“Hyper”修饰符。

就我而言,选项是setxkbmap

 -option altwin:hyper_win
Run Code Online (Sandbox Code Playgroud)

这是我在将其添加到我的设置时保存的评论:

xemacs-xwem 使用 Hyper,所以我找到了这个预定义的 XKB 映射(在 xkb/symbols/altwin 中),它使用 WIN 键。

也许稍后我会为我制作另一个 XKB 地图,例如,使用正确的 Control 作为 Hyper(这将迫使我的手使用正确的 Control - 现在我的手只是忽略它)。

我认为这是通过 XKB 而不是通过 xmodmap (如 XWEM 文档中所述)为自己获取超级密钥的更干净的方法,因为:

  1. 修改键的 xmodmap 配置似乎不太好,因为它迫使人们表达自己的意图:必须说一些关于任意编号的修改位的事情,但我不想考虑这些技术问题:我只需要一个“Hyper “ 修饰符,而不是对内部进行一些晦涩的操作!在 xmodmap 中,我需要给出 2 甚至 3 个晦涩的语句才能实现结果,尽管从逻辑上讲这是一个单一的愿望和操作。(如果将 Control_R 映射到 modN,一个 xmodmap 语句是不够的,请参见 XEmacs 的警告(FIXME:插入!);存在一些技术限制。)

  2. 有人说 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 };
};
Run Code Online (Sandbox Code Playgroud)