试图了解发生了什么

试图了解发生了什么

我正在尝试键盘设置,为了方便起见,我想将 Windows 键重新映射到选项卡。所以我尝试了(133是我键盘上的左超级键)

xmodmap -e "keycode 133 = Tab Super_L"

但这不起作用,因为按 windows 键仍然会弹出“windows”菜单,并且不会插入任何选项卡。同一主题的一些不同变体也不起作用,例如使选项卡发生在 shift+super 上。

我正在使用 cinnamon(从 ubuntu 16.04 上的 ppa 安装)和 lightdm,我想象 windows/super 键在较低级别被拦截,而 xmodmap 无法完全处理...有什么方法可以实现我想要的吗?欢迎不涉及 xmodmap 的答案!

(我距离专家还很远,所以也许有一个非常简单的解决方案......)

答案1

试图了解发生了什么

如果我xmodmap不带参数输入(以获取修饰符列表),我会得到:

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)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        ISO_Level5_Shift (0x69)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

重要的部分是为了mod4.就是那个地方Super_L

现在,我运行 : xmodmap -e "keycode 133 = Tab Super_L" && xmodmap | grep mod4,得到:

mod4        Tab (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)

mod4行已更改并添加Tab。这就是为什么你的钥匙133仍然可以打开窗口菜单。

顺便说一下,我正在尝试这个,I3WM所以结果可能会有点不同。
例如,如果我按133终端或文本编辑器上的键,它会写入一个制表符并成为修饰符。

我还注意到我没有不同的行为,Shift因为密钥的类型是ONE_LEVEL.

您还可以运行xev | grep key看看某些组合键会发生什么情况。

解决方案

xmodmap也告诉你每个修饰符不能有超过 4 个键,因此解决方案(迄今为止唯一对我有用的解决方案)是牺牲一个你不使用/没有的键,使其成为Super_L.

如果您使用QWERTY,您可以修改位于的布局/usr/share/X11/xkb/symbols/us(如果您使用其他布局,它通常是同一文件夹的另一个文件),并写入:

key.type[Group1] = "TWO_LEVEL";
key <MENU>{[Super_L]}; // ONE or TWO level, assuming MENU key isn't used
key <LWIN>{[ Tab, Super_L]}; // should be TWO_LEVEL
key.type[Group1] = "ONE_LEVEL";

而不是(可能是文件的第 14 行)

 key <LWIN>{[Super_L]};

然后,使用 更新您的键盘布局setxkbmap us && xmodmap | grep mod4
你会得到类似的东西:

mod4        Super_R (0x86),  Super_L (0x87),  Super_L (0xce),  Hyper_L (0xcf)

如果你仍然得到Tab,你可能应该牺牲另一把钥匙。请注意,0x85是 的十六进制值133,这意味着该键不是直接键,但如果按下,mod4它仍然可以像窗口键一样运行。Shift

相关内容