xkb 将键盘级别 3 选择器设置为 ctrl+alt

Vla*_*lad 8 linux keyboard xfce xkb

标题说明了一切:我有兴趣模仿 Windows 行为,其中Left Ctrl+Left Alt充当第 3 级选择器。这是对我来说比较重要的,因为,作为一个程序员,我的键盘布局,如重要标志{[]}只能按访问Right Alt+ Key,只用一只手,这是非常不舒服。目前,我将两个Alt键都用作 3 级选择器,但这会产生一些不良后果,因为我无法再输入某些快捷方式(例如 Firefox 中的 Home)。

我在 openSuse 13.1 上,使用 XFCE 作为桌面环境。这个问题已经被问过几次了,但不幸的是,其中任何一个都没有提供答案,而且关于 xkb 的文档非常少。

apl*_*ice 0

下面的解决方案是野蛮的,但它有效(只要您对 Level3 Latch 而不是 Level3 Shift \xe2\x80\x94 感到满意,区别在于后者必须同时按下所有键,对于前者,您首先按LeftCtrl+LeftAlt,释放它,然后再按要切换的键)并且不需要 root。

\n\n
setxkbmap -option grp:lctrl_lalt_toggle\n\nxmodmap -e \'keycode  37 = Control_L ISO_Level3_Latch\'\nxmodmap -e \'keycode  64 = Alt_L ISO_Level3_Latch\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

其工作原理的说明:

\n\n

xkb grp:lctrl_lalt_toggle 选项可以LeftCtrl切换LeftAlt到 level2,反之亦然(请参阅:/usr/share/X11/xkb/symbols/group)。LeftCtrl它还使和 的level2 转变LeftAlt为 ISO_Next_Group,这是不希望的,因为我们希望它是 ISO_Level3_Latch,因此我们使用 xmodmap 将 和 的 level2 更改为 ISO_Level3_Latch LeftCtrlLeftAlt同时保持 level1 为 Control_L 和 Alt_L)。键码(37 和 64)可以通过检查输出xmodmap -pke或使用xev来找到键码(37 和 64) 。

\n\n

如果我们只应用 xmodmap 重新定义(不setxkbmap首先使用),那么负责 level2 移位的键将是Shift,因为它几乎适用于所有键,所以Shift+LeftCtrlShift+ LeftAlt(但不是LeftCtrl+LeftAlt)都将成为 Level3 锁存器。

\n\n

为什么我们必须使用 Level3 Latch 而不是 Level3 Shift?

\n\n

如果您要使用 ISO_Level3_Shift 而不是 ISO_Level3_Latch,则必须同时按LeftCtrl+ LeftAlt+YourDesiredKey才能发生 level3 转变。不幸的是,LeftCtrl并且LeftAlt保留修饰符,因此除了正确移动 YourDesiredKey 之外,它还会被 Alt 或 Ctrl 之一“修改”(取决于您首先按下的键)。有了闩锁,就不会有这个问题了。

\n