使用 setxbdmap 将菜单键映射到 alt

使用 setxbdmap 将菜单键映射到 alt

在运行 Xubuntu 14.04 的 Asus X551M 上,我想设置以下键盘配置:

紧邻空格键的一对修改键被映射到控制。下一个最接近的对被映射到Alt

也就是说,我的键盘的底行如下所示:

[ctrl] [fn] [win] [alt] [    space    ] [alt] [menu] [ctrl]

而我希望它的逻辑行为如下:

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [alt] [ctrl]

(我从不使用最外面的一对Ctrl键,因此它们的映射是任意的。)

过去,我通过手动编辑我的xmodmap文件来完成此操作,但第一次尝试从来都行不通。此外,xmodmap加载配置文件时会锁定,这显然是一个已知问题。我读到的关于这个主题的所有内容都表明它xmodmap已被弃用,我应该使用它setxbdmap

所以我首先尝试:

setxbdmap -option altwin:ctrl_alt_win

这几乎完美地工作。现在我的键盘逻辑上是:

[ctrl] [fn] [alt] [ctrl] [    space    ] [ctrl] [menu] [ctrl]

即我只需要将Menu密钥映射到Alt.有没有办法使用 来做到这一点setxbdmap

接下来我查看/usr/share/X11/xbd/rules/evdev.lst直到找到这一行:

altwin:menu     Add the standard behavior to Menu key

并尝试过,但似乎没有什么区别。有一个选项:

ctrl:menu_rctrl   Menu as Right Ctrl

这几乎就是我想要的,当然,它映射MenuCtrl而不是Alt.那么,有什么办法可以做到这一点吗setxbdmap

答案1

您可以创建一个包含以下内容的文件~/.xkb/symbols/local

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

或者

xkb_symbols "local" {
    key <LWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_L ]
    };
    key <MENU> {
        type= "ONE_LEVEL",
        symbols[Group1]= [            Alt_R ]
    };
    key <LALT> {         [       Control_L ] };
    key <RALT> {         [       Control_R ] };
};

(或介于两者之间),具体取决于您想要哪种 Alt。每次启动 X 时都执行以下操作(例如,在您的~/.xsession文件中,如果有的话):

mkdir -p .xkb/keymap
setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' > $HOME/.xkb/keymap/custom
xkbcomp -w0 -I$HOME/.xkb -R$HOME/.xkb keymap/custom $DISPLAY

第二行创建一个~/.xkb/keymap带有 的文件xkb_symbols { include "...+local" };,即其中包括~/.xkb/symbols/local何时xkbcomp(第三行)与该选项一起使用-I$HOME/.xkb。您可以在运行之前检查此文件xkbcomp

我还没有完全尝试过,但这是基于我正在做的事情:https://www.vinc17.net/unix/xkb.html(没有types目录)。

相关内容