fun*_*ute 6 keyboard x11 xmodmap xkb
我正在玩键盘设置,为了方便起见,我想将我的 Windows 键重新映射到选项卡。所以我尝试了(133是我键盘上的左超级键)
xmodmap -e "keycode 133 = Tab Super_L"
但这不起作用,因为按 windows 键仍然会显示“windows”菜单,并且没有插入选项卡。同一主题的一些不同变体也不起作用,例如使 Tab 出现在 shift+super 上。
我正在使用 cinnamon(从 ubuntu 16.04 上的 ppa 安装)和 lightdm,我想象 windows/super 键在较低级别被拦截,xmodmap 无法完全处理......有没有办法实现我想要的?欢迎不涉及 xmodmap 的答案!
(我远非专家,所以也许有一个非常简单的解决方案......)
如果我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)
Run Code Online (Sandbox Code Playgroud)
重要的部分是为了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)
Run Code Online (Sandbox Code Playgroud)
该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";
Run Code Online (Sandbox Code Playgroud)
而不是(可能是文件的第 14 行)
key <LWIN>{[Super_L]};
Run Code Online (Sandbox Code Playgroud)
然后,使用 更新您的键盘布局setxkbmap us && xmodmap | grep mod4
。
你会得到类似的东西:
mod4 Super_R (0x86), Super_L (0x87), Super_L (0xce), Hyper_L (0xcf)
Run Code Online (Sandbox Code Playgroud)
如果你仍然得到Tab
,你可能应该牺牲另一把钥匙。请注意,0x85
是 的十六进制值133
,这意味着该键不是直接键,但如果按下,mod4
它仍然可以像窗口键一样运行。Shift