差异左/右超级按钮

Eri*_*rik 12 gnome shortcut-keys 12.04

当我按左键Super时,会出现 gnome shell,而当我按右键时,Super它不会出现。此外,按右Super+T确实会立即打开一个终端,但是在使用左超级时我必须按T两次,当我T只按一次时,它类似于只按T而不按住Super左键。最后一点也出现在我定义的其他快捷方式中(如Super+ LSuper+ E),但不出现在Super+ 中Up/Down/Left/Right

我想要的是按下任一Super键以获取 gnome shell,并结合使用任一SuperT立即打开终端(与其他快捷方式类似)。我使用 Ubuntu 12.04 LTS 和 gnome 3 shell。

Ger*_*ger 6

xmodmap 解决方案

我认为您可以使用xmodmap来做到这一点,这是一种修改键盘映射的工具。由于我的键盘没有右键,Super我无法确认此解决方案,因此如果不起作用,请发表评论。
所有步骤都在终端中完成

打印当前修改器贴图
Run

xmodmap
Run Code Online (Sandbox Code Playgroud)

这应该打印当前的修改器贴图,它应该像这样

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)
Run Code Online (Sandbox Code Playgroud)

重要的一行是mod4一行,这一行显示了哪些键代码映射到 Super_L 和 Super_R 键符号。

备份键映射
在我们改变任何东西之前备份当前键映射是个好主意,我们可以这样做

xmodmap -pke > ~/.xmodmap.orig
Run Code Online (Sandbox Code Playgroud)

现在,如果出现任何问题,您只需输入

xmodmap ~/.xmodmap.orig
Run Code Online (Sandbox Code Playgroud)

恢复您的原始键映射。(如果您犯了一些严重的错误并且无法再正确输入,则重新启动也可以)

检查当前键映射的 Super
假设Super键具有连续的键码(在这种情况下为 0x85 和 0x86),我们可以通过运行来检查当前映射

xmodmap -pke | grep -wA1 $((0x85))
Run Code Online (Sandbox Code Playgroud)

当然,您应该通过修改器映射中的键代码更改 0x85。这应该给你

keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
Run Code Online (Sandbox Code Playgroud)

$((0x85))将十六进制数转换为十进制数)

将左侧的行为复制 Super 到右侧 Super
正如您在上一步中看到的那样,右键的Super键代码为 134,但我们希望它具有键代码为 133 的左键的行为Super。我们可以通过使用重新映射键来做到这一点

xmodmap -e "keycode 134 = Super_L NoSymbol Super_L"
Run Code Online (Sandbox Code Playgroud)

检查它是否有效
如果你现在这样做

xmodmap -pke | grep -wA1 $((0x85))
Run Code Online (Sandbox Code Playgroud)

你应该看到

keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_L NoSymbol Super_L
Run Code Online (Sandbox Code Playgroud)

这意味着两个键现在具有相同的行为。此外,修改器贴图应该已更改为mod4,我们可以通过运行来检查这一点

xmodmap | grep 'mod4'
Run Code Online (Sandbox Code Playgroud)

这应该给

mod4        Super_L (0x85),  Super_L (0x86),  Super_L (0xce),  Hyper_L (0xcf)
Run Code Online (Sandbox Code Playgroud)

当然,您提到的快捷方式也应该有效!

使映射持久化
如果有效,您可以确保在启动时自动应用这些设置。跑

echo 'keycode 134 = Super_L NoSymbol Super_L' >> ~/.xmodmaprc
Run Code Online (Sandbox Code Playgroud)

将您的自定义键映射存储在文件中~/.xmodmaprc。跑

echo 'xmodmap ~/.xmodmaprc' >> ~/.xsessionrc
Run Code Online (Sandbox Code Playgroud)

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