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


43

我尝试创建的键盘具有很多Unicode,如下所示: 我正在尝试创建的键盘

下列教程未成功:

我想知道是否有人会提供逐步指导的更好教程?


2
嗯,对我来说这似乎是重复的。太可惜了,您已经悬赏了您的问题:/。
谷氨酰胺

@谷氨酰胺哦整洁; 没有看到。我仍然希望得到一个更好的答案。
Akiva


Answers:


69

Ubuntu 14.04中,键盘布局保留在

/usr/share/X11/xkb/symbols/


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

    键<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. 一个 -未改性的关键。
    2. 一个 -的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>
    

在这里,按照完整的介绍

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


我在这篇文章上做了一些工作。您提供的内容质量很高,但是我认为它仍然需要工作。链接到的教程非常陈旧且过时,并且充满了“如果使用8.04,请执行xy和z”。我想看到完整的教程答案(我只希望我可以增加赏金)
Akiva

@Akiva对您没有帮助吗?你哪里有问题?
2014年

3
答案有所帮助;对AC01的解释确实写得很好,但是我希望所有步骤都得到完整的答案。当您链接到其他教程时;他们很老,有三个。为了其他用户,我希望在此处提供完整的答案。例如 在文本文件中,除了键<ac01> {[a,b,c,d]}之外还有更多元素,并且还有一个XML文件需要编辑。还有一个问题就是如何测试。如前所述 我应该为此奖励500名,因为创建一个好的教程是一项相当大的任务。
Akiva

2
我将尽力回答这个问题,因为无论如何我都必须定义键盘布局。当我解决它时,我会正确回答。
Akiva 2014年

它仅适用于Xorg还是ttys?
Narcolessico

18

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

注意:这不是详尽的教程。对于寻求创建新的八层布局并理解语法的个人而言,这非常有用。

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


了解XKB目录

cd /usr/share/X11/xkb/ && ls
  1. types- 主动修改器如何更改生成的密钥。(Shift,Control,Alt〜)
    如果要自定义修改键,则很重要。
  2. geometry-用于绘制键盘图形。
    如果您要设计非标准的键盘硬件,则很重要。
  3. rules-获取当前设置的适当配置。
    您将需要定义此
  4. keycodes-键盘硬件键码的解释器。
    示例:Macintosh键盘将空格键理解为57。我们把它写成<SPCE>
  5. symbols-将哪些分配给哪些键码
    这是我们定义自定义布局的地方。
  6. 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> 波浪号键 -通常在标签上方的左上角键

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 ] }

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

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

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


警告-常见错误

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

key<AE01> { [ Backspace ] }
key<AE02> { [ 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 工作表是您定义布局的地方。
    • 单个字符条目被转换为程序可以理解的代码。
      !成为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] };
    
    在所有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 { <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


您的答案的第一行说:“(在制品-不要投票。)”。答案似乎对我来说比较完整-也许应该删除此注释?
MattKelly

1
@MattKelly啊,我还没有去更新它。我实际上创建了一个电子表格,该电子表格会根据您在模拟键盘布局中放置的字符来自动生成代码。
Akiva

听起来像是一个有用的电子表格-它可以公开获得吗?
MattKelly

@MattKelly这是副本。它需要去除很多杂物,也许还添加了一些把手,但是如您所见,它会生成代码:docs.google.com/spreadsheets/d/…–
Akiva

此方法不允许将RALT设置为另一个退格键,或将插入键设置为反引号/代字号。
Craig Hicks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.