在 i3 中绑定 alt 但不绑定 altgr

在 i3 中绑定 alt 但不绑定 altgr

我对 i3 中的大多数键绑定使用 Mod4,但我使用 Mod1:

bindsym Mod1+a workspace a
bindsym Mod1+b workspace b
bindsym Mod1+c workspace c
bindsym Mod1+d workspace d
...

然而,这会绑定 alt 和 altgr,这是不希望的,因为我使用 altgr+<letter> 来键入一些字符。

xev 显示 alt 是 Alt_L,而 altgr 是 Alt_R,但bindsym Alt_L+a不起作用

答案1

最终取决于什么xmodmap显示 mod1。例如,如果它显示Alt_LAlt_R位于同一修饰符上,则必须将后者移至另一个(5 个可用修饰符中)以避免冲突。

以下是一些给出示例的页面:

  • 使用 xmodmap 重新映射 Alt_R 禁用 VC 终端切换显示用户Alt_R从何处移动的示例模1模组4(并遇到了问题)。您应该在更改之前检查 xmodmap 的输出。
  • xmodmapArchLinux 上显示了操作修饰符的详细示例。到移动一把钥匙,你必须添加它到一个修饰符并且清除它来自另一个。

使用中的一个陷阱xmodmap是它并不总是知道按键符号的正确按键代码(例如Alt_R)。当我遇到这种情况时,我通常可以通过查看输出来解决它

xmodmap -pk

对于钥匙象征,然后在脚本中分配该键码。例如,在一台机器上xmodmap -pk显示

108         0xffea (Alt_R)  0x0000 (NoSymbol)       0xffea (Alt_R)

并使用这个脚本

keycode 108 = Alt_R
remove mod1 = Alt_R
add mod3 = Alt_R

改变输出:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

对此:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Alt_R (0x6c)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

(对于此特定机器,不需要解决方法)。

相关内容