我正在尝试键盘设置,为了方便起见,我想将 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