解释其工作原理:

解释其工作原理:

标题说明了一切:我有兴趣模仿 Windows 的行为,其中Left Ctrl+Left Alt充当第三级选择器。这对我来说相对重要,因为作为一名程序员,在我的键盘布局中,重要的符号(例如{、或 )[只能通过按+来访问,这在只用一只手的情况下非常不舒服。目前,我使用两个键作为三级选择器,但这会带来一些不必要的后果,因为我不再能够输入一些快捷方式(例如 Firefox 中的 Home)。]}Right AltKeyAlt

我在 openSuse 13.1 上,使用 XFCE 作为桌面环境。这个问题已经被问过几次了,但不幸的是没有一次给出答案,而且 xkb 上的文档也很少。

答案1

下面的解决方案虽然比较野蛮,但是却很有效(前提是,你对 Level3 Latch 比 Level3 Shift 满意 — — 区别在于,使用后者时,所有键必须同时按下,而使用前者时,你先按下LeftCtrl+ LeftAlt,松开它,然后再按下要切换的键),并且不需要 root 权限。

setxkbmap -option grp:lctrl_lalt_toggle

xmodmap -e 'keycode  37 = Control_L ISO_Level3_Latch'
xmodmap -e 'keycode  64 = Alt_L ISO_Level3_Latch'

解释其工作原理:

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

如果我们仅应用 xmodmap 重新定义(不setxkbmap首先使用),则负责 level2 移位的键将是Shift,就像几乎所有键一样,因此Shift+LeftCtrlShift+ LeftAlt(但不是LeftCtrl+ LeftAlt)都将成为 Level3 闩锁。

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

如果您使用 ISO_Level3_Shift 而不是 ISO_Level3_Latch,则必须同时按下LeftCtrl+ LeftAlt+YourDesiredKey才能进行 3 级移位。不幸的是,LeftCtrlLeftAlt仍然是修饰键,因此除了 YourDesiredKey 被正确移位外,它还会被 Alt 或 Ctrl 之一“修改”(取决于您先按哪个)。使用闩锁,您不会遇到这个问题。

相关内容