在运行 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
这几乎就是我想要的,当然,它映射Menu到Ctrl而不是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
目录)。