有人对如何在 xkb 中更改修饰键有很好的说明(通过将修改后的 xkb 文件放在 /usr/share/X11/xkb 中)。
解释一下:我可以在 xmodmap 中制作我想要的布局。这是标准的美国布局(适用于笔记本电脑),但修改键交换了轮次(通常的 ctrl 与 capslock;alt 与 windows 等,见下文)。但是,当我使用 xkbcomp 输出此布局时,生成的键盘布局似乎不完整(并且也有错误):即重新启动和重新加载该布局与再次运行 xmodmap 不同。不知道为什么会这样——但我认为最简单的可能是从头开始为 xkb 编写这个(而不是通过 xmodmap -> xkb)。
那么- 是否有人对如何重新分配 xkb 文件中的修饰键有明确的说明?我基本上是想走美式布局,做如下调换:
- 大写锁定->超
- (转移)
- ctrl --> 超级
- (fn)
- 窗口 --> alt/meta
- alt --> 控制
- (空间)
- altgr --> 控制
- ctrl --> 超
- (左箭头)
在此列表中,第一个标签是笔记本电脑上的物理键(从大写锁定方向逆时针方向键);(...) 中显示的未修改键;第二个标签是所需的功能。
我想要生成的是实际的 xkb 文件(即 US + 那些修饰符),然后我可以将其放入 /usr/share/X11/xkb 并从 /usr/share/X11/xkb/rules/evdev 链接。 xml,以便我可以在需要时简单地切换到此布局。
(我想在 xkb 中而不是在 xmodmap 中执行此操作的原因是因为 xkb 可以处理不同窗口中的不同布局,而我还没有找到使用 xmodmap 执行此操作的方法,这似乎总是在系统范围内。)
PS。在 xmodmap 中,这将是:
clear control
clear lock
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5
! 66/CapsLk
! Shift
! 37/Ctrl - Fn - 133/Win - 64/Alt - Space - 108/AltGr - 105/Ctrl
keycode 66 = Hyper_L Hyper_L Hyper_L Hyper_L
keycode 37 = Super_L Super_L Super_L Super_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 64 = Control_L Control_L Control_L Control_L
keycode 108 = Control_R Control_R Control_R Control_R
keycode 105 = Hyper_R Hyper_R Hyper_R Hyper_R
add control = Control_L Control_R
add mod1 = Alt_R Alt_L
add mod2 = Num_Lock
add mod3 = Hyper_L Hyper_R
add mod4 = Super_L
那么我如何在 xkb 中实现同样的效果呢?
聚苯乙烯。我也对 Alt vs. Meta 感到困惑——有人可以解释一下它的重要性吗?xkb? (或一般的 Ubuntu?)我曾假设 alt=meta (在 emacs 中)但似乎有区别。它是什么?
编辑。进一步研究后,我假设我的 xkb 文件(进入 /usr/share/X11/xkb/symbols)看起来像这样:
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
include "us(basic)"
name[Group1]= "enHT (English, US, Hyper-Terminal)";
key <CAPS> { [ Hyper_L, Hyper_L ] };
// Map Ctrl to the left Alt key, Alt to the left Win key,
// and Super to the left Ctrl key.
replace key <LALT> { [ Control_L, Control_L ] };
replace key <LWIN> { [ Alt_L, Meta_L ] };
replace key <LCTL> { [ Super_L ] };
modifier_map Mod1 { <LWIN> };
modifier_map Mod4 { <LCTL> };
modifier_map Mod5 { <CAPS> };
modifier_map Control { <LALT> };
};
但是,文件中的说明似乎不起作用(即使包括一般的美国键盘布局)。所以可能一些基本的东西是错误的。
编辑中提供的答案。上面的部分是正确的。如果保存到 /usr/share/X11/xkb/symbols 下的 somename,setxkbmap somename 将正常工作。我在这里写了信息https://github.com/bjohas/Ubuntu-keyboard-map-like-OS-X并包含 xmodmap 和 xkb 的键映射。
这就是为什么我不清楚这些地图是否有效的原因:
对这些后续问题的任何见解将不胜感激!