在ubuntu上创建新键盘布局需要哪些步骤?

我试图创建的键盘有很多Unicode,看起来像这样: 我想要创建的键盘

未完成以下教程:

  • https://help.ubuntu.com/community/Howto%3A%20Custom%20keyboard%20layout%20definitions
    (教程中有一些错误,它使用不精确的语言,如“剪切”而不是“删除”它们,并且格式奇怪)

我想知道是否有人会如此善意地提供一步一步的指导更好的教程?

Ubuntu 14.04中 ,键盘布局保留在

/usr/share/X11/xkb/symbols/


此目录中的每个文件都包含以下类型的一系列条目:

     key  {[a,A,aacute,Aacute]};

此条目使用以下约定将键盘上的键映射到多个特定字符:

  1. 第一个字母A表示我们正在查找字母数字键块(其他选项包括KP [for keypad]FK [for Function Key] );

  2. C 01>第二个字母C表示行,从找到密钥的底部开始计算。 (在标准的美式键盘中,空格键在行AA ,数字键在行AE )。

  3. 01 >数字01表示按键的位置,从左边开始计数并忽略任何特别命名的按键,如TAB (代字号): AC01在第三行向上,第一个按键从左边开始(忽略大写锁定) ,如果存在); 在标准的美式键盘上,这是标有“a”的键。

  4. 括号括起分配给每个键的字符列表。 它最多包含四个条目,以逗号分隔:

    1. a – 未修改的密钥。
    2. AShift字符。
    3. áAlt Gr角色。 ( aacute
    4. ÁShift + Alt Gr字符。 ( Aacute

创建自定义键盘地图就像使用您所做的那样替换给定行中不需要的字符一样简单!

例如:

作为一个盎格鲁 – 撒克逊主义者,我输入áÁ的频率远低于我输入æÆ

要将Anglo-Saxon字符添加到我的列表中,我只需将aacute和Aacute替换为æÆ (“aelig”或U00E6和“AElig”或U00C6 )的实体名称或Unicode代码点 :

     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文件中已安装的键盘。 然后我们在其中添加新布局。

  1. 在编辑器中打开X11/xkb/rules/evdev.xml
  2. 转到部分的末尾(搜索 )。 在最后一个标记之后添加以下内容,其中X/usr/share/X11/xkb/symbols键盘布局的文件名(在我的例子中为oe ); Y一个合适的简称; 和Z一种或多种语言的适当长名称和aaa 法律三字母(ISO 639-2)语言代码 (例如英语的eng ):

        X   Y   Z    aaa      

在这里,按照完整的介绍

其他相关链接:
http://ubuntuforums.org/showthread.php?t=188761&p=1092145#post1092145 http://www.charvolant.org/~doug/xkb/html/index.html

注意 :Wayland确实使用xkb,但许多xTools已停止正常工作(例如xdotool)

注意 :这是一个非详尽的教程。 对于希望创建新的八级布局并理解语法的个人来说,它非常有用。

注意:提供了快速而肮脏的解决方案。 它包含一个自动生成所需代码的电子表格。


了解XKB目录

 cd /usr/share/X11/xkb/ && ls 
  1. typesActive Modifiers如何更改生成的键。 (Shift,Control,Alt~)
    如果要自定义修改键,则很重要。
  2. geometry – 用于绘制键盘图形。
    如果您正在设计非标准的键盘硬件,则很重要。
  3. 规则 – 获取当前设置的相应配置。
    您需要定义它
  4. keycodes – 键盘硬件键码的解释器。
    示例:Macintosh键盘将空格键理解为57 。 我们把它写成
  5. 符号 – 将哪些分配给哪些密钥代码
    这是我们定义自定义布局的地方。
  6. compat兼容性的缩写
    修改器的内部行为(Shift,Control,Alt …)

工作流程

密钥代码 > 符号 > compat

我只触摸symbols :请参阅下面的Quick and Dirty解决方案。


符号映射

/ symbols / us 此目录中的任何文件都遵循相同的结构。

 partial alphanumeric_keys xkb_symbols "basic" { name[Group1]= "US/ASCII"; key  { [ quoteleft, asciitilde ] }; key  { [ 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 Tilde Key – 通常在Tab上方的左上方键

插图 – 由三部分组成, A E 01

  1. A =字母数字键块。
    KP =键盘
    FK =function键

  2. E =键盘上的行。
    空格键 =一行
    Shift键 = B
    大写锁定 = C
    Tab键 = D

  3. 01 =键在行上的位置。
    AE01 = 1
    AB02 = X.
    AC05 = G.

[ + ] – C语言; 方括号表示一个列表,通过该列表分割项目 。 列表的长度决定了级别的数量。 例如:

 key { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] } 

通常,Levels表示以下按键:

  1. 没有修饰键
  2. 转移
  3. Alt Gr
  4. Shift + Alt Gr
  5. 自定义 – 不太可能看到4级以外的任何东西。

简而言之,如果你想将一个键映射到shift + altgr,你的列表必须至少有四个项目。


警告 – 常见错误

这些行中的任何一行都会导致严重错误,并且会让您没有可用的键盘:

 key { [ Backspace ] } key { [ a, b, , C ] } 
  • Backspace应该是BackSpace :要特别注意拼写。
  • 空条目应该是VoidSymbol

最好的安全措施!

  1. 备份您正在编辑的文件:

    sudo /bin/cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/usBACKUP

  2. 制作一个无需root密码即可运行的脚本

就像是:

 #!/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访问)
  • 您始终可以使用实时环境来修复文件。

快速而肮脏的解决方案

  1. 到这里
  2. 文件>制作副本
  3. Mapper Sheet是您定义布局的位置。
    • 单个字符条目被转换为程序理解的代码。
      !成为U0021 )。 支持Unicode!
    • 字符串不会被翻译并按原样处理。 请确认没有拼写或案例错误!
    • 空方块自动填充VoidSymbol
  4. XKB-Sort Sheet包含密钥组,例如:
     key  { [U0021, U0021, U0021, U0021, U0021, U0021, U0021, U0021] }; key  { [U005B, U005B, U005B, U005B, U005B, U005B, U005B, U005B] }; key  { [U005D, U005D, U005D, U005D, U005D, U005D, U005D, U005D] }; key  { [U0022, U0022, U0022, U0022, U0022, U0022, U0022, U0022] }; key  { [U002A, U002A, U002A, U002A, U002A, U002A, U002A, U002A] }; key  { [U007B, U007B, U007B, U007B, U007B, U007B, U007B, U007B] }; key  { [U007D, U007D, U007D, U007D, U007D, U007D, U007D, U007D] }; key  { [U002F, U002F, U002F, U002F, U002F, U002F, U002F, U002F] }; key  { [U0027, U0027, U0037, U0027, U0027, U0027, U0027, U0027] }; key  { [U0029, U0029, U0038, U0029, U0029, U0029, U0029, U0029] }; key  { [U0028, U0028, U0039, U0028, U0028, U0028, U0028, U0028] }; key  { [U005C, U005C, U005C, U005C, U005C, U005C, U005C, U005C] }; 

    在所有8个级别上进行更改:

     1234567890-= // Physical Keys ![]"*{}/')(\ // Changed to these characters 
  5. XKB标签也有行。 每个其他选项卡都可以忽略(其代码)。
  6. sudo vim /usr/share/X11/xkb/symbols/us
  7. 替换布局内容。 选择一个你不会使用的。 例如: 我更改了colemak条目,使结构保持完整,并替换了键。

感兴趣的线路:

 key.type[group1]="EIGHT_LEVEL"; // Enables 8 levels modifier_map Control { ,  }; // 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