我尝试创建的键盘有很多 Unicode,看起来像这样:
以下教程不成功:
- https://help.ubuntu.com/community/Howto%3A%20Custom%20keyboard%20layout%20definitions
(本教程中存在一些错误,并且使用了不精确的语言,例如将“删除”内容写成了“剪切”,并且格式很奇怪)
我想知道是否有人愿意提供更好的教程并附带分步说明?
答案1
在Ubuntu 14.04,键盘布局保留在
/usr/share/X11/xkb/symbols/
每一个文件此目录中包含一系列以下类型的条目:
键<AC01> {[a,A,aacute,Aacute]};
此条目使用以下约定将键盘上的某个键映射到多个特定字符:
<AC01> 第一个字母
A
表示我们正在查找字母数字键块(其他选项包括KP [for keypad]
和FK [for Function Key]
);<AC01> 第二个字母
C
表示从底部开始数该键所在的行。(在标准的美国键盘中,空格键位于第 行AA
,数字键位于第 行AE
)。<交流01> 数字
01
表示键的位置,从左边开始数,忽略任何特殊命名的键,如TAB或~(波浪号):AC01
位于第三行以上,从左边开始的第一个键(Caps Lock如果存在,则忽略);在标准的美国键盘上,这是标记为“a”的键。括号内是分配给每个键的字符列表。最多包含 4 个条目,以逗号分隔:
- A- 未修改的密钥。
- A-Shift人物。
- A-Alt Gr人物。 (急性)
- A- Shift+Alt Gr字符。(急性)
创建自定义键盘映射很简单,只需将给定行中不想要的字符替换为您想要的字符即可!
例如:
作为一名盎格鲁撒克逊人,我输入á
和 的Á
频率比输入æ
和 的频率要少得多Æ
。
要将盎格鲁-撒克逊字符添加到我的列表中,我只需用实体名称或替换aacute
和Aacute
Unicode 代码点对于æ
和Æ
(“aelig”或U00E6和“AElig”或U00C6, 分别):
键 {[a, A,aelig,AElig]};
或者
键 {[a,A,U00E6,U00C6]};
当我修改完键盘布局后,我使用新名称“oe”将文件保存在同一目录中。
向文件添加新的键盘布局evdev.xml
。
为了使用新的键盘布局,我们需要告知X11
它存在。Ubuntu 14.04 在文件X11
中跟踪已安装的键盘/usr/share/X11/xkb/rules/evdev.xml
。然后让我们在其中添加新的布局。
X11/xkb/rules/evdev.xml
在编辑器中打开转到该部分的末尾
<layoutList>
(搜索</layoutList>
)。在最后一个标签后添加以下内容</layout>
,其中X
是您的键盘布局的文件名/usr/share/X11/xkb/symbols
(在我的情况下oe
);Y
合适的简称;以及Z
一种或多种语言的适当长名称,aaa
A合法的三字母 (ISO 639-2) 语言代码(例如英语对于英语):<layout> <configItem> <name> X </name> <shortDescription> Y </shortDescription> <description> Z </description> <languageList> <iso639Id> aaa </iso639Id> </languageList> </configItem> <variantList/> </layout>
其他相关链接:
http://ubuntuforums.org/showthread.php?t=188761&p=1092145#post1092145
http://www.charvolant.org/~doug/xkb/html/index.html
答案2
笔记:Wayland 确实使用 xkb,但许多 xTools 已停止正常工作(例如 xdotool)
笔记:这是一个非详尽的教程。它对于希望创建新的八级布局并理解语法的个人最有用。
笔记:提供了一个快速而简单的解决方案。它包括一个可自动生成所需代码的电子表格。
理解 XKB 目录
cd /usr/share/X11/xkb/ && ls
- types- 如何通过主动修改器。(Shift、Control、Alt~)
如果您想自定义修饰键,这一点很重要。 - geometry- 用于绘制键盘图形。
如果你正在设计非标准的键盘硬件,这一点很重要。 - rules- 获取适合您当前设置的配置。
您需要定义此项 - keycodes- 键盘硬件的键码解释器。
例如:Macintosh 键盘将空格键理解为57
。但我们将其写为<SPCE>
- symbols- 哪个价值观被分配到什么键码。
我们将在这里定义自定义布局。 - compat- 短缺兼容性.
内部行为修饰符(Shift、Control、Alt...)
工作流
keycodes > symbols > compat
我只触及symbols
:请参阅下文快速而肮脏解决方案。
符号地图
/symbols/us 该目录中的任何文件都遵循相同的结构。
partial alphanumeric_keys
xkb_symbols "basic" {
name[Group1]= "US/ASCII";
key <TLDE> { [ quoteleft, asciitilde ] };
key <AE01> { [ 1, exclam ] };
modifier_map Shift { Shift_L, Shift_R };
};
partial- 键盘映射不完整
alphanumeric_keys被映射的键盘部分。可以使用多个
笔记:如果没有*_keys
指定,则假定键盘完整。
"basic"- 符号图的名称
name[Group1]= "US/ASCII";给出一个独特的该键盘组的名称。
modifier_map用于编辑修饰键. (Ctrl、Shift、Alt~)
Shift { Shift_L, Shift_R };通常没有必要。它将两个班次都映射到班次修饰符,即级别 2。
key <TLDE> 波浪符号键- 通常为 Tab 正上方左上角的键
key <AE01> 插图- 由三部分组成,AE01
A= 字母数字键块。
KP= 键盘
FK= 功能键E= 键盘上的行。
Space Key=A行
Shift Key=B行
Caps Lock=C行
Tab Key= D行01= 键在行上的位置。
AE01= 1
AB02= X
AC05=G
[+ ]- 在 C 语言中;方括号表示列表,列表项按 分隔,。列表的长度决定了级别的数量。例如:
key<AE01> { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] }
通常,级别用以下按键来表示:
- 无修饰键
- Shift
- Alt Gr
- Shift+Alt Gr
- Custom- 4 级以上不太可能出现任何情况。
简而言之,如果您想将一个键映射到 shift + altgr,您的列表必须至少有四个项目长。
警告 - 常见错误
以下任何一行都会导致严重错误,并导致您无法使用键盘:
key<AE01> { [ Backspace ] }
key<AE02> { [ a, b, , C ] }
Backspace
应该是BackSpace
:要格外注意拼写。- 应该有一个空条目
VoidSymbol
。
最佳安全措施!
备份您正在编辑的文件:
sudo /bin/cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/usBACKUP
就像是:
#!/bin/bash
sudo /bin/cp -rf /usr/share/X11/xkb/symbols/usBACKUP /usr/share/X11/xkb/symbols/us
如果出现任何问题,请使用鼠标运行该行代码(包含在您授予 sudoers 权限的 bash 脚本中。请记住chmod +x
允许作为可执行文件运行。)
恢复损坏系统的备份策略
- 警告:键盘和屏幕键盘将停止工作哪怕是一点点错误。
- 鼠标可以工作。可以通过突出显示字符并使用鼠标中键单击粘贴来输入。在 Bash 中,您可以
return
通过粘贴换行符(按 Enter)来完成输入。 - 键盘将在恢复模式下工作在 root shell 中。(从 bash 访问)
- 您始终可以使用实时环境来修复文件。
快速而粗略的解决方案
- 到这里
- 文件 > 制作副本
- Mapper 床单是您定义布局的地方。
- 单个字符条目被翻译成程序可以理解的代码。
(!
变成U0021
)。支持 Unicode! - 字符串不会被翻译,而是按原样处理。确保没有拼写或大小写错误!
- 空的方块会自动填充
VoidSymbol
。
- 单个字符条目被翻译成程序可以理解的代码。
- XKB-Sort 床单包含关键组,例如:
在所有 8 个级别上进行更改:key <AE01> { [U0021, U0021, U0021, U0021, U0021, U0021, U0021, U0021] }; key <AE02> { [U005B, U005B, U005B, U005B, U005B, U005B, U005B, U005B] }; key <AE03> { [U005D, U005D, U005D, U005D, U005D, U005D, U005D, U005D] }; key <AE04> { [U0022, U0022, U0022, U0022, U0022, U0022, U0022, U0022] }; key <AE05> { [U002A, U002A, U002A, U002A, U002A, U002A, U002A, U002A] }; key <AE06> { [U007B, U007B, U007B, U007B, U007B, U007B, U007B, U007B] }; key <AE07> { [U007D, U007D, U007D, U007D, U007D, U007D, U007D, U007D] }; key <AE08> { [U002F, U002F, U002F, U002F, U002F, U002F, U002F, U002F] }; key <AE09> { [U0027, U0027, U0037, U0027, U0027, U0027, U0027, U0027] }; key <AE10> { [U0029, U0029, U0038, U0029, U0029, U0029, U0029, U0029] }; key <AE11> { [U0028, U0028, U0039, U0028, U0028, U0028, U0028, U0028] }; key <AE12> { [U005C, U005C, U005C, U005C, U005C, U005C, U005C, U005C] };
1234567890-= // Physical Keys ![]"*{}/')(\ // Changed to these characters
- XKB选项卡也有行。其他每个选项卡都可以忽略(其代码)。
sudo vim /usr/share/X11/xkb/symbols/us
- 替换布局内容。选择一个你不会用到的内容。例如:我改变了 colemak 条目,保持结构不变,并更换了键。
感兴趣的方向:
key.type[group1]="EIGHT_LEVEL"; // Enables 8 levels
modifier_map Control { <LFSH>, <RTSH> }; // Maps ctrl`s to shift keys.
key { [Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R] };
key { [Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L] };
include "level3(lalt_switch)" // Hold Left Alt for Level 3
include "level5(ralt_switch)" // Hold Right Alt for Level 5