问题描述
我试图创建的键盘有很多Unicode,看起来像这样:
不成功使用以下教程:
-
https://help.ubuntu.com/community/Howto%3A%20Custom%20keyboard%20layout%20definitions(教程中有一些错误,它使用不精确的语言,如”Cutting”而不是”Deleting”,它的格式奇怪)
我想知道是否有人会如此友善地提供一步一步的指导更好的教程?
最佳解决方案
在Ubuntu 14.04中,键盘布局保留在
/usr/share/X11/xkb/symbols/
此目录中的每个文件都包含以下类型的一系列条目:
key <AC01> {[a, A, aacute, Aacute]};
此条目使用以下约定将键盘上的键映射到多个特定字符:
-
< A C01>第一个字母
A
表示我们正在查找字母数字键块(其他选项包括KP [for keypad]
和FK [for Function Key]
); -
< A C 01>第二个字母
C
表示从找到密钥的底部开始计算的行。 (在标准的美式键盘中,空格键位于行AA
中,数字键位于行AE
中)。 -
< AC 01>数字
01
表示密钥的位置,从左边开始计算并忽略任何特别命名的密钥,如TAB
或~
(代字号):AC01
在第三行,第一行从左边开始(忽略Caps Lock
,如果存在);在标准的美式键盘上,这是标记为“a”的键。 -
括号括起分配给每个键的字符列表。它最多包含四个条目,以逗号分隔:
-
a – 未修改的密钥。
-
A –
Shift
字符。 -
ĂĄ –
Alt Gr
字符。 (aacute) -
Ä, –
Shift
+Alt Gr
字符。 (Aacute)
-
创建自定义键盘Map就像在给定行中替换您不想要的字符一样简单!
例如:
作为Anglo-Saxonist,I型á
和Á
比I型æ
和Æ
少得多。
到Anglo-Saxon字符添加到我的名单,我只是与实体名称或Unicode code points为æ
和Æ
(“aelig”或U00E6和“AElig”或U00C6,分别)取代aacute
和Aacute
:
key {[a, A, aelig, AElig]};
要么
key {[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);你是一个合适的简称;和Z一个或多个语言的适当的长名称和aaa legal three letter (ISO 639-2) language code(例如英语的eng):
<layout> <configItem> <name> X </name> <shortDescription> Y </shortDescription> <description> Z </description> <languageList> <iso639Id> aaa </iso639Id> </languageList> </configItem> <variantList/> </layout>
Here it is, follow complete introduction
其他相关链接:http://ubuntuforums.org/showthread.php?t=188761&p=1092145#post1092145 http://www.charvolant.org/~doug/xkb/html/index.html
次佳解决方案
注意:Wayland确实使用xkb,但许多xTools已经停止正常工作(例如xdotool)
注意:这是一个non-exhaustive教程。对于希望创建新的八级布局并理解语法的个人来说,它非常有用。
注意:提供了快速而肮脏的解决方案。它包含一个电子表格,可自动生成您需要的代码。
了解XKB目录
cd /usr/share/X11/xkb/ && ls
-
types
– 活动修改器如何更改生成的键。 (Shift,Control,Alt~)如果要自定义修改键,则很重要。 -
geometry
– 用于绘制键盘图形。如果您正在设计非标准的键盘硬件,则很重要。 -
rules
– 获取当前设置的相应配置。您需要定义它 -
keycodes
– 键盘硬件键码的解释器。示例:Macintosh键盘将空格键理解为57
。我们把它写成<SPCE>
-
symbols
– 将哪些值分配给哪些密钥代码。这是我们定义自定义布局的地方。 -
compat
– 兼容性的缩写。修改器的内部行为(Shift,Control,Alt …)
Workflow
<keycodes
> <symbols
> compat
我只触摸symbols
:请参阅下面的Quick and Dirty解决方案。
符号映射
/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>
The Tilde Key – 通常在Tab右上方的左上方键
key <AE01>
Illustration – 由三部分组成,A
E
01
-
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 ] }
通常,Levels表示以下按键:
-
没有修饰键
-
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
允许作为可执行文件运行。)
恢复损坏系统的备份策略
-
警告:键盘& On-Screen键盘将停止工作时出现最轻微的错误。
-
鼠标会起作用。可以通过突出显示字符并使用中键单击粘贴来完成键入。在Bash中,您可以通过粘贴换行符来
return
(按Enter键)。 -
键盘将在root shell中以恢复模式运行。 (从bash访问)
-
您始终可以使用实时环境来修复文件。
快速而肮脏的解决方案
-
文件>复制一份
-
您可以在
Mapper
Sheet中定义布局。-
单个字符条目被转换为程序理解的代码。 (
!
变为U0021
)。支持Unicode! -
字符串不会被翻译并按原样处理。请确认没有拼写或案例错误!
-
空方块自动填充
VoidSymbol
。
-
-
XKB-Sort
片
包含密钥组,例如:
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] };
在所有8个级别上进行更改:
1234567890-= // Physical Keys ![]"*{}/')(\ // Changed to these characters
-
XKB
Tab也有行。每个其他选项卡都可以忽略(其代码)。 -
sudo vim /usr/share/X11/xkb/symbols/us
-
替换布局内容。选择一个你不会使用的。例如:I changed the colemak entry leaving the structure intact, and replaced the keys.
感兴趣的线路:
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