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

Ano*_*non 51 keyboard-layout

我正在尝试创建的键盘有很多 Unicode,看起来像这样: 我正在尝试创建的键盘

以下教程不成功:

我想知道是否有人会提供更好的教程和分步说明?

αғs*_*нιη 82

Ubuntu 14.04 中,键盘布局保留在

/usr/share/X11/xkb/symbols/


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

    key <AC01> {[a, A, aacute, Aacute]};

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

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

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

  3. <AC 01 > 数字01表示键的位置,从左侧开始计数并忽略任何特殊命名的键,例如TAB~(波浪号):AC01位于第三行上方,左侧第一个键(忽略Caps Lock,如果存在);在标准美式键盘上,这是标有“a”的键。

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

    1. a - 未修改的密钥。
    2. A -Shift字符。
    3. á -Alt Gr字符。(急性
    4. Á - Shift+Alt Gr字符。(急性)

创建自定义键盘映射就像将给定行中不需要的字符替换为您需要的字符一样简单!

例如:

作为英Saxonist,I型áÁ少得多的频率比I型æÆ

盎格鲁-撒克逊字符添加到我的名单,我只需更换aacuteAacute与实体名称或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文件中跟踪已安装的键盘。然后让我们在其中添加新布局。

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

    <layout>
     <configItem>
       <name> X </name>
       <shortDescription> Y </shortDescription>
       <description> Z </description>
       <languageList>
          <iso639Id> aaa </iso639Id>
       </languageList>
     </configItem>
     <variantList/>
    </layout>
    
    Run Code Online (Sandbox Code Playgroud)

在这里,按照完整的介绍

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

  • 答案有所帮助;对 AC01 的解释写得非常好,但我想要所有步骤的完整答案。当您链接到其他教程时;他们老了,一共有三个。为了其他用户,我宁愿在这里提供完整的答案。例如;文本文件中除了 Key &lt;ac01&gt; {[a,b,c,d]} 之外还有更多元素,还有一个 XML 文件需要编辑。还有一个问题是如何测试这个。正如所说; 我应该为此悬赏 500 名代表,因为创建一个好的教程是一项相当大的任务。 (3认同)
  • 我将开始回答这个完全成熟的问题,因为无论如何我都必须定义我的键盘布局。当我遇到它时,我会正确回答。 (2认同)

Ano*_*non 30

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

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

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


了解 XKB 目录

cd /usr/share/X11/xkb/ && ls
Run Code Online (Sandbox Code Playgroud)
  1. types- Active Modifiers如何更改生成的密钥。(Shift, Control, Alt~)
    如果你想自定义修饰键很重要。
  2. geometry- 用于绘制键盘图形。
    如果您正在设计非标准的键盘硬件,这一点很重要。
  3. rules- 为您当前的设置获取适当的配置。
    你需要定义这个
  4. keycodes- 键盘硬件的键码解释器。
    示例:Macintosh 键盘将空格键理解为57. 然而,我们将其写为<SPCE>
  5. symbols- 哪些分配给哪些键码
    这是我们将定义自定义布局的地方。
  6. compat-兼容性的简称。 修饰符的
    内部行为(Shift、Control、Alt...)

工作流程

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 };
};
Run Code Online (Sandbox Code Playgroud)

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

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

  2. E= 键盘上的行。
    Space Key=A
    Shift Key=B
    Caps Lock=C
    Tab Key= D

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

[+ ]- 在 C 语言中;方括号表示一个列表,其中的项目被 分割,。列表的长度决定了级别的数量。例如:

key<AE01> { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] }
Run Code Online (Sandbox Code Playgroud)

通常,级别表示以下按键:

  1. 没有修饰键
  2. Shift
  3. Alt Gr
  4. Shift + Alt Gr
  5. Custom - 不太可能看到 4 级以外的任何东西。

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


警告 - 常见错误

这些行中的任何一行都会导致严重错误,并使您无法使用键盘:

key<AE01> { [ Backspace ] }
key<AE02> { [ a, b, , C ] }
Run Code Online (Sandbox Code Playgroud)
  • 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
Run Code Online (Sandbox Code Playgroud)

如果出现任何问题,请使用鼠标运行该行代码(包含在您授予 sudoers 权限的 bash 脚本中。记住chmod +x允许作为可执行文件运行。)


恢复损坏系统的备份策略

  • 警告:键盘和屏幕键盘将停止工作,出现最轻微的错误。
  • 鼠标会起作用。可以通过突出显示字符并使用中键单击将它们粘贴来完成打字。在 Bash 中,您可以return(按 Enter)粘贴换行符。
  • 键盘将在 root shell 中以恢复模式工作。(从 bash 访问)
  • 您始终可以使用实时环境来修复文件。

快速和肮脏的解决方案

  1. 到这里
  2. 文件 > 制作副本
  3. Mapper Sheet是您定义布局的地方。
    • 单字符条目被翻译成程序可以理解的代码。
      !变成U0021)。支持 Unicode!
    • 字符串不会被翻译并按原样处理。请确保没有拼写或大小写错误!。
    • 空方块会自动填充VoidSymbol
  4. 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] };
    
    Run Code Online (Sandbox Code Playgroud) 在所有 8 个级别上进行更改:
    1234567890-= // Physical Keys
    ![]"*{}/')(\ // Changed to these characters
    Run Code Online (Sandbox Code Playgroud)
  5. XKBTab 也有线条。可以忽略所有其他选项卡(其代码)。
  6. sudo vim /usr/share/X11/xkb/symbols/us
  7. 替换布局内容。选择一个你不会使用的。例如:我更改了 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
Run Code Online (Sandbox Code Playgroud)