我尝试在 Ubuntu 18.04.1 LTS 中设置自定义键盘布局,以便能够为科学目的编写阿拉伯语音译(参见:https://en.wikipedia.org/wiki/Romanization_of_Arabic;https://en.wikipedia.org/wiki/DIN_31635) 因此我需要能够输入特殊字符。
我或多或少遵循了以下说明:
- https://sites.lsa.umich.edu/kchalipa/?p=61
- https://aboutfoto.wordpress.com/2017/04/23/custom-keyboard-xkb/
- 在 ubuntu 上创建新的键盘布局需要哪些步骤?
我做了什么:
当我说德语时,我使用 gedit 和 root 权限在 /usr/share/X11/xkb/symbols/ 中打开了“de”。
在这个文件的末尾我插入了以下内容并保存(之前对原文进行了备份):
// 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 代码。
然后我用同样的方式
evdev.xml
打开/usr/share/X11/xkb/rules/
在这个文件中,我搜索了德语(de)布局条目并在其末尾(即之前
</layout>
)插入以下内容并保存该文件:<variant> <configItem> <name>german_orient</name> <description>Deutsch (Orientalistische Umschrift)</description> </configItem> </variant>
然后我在终端中输入以下命令并按下回车键,
sudo dpkg-reconfigure xkb-data
因为在有关该主题的许多教程中都建议这样做然后我重新启动了。
然后我在 Ubuntu 偏好设置中添加了新的键盘布局“Deutsch (Orientalistische Umschrift)”(意思是:德语(东方音译))
结果并不像我所希望的那样:
我不仅无法用我分配的键写出特殊字符。我猜我以某种方式“破坏”了“de”键盘布局,因为无论我通过 super+space 激活标准德语布局还是“Deutsch (Orientalistische Umschrift)”布局,系统似乎都恢复到了默认的英语键盘布局。因此,即使激活了其中一种德语布局,我写的字母也符合英语布局(例如,字母“z”和“y”被交换了)。
因此,最后,我使用我所做的两个文件的备份撤消了我的更改,现在一切都恢复正常。
但是由于出于专业目的,我需要能够快速地写出阿拉伯语音译,而且 - 至少据我所知 - 没有可供下载的用于此目的的键盘布局(因为该领域使用 Linux 的学者数量很少)我需要有人在这里帮助我,告诉我要进行哪些更改才能使我的自定义键盘布局正常工作。
我还是 Linux 新手,如果我错过了一些显而易见的东西,我很抱歉。无论如何,提前感谢您的帮助!
更新:我自己找到了解决方案
我自己找到了一个解决方案,我将在这里发布它,因为其他人可能会从中受益
安装 KeyboardLayoutEditor 并编辑键盘布局文件
我从https://github.com/simos/keyboardlayouteditor
- 当我尝试运行它时,我注意到缺少一些我必须先安装的软件包,而这些软件包没有列在要求中。
运行 KeyboardLayoutEditor 并加载合适的语言布局文件(我的情况是 de)
- 然后选择您要编辑的变体(在我的情况下是“基本”,因为我认为在添加自己的变体时可能犯了一些错误)
然后单击“启动字符图”按钮,将加载 Gucharmap(我必须先通过 Ubuntu 软件中心安装它才能使其正常工作)
现在选择您想要添加到某个键的字符(您也可以通过输入 Unicode 代码在 Gucharmap 中搜索符号)
并将其拖放到 KeyboardLayoutEditor 中合适键的 4 个位置之一(最终代码见下文)
- 顺便说一句,我认为应用程序在这里犯了一些错误。因为将一些字符拖到某个键上时,它没有将正确的 unicode 代码写入文件,而是写入了相应死键字符的一些名称。(例如,它写入了“dead_belowdot”而不是 U0323,尽管我在 Gucharmap 中选择了后者字符并将其拖过来。我想这是一个错误。
- 结果是
- 对于这些死键特殊字符,我必须先输入它们,然后再输入我希望它们出现在上方或下方的字母。
- 可以通过先输入字母,然后输入我想在上面或下面添加的特殊字符来输入具有正确 unicode 代码的其他插入字符。这是我习惯的行为,所以我尝试修复死键版本:
- 我的解决方案是手动编辑文件,将所有错误插入的死键版本替换为组合字符版本的正确 unicode 代码。现在我可以输入一个字母,然后添加特殊字符。
插入所有需要的字符后,可以保存文件
- 在我的例子中,KeyboardLayoutEditor 不仅将更改保存到“de-file”中的“基本”变体,还覆盖了整个“de-file”,从而删除了所有其他变体
- 尽管我认为我不需要其他变体,但我不喜欢那样。因此,我将 KeyboardLayoutEditor 在 de-File 中写入的代码复制到我的 de_backup 中,替换那里的“basic”部分,然后将 de_backup 保存为“de”,替换旧的“de”。
- 这次不需要编辑 evdev.xml,因为已经编辑了现有变体,所以不需要向文件中添加新的变体/布局。
然后我
sudo dpkg-reconfigure xkb-data
在控制台中使用命令最后我重启了
结果:现在一切都运行良好!:)
一些想法
我不知道为什么这次使用 KeyboardLayoutEditor 可以起作用。
我的第一个猜测是它之所以有效是因为我没有尝试向键盘布局文件(de)添加新变体,而是编辑了现有变体,从而避免了编辑 de 文件和 evdev-xml 时可能出现的一些错误
我的第二个猜测是它之所以有效是因为 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 并编辑键盘布局文件
我从https://github.com/simos/keyboardlayouteditor
- 当我尝试运行它时,我注意到缺少一些我必须先安装的软件包,而这些软件包没有列在要求中。
运行 KeyboardLayoutEditor 并加载合适的语言布局文件(我的情况是 de)
- 然后选择您要编辑的变体(在我的情况下是“基本”,因为我认为在添加自己的变体时可能犯了一些错误)
然后单击“启动字符图”按钮,将加载 Gucharmap(我必须先通过 Ubuntu 软件中心安装它才能使其正常工作)
现在选择您想要添加到某个键的字符(您也可以通过输入 Unicode 代码在 Gucharmap 中搜索符号)
并将其拖放到 KeyboardLayoutEditor 中合适键的 4 个位置之一(最终代码见下文)
- 顺便说一句,我认为应用程序在这里犯了一些错误。因为将一些字符拖到某个键上时,它没有将正确的 unicode 代码写入文件,而是写入了相应死键字符的一些名称。(例如,它写入了“dead_belowdot”而不是 U0323,尽管我在 Gucharmap 中选择了后者字符并将其拖过来。我想这是一个错误。
- 结果是
- 对于这些死键特殊字符,我必须先输入它们,然后再输入我希望它们出现在上方或下方的字母。
- 可以通过先输入字母,然后输入我想在上面或下面添加的特殊字符来输入具有正确 unicode 代码的其他插入字符。这是我习惯的行为,所以我尝试修复死键版本:
- 我的解决方案是手动编辑文件,将所有错误插入的死键版本替换为组合字符版本的正确 unicode 代码。现在我可以输入一个字母,然后添加特殊字符。
插入所有需要的字符后,可以保存文件
- 在我的例子中,KeyboardLayoutEditor 不仅将更改保存到“de-file”中的“基本”变体,还覆盖了整个“de-file”,从而删除了所有其他变体
- 尽管我认为我不需要其他变体,但我不喜欢那样。因此,我将 KeyboardLayoutEditor 在 de-File 中写入的代码复制到我的 de_backup 中,替换那里的“basic”部分,然后将 de_backup 保存为“de”,替换旧的“de”。
- 这次不需要编辑 evdev.xml,因为已经编辑了现有变体,所以不需要向文件中添加新的变体/布局。
然后我
sudo dpkg-reconfigure xkb-data
在控制台中使用命令最后我重启了
结果:现在一切都运行良好!:)
一些想法
我不知道为什么这次使用 KeyboardLayoutEditor 可以起作用。
我的第一个猜测是它之所以有效是因为我没有尝试向键盘布局文件(de)添加新变体,而是编辑了现有变体,从而避免了编辑 de 文件和 evdev-xml 时可能出现的一些错误
我的第二个猜测是它之所以有效是因为 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^ ° ′ ″
};