如何让我的超级键(Windows 键)在 Linux 中表现得更像 Ctrl/Alt/Shift

del*_*ray 7 keyboard xorg xmodmap ubuntu

在使用Ctrl+“箭头键”在 X 窗口中切换虚拟桌面 13 年后,我最近被说服改为使用超级键(Windows 键和上下文菜单键,我已经重新映射)。这在大多数情况下都可以正常工作。但是,某些东西仍在接收这些键发送的键事件,就好像它们是普通的字母数字键一样。

例如,我首先在 Google Docs 电子表格中注意到这一点,如果我在单元格顶部单独按下 windows 键,它就会开始编辑该单元格。它不插入任何内容,它只是发送一个 Firefox 看到并开始编辑单元格的关键事件。这导致我正在处理的协作文档出现问题,因为 Google 文档的工作方式,它导致我在意识到发生了什么之前不小心删除了几个字段中的数据。

我喜欢使用超级键,但我希望它们的行为更像 aCtrlAlt键,因为它是一个修饰键,并且在按下第二个键之前不会发送任何内容。

我的设置如下:

  • Ubuntu 10.10
  • XFCE 4
  • Microsoft Natural Ergo 4000 键盘(当然是刮掉了标志)
  • 以下是我的 .Xmodmap 文件:

移除锁 = Caps_Lock

键码 66 = 转义

!下面映射了我的其他 Windows 上下文菜单键。

键码 135 = Super_R

编辑:根据要求,这是 xev 的相关输出,用于我的 Super_L(左 Windows 键)的按键和按键释放

KeyPress event, serial 34, synthetic NO, window 0x8200001,
    root 0x15d, subw 0x0, time 2428849342, (177,174), root:(182,228),
    state 0x10, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x8200001,
    root 0x15d, subw 0x0, time 2428849430, (177,174), root:(182,228),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
Run Code Online (Sandbox Code Playgroud)

prz*_*moc 9

非 XFCE 相关的东西

它不会完全解决您的问题,抱歉,但至少对某人仍然有用。在 Gnome 中,它在最近的 Ubuntu 中得到了修复。我的意思是Win不将其视为修饰键。在过去,例如在 Ubuntu 9.04 中,您必须进行以下更改:

转到System -> Preferences -> Keyboard,在Layouts选项卡下单击Layout options...按钮并在Alt/Win key behavior列表中选择Meta is mapped to Win keys(或Meta is mapped to Left Win)而不是Default

它到底有什么作用?更改文件中的altwin选项$HOME/.gconf/desktop/gnome/peripherals/keyboard/kbd/%gconf.xml(如果不存在则创建它):

<?xml version="1.0"?>
<gconf>
        <entry name="options" mtime="1298496603" type="list" ltype="string">
                <li type="string">
                        <stringvalue>altwin     altwin:meta_win</stringvalue>
                </li>
        </entry>
</gconf>
Run Code Online (Sandbox Code Playgroud)

如果您选择了Left Win,则将有以下字符串值:

altwin     altwin:left_meta_win
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 10.10 中不需要它,因为Default显然已经改变了。

但是你有 XFCE,而不是 Gnome,所以这对你没有帮助。

XFCE相关的东西

我已经下载了 Xubuntu (9.10),玩了一会儿,终于找到了解决方案。

不过,首先,我必须说键盘设置在 XFCE 中真的很糟糕。在选项卡Settings -> Keyboard下,Layout您没有太多选择。您无法XkbOptions在那里更改,即使您在 中手动进行更改~/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml,它也会被覆盖。所以我改变/etc/default/console-setup了添加altwin:meta_winXKBOPTIONS(如果已经有其他选项,请使用逗号作为分隔符)。尽管如此,还是没有运气。

tl;博士

解决办法是什么?

不关心 XFCE 处理键盘的方式,因为它显然坏了。setxkbmap直接使用:

setxkbmap -option altwin:meta_win
Run Code Online (Sandbox Code Playgroud)

(或者left_meta_win,无论你喜欢什么)

现在您必须检查它是否真的解决了您的问题。:)

如何永久应用?

echo -option altwin:meta_win >>~/.Xkbmap
Run Code Online (Sandbox Code Playgroud)

它也可以通过写入来为所有用户完成/etc/X11/Xkbmap

如何快速查看是否已申请altwin:meta_winaltwin:left_meta_win已申请?

setxkbmap -print
Run Code Online (Sandbox Code Playgroud)

Line withxkb_symbols应该有类似的东西altwin(meta_win)