是否有人能提供关于如何在 xkb 中更改修饰键的良好说明(通过将修改后的 xkb 文件放在 /usr/share/X11/xkb 中)。
解释一下:我能够在 xmodmap 中制作我想要的布局。这是标准的美国布局(适用于笔记本电脑),但修改键互换了(通常的 ctrl 与 capslock;alt 与 windows 等,见下文)。但是,当我使用 xkbcomp 输出此布局时,生成的键盘布局似乎不完整(并且也有错误):即重新启动并重新加载该布局与再次运行 xmodmap 不同。不确定为什么会这样 - 但我认为最简单的方法可能是从头开始为 xkb 编写它(而不是通过 xmodmap -> xkb)。
所以- 有人能清楚地说明如何在 xkb 文件中重新分配修饰键吗?我基本上想采用美国布局,并进行以下交换:
- capslock --> 超级
- (转移)
- Ctrl--> 超级
- (脚注)
- 窗口--> alt/meta
- alt --> 控制
- (空间)
- altgr-->控制
- ctrl--> 超级
- (向左箭头)
在此列表中,第一个标签表示笔记本电脑上的物理按键(从大写锁定键逆时针向箭头键方向旋转);未修改的按键显示在 (...) 中;第二个标签是所需的功能。
我想要生成的是实际的 xkb 文件(即 US + 那些修饰符),然后我可以将其放置在 /usr/share/X11/xkb 中并从 /usr/share/X11/xkb/rules/evdev.xml 链接,这样我就可以简单地在需要时切换到这个布局。
(我之所以想在 xkb 而不是 xmodmap 中执行此操作是因为 xkb 可以处理不同窗口中的不同布局,而我还没有找到使用 xmodmap 执行此操作的方法,因为它似乎总是系统范围的。)
附言:在 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 和 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> };
};
但是,文件中的说明似乎不起作用(甚至包括有关通用美国键盘布局的内容)。所以可能是某些基本的东西出了问题。
答案1
答案在编辑。上面部分是正确的。如果保存到 /usr/share/X11/xkb/symbols 下的 somename,setxkbmap somename 将正常工作。我已在此处写下了相关信息https://github.com/bjohas/Ubuntu-keyboard-map-like-OS-X并包括 xmodmap 和 xkb 的关键映射。
这就是为什么我不清楚地图是否有效:
- 将此映射添加到 GUI 后,切换时不会产生相同的结果。事实上,GUI 的工作方式似乎与 setxkbmap 不同。那么:上面的映射是否需要以某种方式进行修改?或者这是 GUI 的问题?后续问题这里:xkbmap 与 setxkbmap 配合使用,但不适用于 GUI
- setxkbdmap 与 GUI 交互的方式可能也存在问题。后续问题这里 为什么 setxkbdmap 的工作方式与 GUI 键盘映射切换器(超级空间)不同?
如能就这些后续问题提出任何见解,我们将不胜感激!