更新:我自己找到了解决方案

更新:我自己找到了解决方案

我尝试在 Ubuntu 18.04.1 LTS 中设置自定义键盘布局,以便能够为科学目的编写阿拉伯语音译(参见:https://en.wikipedia.org/wiki/Romanization_of_Arabichttps://en.wikipedia.org/wiki/DIN_31635) 因此我需要能够输入特殊字符。

我或多或少遵循了以下说明:

我做了什么:

  1. 当我说德语时,我使用 gedit 和 root 权限在 /usr/share/X11/xkb/symbols/ 中打开了“de”。

  2. 在这个文件的末尾我插入了以下内容并保存(之前对原文进行了备份):

    // Deutsch mit orientalistischer Umschrift
    partial alphanumeric_keys
    xkb_symbols "german_orient" {
    
        include "de(basic)"
    
        name[Group1]="Deutsch (Orientalistische Umschrift)";
    
        key <BKSL> { [numbersign, apostrophe, U+02BE,   dead_breve ]    };
        key <AE12>  { [dead_acute, dead_grave, U+02BF,  dead_ogonek ]   };
        key <AC11>  { [adiaeresis, Adiaeresis, U+0304, dead_caron ] };
        key <AB10>  { [minus, underscore, U+0331, emdash ] };
        key <AC10>  { [odiaeresis, Odiaeresis, U+0307, dead_belowdot ] };
        key <AB09>  { [period, colon, U+0323, division ] };
        key <AB08>  { [comma, semicolon, U+030C, multiply   ] };
        key <AC06>  { [h, H, U+032E, NoSymbol ] };
    };
    

    与此处列出的每个键的德语标准键盘布局相比,第三个条目(= 同时按下该键和 AltGr)根据我的需要进行了更改。顺便说一句,我通过在网上查找特殊字符获得了 Unicode 代码。

  3. 然后我用同样的方式evdev.xml打开/usr/share/X11/xkb/rules/

  4. 在这个文件中,我搜索了德语(de)布局条目并在其末尾(即之前 </layout>)插入以下内容并保存该文件:

    <variant>
     <configItem>
     <name>german_orient</name>
     <description>Deutsch (Orientalistische Umschrift)</description>
     </configItem>
    </variant>
    
  5. 然后我在终端中输入以下命令并按下回车键,sudo dpkg-reconfigure xkb-data因为在有关该主题的许多教程中都建议这样做

  6. 然后我重新启动了。

  7. 然后我在 Ubuntu 偏好设置中添加了新的键盘布局“Deutsch (Orientalistische Umschrift)”(意思是:德语(东方音译))

结果并不像我所希望的那样:

我不仅无法用我分配的键写出特殊字符。我猜我以某种方式“破坏”了“de”键盘布局,因为无论我通过 super+space 激活标准德语布局还是“Deutsch (Orientalistische Umschrift)”布局,系统似乎都恢复到了默认的英语键盘布局。因此,即使激活了其中一种德语布局,我写的字母也符合英语布局(例如,字母“z”和“y”被交换了)。

因此,最后,我使用我所做的两个文件的备份撤消了我的更改,现在一切都恢复正常。

但是由于出于专业目的,我需要能够快速地写出阿拉伯语音译,而且 - 至少据我所知 - 没有可供下载的用于此目的的键盘布局(因为该领域使用 Linux 的学者数量很少)我需要有人在这里帮助我,告诉我要进行哪些更改才能使我的自定义键盘布局正常工作。

我还是 Linux 新手,如果我错过了一些显而易见的东西,我很抱歉。无论如何,提前感谢您的帮助!

更新:我自己找到了解决方案

我自己找到了一个解决方案,我将在这里发布它,因为其他人可能会从中受益

安装 KeyboardLayoutEditor 并编辑键盘布局文件

  1. 我从https://github.com/simos/keyboardlayouteditor

    • 当我尝试运行它时,我注意到缺少一些我必须先安装的软件包,而这些软件包没有列在要求中。
  2. 运行 KeyboardLayoutEditor 并加载合适的语言布局文件(我的情况是 de)

    • 然后选择您要编辑的变体(在我的情况下是“基本”,因为我认为在添加自己的变体时可能犯了一些错误)
  3. 然后单击“启动字符图”按钮,将加载 Gucharmap(我必须先通过 Ubuntu 软件中心安装它才能使其正常工作)

  4. 现在选择您想要添加到某个键的字符(您也可以通过输入 Unicode 代码在 Gucharmap 中搜索符号)

  5. 并将其拖放到 KeyboardLayoutEditor 中合适键的 4 个位置之一(最终代码见下文)

    • 顺便说一句,我认为应用程序在这里犯了一些错误。因为将一些字符拖到某个键上时,它没有将正确的 unicode 代码写入文件,而是写入了相应死键字符的一些名称。(例如,它写入了“dead_belowdot”而不是 U0323,尽管我在 Gucharmap 中选择了后者字符并将其拖过来。我想这是一个错误。
    • 结果是
      • 对于这些死键特殊字符,我必须先输入它们,然后再输入我希望它们出现在上方或下方的字母。
      • 可以通过先输入字母,然后输入我想在上面或下面添加的特殊字符来输入具有正确 unicode 代码的其他插入字符。这是我习惯的行为,所以我尝试修复死键版本:
    • 我的解决方案是手动编辑文件,将所有错误插入的死键版本替换为组合字符版本的正确 unicode 代码。现在我可以输入一个字母,然后添加特殊字符。
  6. 插入所有需要的字符后,可以保存文件

    • 在我的例子中,KeyboardLayoutEditor 不仅将更改保存到“de-file”中的“基本”变体,还覆盖了整个“de-file”,从而删除了所有其他变体
    • 尽管我认为我不需要其他变体,但我不喜欢那样。因此,我将 KeyboardLayoutEditor 在 de-File 中写入的代码复制到我的 de_backup 中,替换那里的“basic”部分,然后将 de_backup 保存为“de”,替换旧的“de”。
    • 这次不需要编辑 evdev.xml,因为已经编辑了现有变体,所以不需要向文件中添加新的变体/布局。
  7. 然后我sudo dpkg-reconfigure xkb-data在控制台中使用命令

  8. 最后我重启了

结果:现在一切都运行良好!:)

一些想法

我不知道为什么这次使用 KeyboardLayoutEditor 可以起作用。

  1. 我的第一个猜测是它之所以有效是因为我没有尝试向键盘布局文件(de)添加新变体,而是编辑了现有变体,从而避免了编辑 de 文件和 evdev-xml 时可能出现的一些错误

  2. 我的第二个猜测是它之所以有效是因为 KeyboardLayout 编辑器编写的 Unicode 代码与我第一次手动编辑文件时编写的 Unicode 代码不同。

    • 例如我插入的unicode代码如下所示:U+02BE
    • 应用程序写入的unicode代码如下所示:乌02BE
    • 也许去掉“+”就可以了?我是菜鸟,所以不太清楚。
    • 一些有知识的人可能会在下面的代码中看到不同的原因。

我插入键盘布局文件(在我的情况下是 de)中的有效代码

(这是最终版本,其中应用程序所犯的错误都已由我手动纠正)

//////////////////////////////////////////////////////////////////////////////    ///
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com    /p/keyboardlayouteditor
//

xkb_symbols "basic"
{
    name[Group1] = "German";
    include "latin(type4)"
    include "level3(ralt_switch)"
    include "kpdl(comma)"
key <AB01> { [              y,              Y, guillemotright,          U203A ] }; // y Y » › 
key <AB02> { [              x,              X,  guillemotleft,          U2039 ] }; // x X « ‹ 
key <AB04> { [              v,              V, doublelowquotemark, singlelowquotemark ] }; // v V „ ‚ 
key <AB05> { [              b,              B, leftdoublequotemark, leftsinglequotemark ] }; // b B “ ‘ 
key <AB06> { [              n,              N, rightdoublequotemark, rightsinglequotemark ] }; // n N ” ’ 
key <AB08> { [          comma,      semicolon,     U030C,       multiply ] }; // , ; Dˇ × 
key <AB09> { [         period,          colon,  U0323,       division ] }; // . : D? ÷ 
key <AB10> { [          minus,     underscore,          U0331,         emdash ] }; // - _ ̱ — 
key <AC02> { [              s,              S,          U017F,          U1E9E ] }; // s S ſ ẞ 
key <AC06> { [       h,       H,          U032E                 ] }; //   ̮ 
key <AC07> { [              j,              J,  dead_belowdot,  dead_abovedot ] }; // j J D? D˙ 
key <AC10> { [     odiaeresis,     Odiaeresis,  U0307,  dead_belowdot ] }; // ö Ö D˙ D? 
key <AC11> { [     adiaeresis,     Adiaeresis,    U0304,     dead_caron ] }; // ä Ä Dˉ Dˇ 
key <AD03> { [              e,              E,       EuroSign,       EuroSign ] }; // e E € € 
key <AD06> { [              z,              Z,      leftarrow,            yen ] }; // z Z ← ¥ 
key <AD11> { [     udiaeresis,       Udiaeresis, dead_diaeresis, dead_abovering ] }; // ü  D¨ D˚ 
key <AD12> { [           plus,       asterisk,     asciitilde,         macron ] }; // + * ~ ¯ 
key <AE02> { [           KP_2,       quotedbl,    twosuperior,      oneeighth ] }; // 2 " ² ⅛ 
key <AE03> { [           KP_3,        section,  threesuperior,       sterling ] }; // 3 § ³ £ 
key <AE04> { [           KP_4,         dollar,     onequarter,       currency ] }; // 4 $ ¼ ¤ 
key <AE11> { [         ssharp,       question,      backslash,   questiondown ] }; // ß ? \ ¿ 
key <AE12> { [     dead_acute,     dead_grave,          U02BF,    dead_ogonek ] }; // D´ D` ʿ D˛ 
key <BKSL> { [     numbersign,     apostrophe,          U02BE,     dead_breve ] }; // # ' ʾ D˘ 
key <LSGT> { [           less,        greater,            bar, dead_belowmacron ] }; // < > | Dˍ 
key <TLDE> { [ dead_circumflex,         degree,          U2032,          U2033 ] }; // D^ ° ′ ″ 
};

答案1

更新:我自己找到了解决方案

我自己找到了一个解决方案,我将在这里发布它,因为其他人可能会从中受益

安装 KeyboardLayoutEditor 并编辑键盘布局文件

  1. 我从https://github.com/simos/keyboardlayouteditor

    • 当我尝试运行它时,我注意到缺少一些我必须先安装的软件包,而这些软件包没有列在要求中。
  2. 运行 KeyboardLayoutEditor 并加载合适的语言布局文件(我的情况是 de)

    • 然后选择您要编辑的变体(在我的情况下是“基本”,因为我认为在添加自己的变体时可能犯了一些错误)
  3. 然后单击“启动字符图”按钮,将加载 Gucharmap(我必须先通过 Ubuntu 软件中心安装它才能使其正常工作)

  4. 现在选择您想要添加到某个键的字符(您也可以通过输入 Unicode 代码在 Gucharmap 中搜索符号)

  5. 并将其拖放到 KeyboardLayoutEditor 中合适键的 4 个位置之一(最终代码见下文)

    • 顺便说一句,我认为应用程序在这里犯了一些错误。因为将一些字符拖到某个键上时,它没有将正确的 unicode 代码写入文件,而是写入了相应死键字符的一些名称。(例如,它写入了“dead_belowdot”而不是 U0323,尽管我在 Gucharmap 中选择了后者字符并将其拖过来。我想这是一个错误。
    • 结果是
      • 对于这些死键特殊字符,我必须先输入它们,然后再输入我希望它们出现在上方或下方的字母。
      • 可以通过先输入字母,然后输入我想在上面或下面添加的特殊字符来输入具有正确 unicode 代码的其他插入字符。这是我习惯的行为,所以我尝试修复死键版本:
    • 我的解决方案是手动编辑文件,将所有错误插入的死键版本替换为组合字符版本的正确 unicode 代码。现在我可以输入一个字母,然后添加特殊字符。
  6. 插入所有需要的字符后,可以保存文件

    • 在我的例子中,KeyboardLayoutEditor 不仅将更改保存到“de-file”中的“基本”变体,还覆盖了整个“de-file”,从而删除了所有其他变体
    • 尽管我认为我不需要其他变体,但我不喜欢那样。因此,我将 KeyboardLayoutEditor 在 de-File 中写入的代码复制到我的 de_backup 中,替换那里的“basic”部分,然后将 de_backup 保存为“de”,替换旧的“de”。
    • 这次不需要编辑 evdev.xml,因为已经编辑了现有变体,所以不需要向文件中添加新的变体/布局。
  7. 然后我sudo dpkg-reconfigure xkb-data在控制台中使用命令

  8. 最后我重启了

结果:现在一切都运行良好!:)

一些想法

我不知道为什么这次使用 KeyboardLayoutEditor 可以起作用。

  1. 我的第一个猜测是它之所以有效是因为我没有尝试向键盘布局文件(de)添加新变体,而是编辑了现有变体,从而避免了编辑 de 文件和 evdev-xml 时可能出现的一些错误

  2. 我的第二个猜测是它之所以有效是因为 KeyboardLayout 编辑器编写的 Unicode 代码与我第一次手动编辑文件时编写的 Unicode 代码不同。

    • 例如我插入的unicode代码如下所示:U+02BE
    • 应用程序写入的unicode代码如下所示:乌02BE
    • 也许去掉“+”就可以了?我是菜鸟,所以不太清楚。
    • 一些有知识的人可能会在下面的代码中看到不同的原因。

更新:根据 Gunnar Hjalmarsson 的说法,我的第二个猜测可能是正确的,问题在于 + 号

我插入键盘布局文件(在我的情况下是 de)中的有效代码

(这是最终版本,其中应用程序所犯的错误都已由我手动纠正)

//////////////////////////////////////////////////////////////////////////////    ///
//
// Generated keyboard layout file with the Keyboard Layout Editor.
// For more about the software, see http://code.google.com    /p/keyboardlayouteditor
//

xkb_symbols "basic"
{
    name[Group1] = "German";
    include "latin(type4)"
    include "level3(ralt_switch)"
    include "kpdl(comma)"
key <AB01> { [              y,              Y, guillemotright,          U203A ] }; // y Y » › 
key <AB02> { [              x,              X,  guillemotleft,          U2039 ] }; // x X « ‹ 
key <AB04> { [              v,              V, doublelowquotemark, singlelowquotemark ] }; // v V „ ‚ 
key <AB05> { [              b,              B, leftdoublequotemark, leftsinglequotemark ] }; // b B “ ‘ 
key <AB06> { [              n,              N, rightdoublequotemark, rightsinglequotemark ] }; // n N ” ’ 
key <AB08> { [          comma,      semicolon,     U030C,       multiply ] }; // , ; Dˇ × 
key <AB09> { [         period,          colon,  U0323,       division ] }; // . : D? ÷ 
key <AB10> { [          minus,     underscore,          U0331,         emdash ] }; // - _ ̱ — 
key <AC02> { [              s,              S,          U017F,          U1E9E ] }; // s S ſ ẞ 
key <AC06> { [       h,       H,          U032E                 ] }; //   ̮ 
key <AC07> { [              j,              J,  dead_belowdot,  dead_abovedot ] }; // j J D? D˙ 
key <AC10> { [     odiaeresis,     Odiaeresis,  U0307,  dead_belowdot ] }; // ö Ö D˙ D? 
key <AC11> { [     adiaeresis,     Adiaeresis,    U0304,     dead_caron ] }; // ä Ä Dˉ Dˇ 
key <AD03> { [              e,              E,       EuroSign,       EuroSign ] }; // e E € € 
key <AD06> { [              z,              Z,      leftarrow,            yen ] }; // z Z ← ¥ 
key <AD11> { [     udiaeresis,       Udiaeresis, dead_diaeresis, dead_abovering ] }; // ü  D¨ D˚ 
key <AD12> { [           plus,       asterisk,     asciitilde,         macron ] }; // + * ~ ¯ 
key <AE02> { [           KP_2,       quotedbl,    twosuperior,      oneeighth ] }; // 2 " ² ⅛ 
key <AE03> { [           KP_3,        section,  threesuperior,       sterling ] }; // 3 § ³ £ 
key <AE04> { [           KP_4,         dollar,     onequarter,       currency ] }; // 4 $ ¼ ¤ 
key <AE11> { [         ssharp,       question,      backslash,   questiondown ] }; // ß ? \ ¿ 
key <AE12> { [     dead_acute,     dead_grave,          U02BF,    dead_ogonek ] }; // D´ D` ʿ D˛ 
key <BKSL> { [     numbersign,     apostrophe,          U02BE,     dead_breve ] }; // # ' ʾ D˘ 
key <LSGT> { [           less,        greater,            bar, dead_belowmacron ] }; // < > | Dˍ 
key <TLDE> { [ dead_circumflex,         degree,          U2032,          U2033 ] }; // D^ ° ′ ″ 
};

相关内容