我一直在尝试在 MacBook 上的 X 中切换我的超级键和控制键,并且已经成功了一半。如果可能的话,我想避免创建自定义 .Xmodmap,因为每次加载自定义地图时都会弹出一个临时的 100% cpu 错误(更不用说我遇到过的针对使用 xmodmap 的各种警告) 。
经过一番挖掘,我最终将选项“XkbOptions”“altwin:ctrl_win”放入我的 01-keyboard-layout.conf 文件中,这已经让我完成了一半:例如,左命令现在映射到 133 Control_L。但是,控制键保持不变。例如,左控制仍然映射到 37 Control_L。
浏览 evdev.lst (和一堆谷歌搜索)发现没有相关的 XkbOption 将控制键变成超级键,现在我陷入了困境。
我现在正在审视道格·帕尔默的疯狂不可靠的 XKB 配置指南但正如他所描述的,这是堕入地狱。
任何以前尝试过这种切换并且知道完成它的确切规则/符号/键盘映射的人,您的帮助将会非常大。
谢谢!
答案1
下面的解决方案比提问者的更简单。 (在 Dell 上运行的 Ubuntu 14.04 上进行了测试。)
1) 在文件中/usr/share/X11/xkb/keycodes/evdev
,交换要交换的按键的扫描码(数字)。注意:您的硬件可能针对与evdev
.
2) 运行sudo rm /var/lib/xkb/*.xkm
清除xkb缓存,然后重新启动。
答案2
好吧,我终于让它发挥作用了。
首先,对于任何想要深入研究这个混乱的人来说,这两个资源都是令人惊奇的:
http://madduck.net/docs/extending-xkb/&http://www.charvolant.org/~doug/xkb/html/index.html
对于专门尝试进行此切换的任何人,这就是我所做的:
1) 在 /usr/share/X11/xkb/symbols 中为新映射创建一个文件 2) 将其放入其中:
// Control is SWAPPED with Win-keys
partial modifier_keys
xkb_symbols "cmd_n_ctrl" {
key <LWIN> { [ Control_L ] };
key <RWIN> { [ Control_R ] };
key <LCTL> { [ Super_L ] };
modifier_map Control { <LWIN>, <RWIN> };
modifier_map Mod4 { <LCTL> };
};
3:编辑 /usr/share/X11/xkb/rules 中的 evdev 以包括:
altwin2:cmd_n_ctrl = +altwin2(cmd_n_ctrl)
(在选项 = 符号部分下)
4:将新选项添加到 evdev.lst(同一目录):
altwin2:cmd_n_ctrl
(在选项部分下)
5:现在编辑您的 01-Keyboard conf 文件以包含您创建的新选项。我的看起来像这样:
Section "InputClass"
Identifier "keyboard-layout"
Driver "evdev"
MatchIsKeyboard "yes"
Option "XkbLayout" "us, ru, ca, fr"
Option "XkbOptions" "altwin2:cmd_n_ctrl"
EndSection
6:重新启动,你应该就可以开始了。
上述资源可以更好地解释所有这些或您可能遇到的任何障碍。可能有更好的方法来做到这一点(可能不改变 /usr/share 的内容),但到目前为止,这就是让我启动和运行的原因。
希望能帮助其他陷入这个困境的人!