当我按下左键时,Supergnome shell 会出现,而当我按下右键时,Super则不会出现。此外,按下右Super+T会立即打开一个终端,但使用左 super 时,我必须按T两次,而当我T只按一次时,它类似于只按T而不按住Super左键。最后一点也发生在我定义的其他快捷键(如Super+ L、Super+ E)上,但不发生在Super+上Up/Down/Left/Right。
我想要的是按下任意一个Super键来获取 gnome shell,并使用任意一个Super键组合来T立即打开终端(与其他快捷方式类似)。我使用 Ubuntu 12.04 LTS 和 gnome 3 shell。
答案1
xmodmap 解决方案
我认为你可以使用修改映射,一个修改键盘映射的工具。由于我的键盘没有右键,Super我无法确认此解决方案,因此如果它不起作用,请发表评论。
所有步骤都在终端中完成
打印当前修改器图
跑步
xmodmap
这应该打印当前的修改器映射,它应该像这样
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), 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)
重要的是该mod4
行,该行显示哪些键代码映射到 Super_L 和 Super_R 键符号。
备份按键映射
在进行任何更改之前,最好先备份当前的按键映射,我们可以使用以下命令进行备份
xmodmap -pke > ~/.xmodmap.orig
现在如果出现任何问题您只需输入
xmodmap ~/.xmodmap.orig
恢复您原来的按键映射。(如果您犯了一些严重的错误,无法再正常打字,也可以重新启动)
检查当前的按键映射 Super 键
假设Super按键具有连续的按键代码(在本例中为 0x85 和 0x86),我们可以通过运行以下命令来检查当前映射
xmodmap -pke | grep -wA1 $((0x85))
当然,你应该用修改器映射中的键代码来更改 0x85。这应该给你
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
($((0x85))
将十六进制数转换为十进制)
模仿左边的行为 Super 向右 Super
从上一步可以看出,右键的Super键码为 134,但我们希望它具有左键(键码为 133)的行为。Super我们可以通过使用以下方法重新映射键来实现
xmodmap -e "keycode 134 = Super_L NoSymbol Super_L"
检查是否有效
如果你现在这样做
xmodmap -pke | grep -wA1 $((0x85))
你应该看到
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_L NoSymbol Super_L
这意味着两个键现在具有相同的行为。此外,修饰键映射应该在 行上发生变化mod4
,我们可以通过运行来检查这一点
xmodmap | grep 'mod4'
这应该给予
mod4 Super_L (0x85), Super_L (0x86), Super_L (0xce), Hyper_L (0xcf)
当然,您提到的快捷方式也应该有效!
使映射持久化
如果有效,您可以确保在启动时自动应用这些设置。运行
echo 'keycode 134 = Super_L NoSymbol Super_L' >> ~/.xmodmaprc
将自定义按键映射存储在文件中~/.xmodmaprc
。运行
echo 'xmodmap ~/.xmodmaprc' >> ~/.xsessionrc
以确保在窗口管理器加载时执行自定义键映射。