左/右超级按钮的区别

当我按下左边的Super键时,gnome shell会出现,而当我按下右边的Super键时,它不会出现。此外,按下右边的Super + T会立即打开终端,但是使用左边的super时,我必须按两次T,如果我只按一次T,就相当于只按下T而没有按住左边的Super。这个问题也出现在我定义的其他快捷键上(如Super+LSuper+E),但不包括Super+Up/Down/Left/Right
我想要的是按下任意一个Super键都能打开gnome shell,并且按下Super键加上T可以立即打开终端(其他快捷键也类似)。我使用的是Ubuntu 12.04 LTS和gnome 3 shell。

在“设置管理器 -> 键盘”中,是否有一个类似于“exo-open --launch TerminalEmulator”的选项?如果有的话,在第二列中是什么内容,快捷键? - ananaso
  1. 你是指系统设置下的键盘部分吗?如果是的话,我在那里找不到。
  2. 如果你是指compiz设置管理器,我在那里也找不到。 无论如何,我在终端中尝试了你的命令,它说exo-open没有安装,所以我非常怀疑那个选项是否会存在。然而,有一个定制快捷方式启动终端的命令“x-terminal-emulator”。这是我使用的,因为默认的启动终端似乎不起作用。
- Erik
1个回答

xmodmap解决方案

我认为你可以使用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,但我们希望它具有与左侧的 Super 键相同的行为,该键的键码为133。我们可以通过重新映射按键来实现这一点。

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

确保在窗口管理器加载时执行自定义键映射。

1首先感谢您的回答,我已经按照您的指示完成了“使映射持久化”的步骤。终端中的输出与您提到的完全一致,然而我的问题仍然存在:左边的Super键显示Gnome Shell,而右边的Super键却没有反应。快捷键也有类似的情况,使用左边的Super键,需要按两次t才能打开终端,而使用右边的Super键只需按一次就足够了。 - Erik
1嗯,那我也不知道呢 :P 我猜这些快捷方式是在某个更深层次上处理的。 - Gerhard Burger
1啊,我找到了一个错误报告,显然有更多的人遇到了同样的问题 :) https://bugzilla.gnome.org/show_bug.cgi?id=659899 - Gerhard Burger
安装它是有效的,但我无法使其持久化。 - wranvaud