如何添加新的键盘布局(自定义键盘布局定义)

我想复制/usr/share/X11/xkb/symbols/的键盘布局并更改它,然后从中生成新的布局。

如何添加新的键盘布局(例如“mylayout”)?

更新#1:

我更改的文件添加了新布局:

  • /usr/share/X11/xkb/symbols/irwinxp (最初与ir相同):

     // Iranian keyboard layout //////////////////////////////////////// // Persian layout, // based on // Information Technology – Layout of Persian Letters and Symbols on Computer Keyboards // ISIRI 9147 – 1st Edition // Institute of Standards and Industrial Research of Iran // http://www.isiri.org/UserStd/DownloadStd.aspx?id=9147 // http://behnam.esfahbod.info/standards/isiri-keyboard-9147.pdf // // Author: Behnam Esfahbod  // default partial alphanumeric_keys xkb_symbols "pes" { name[Group1]= "Persian"; include "ir(pes_part_basic)" include "ir(pes_part_ext)" include "nbsp(zwnj2nb3nnb4)" include "level3(ralt_switch)" }; partial alphanumeric_keys xkb_symbols "pes_keypad" { name[Group1]= "Persian (with Persian Keypad)"; include "ir(pes_part_basic)" include "ir(pes_part_keypad)" include "nbsp(zwnj2nb3nnb4)" include "level3(ralt_switch)" }; partial hidden alphanumeric_keys xkb_symbols "pes_part_basic" { // Persian digits key  { [ Farsi_1, exclam, grave ] }; key  { [ Farsi_2, 0x100066c, at ] }; key  { [ Farsi_3, 0x100066b, numbersign ] }; key  { [ Farsi_4, 0x100fdfc, dollar ] }; key  { [ Farsi_5, 0x100066a, percent ] }; key  { [ Farsi_6, multiply, asciicircum ] }; key  { [ Farsi_7, Arabic_comma, ampersand ] }; key  { [ Farsi_8, asterisk, enfilledcircbullet ] }; key  { [ Farsi_9, parenright, 0x100200e ] }; key  { [ Farsi_0, parenleft, 0x100200f ] }; // Persian letters and symbols key  { [ Arabic_dad, Arabic_fathatan, degree ] }; // 2: Arabic_sukun key  { [ Arabic_sad, Arabic_dammatan, VoidSymbol ] }; // 2: Arabic_dammatan key  { [ Arabic_theh, Arabic_kasratan, 0x13a4 ] }; // 2: Arabic_kasratan key  { [ Arabic_qaf, Arabic_fathatan, VoidSymbol ] }; key  { [ Arabic_feh, Arabic_comma, VoidSymbol ] }; // 2: Arabic_damma key  { [ Arabic_ghain, Arabic_semicolon, VoidSymbol ] }; // 2: Arabic_kasra key  { [ Arabic_ain, Arabic_fatha, VoidSymbol ] }; key  { [ Arabic_heh, Arabic_hamza_above, 0x100202d ] }; // 2: Arabic_shadda key  { [ Arabic_khah, bracketright, 0x100202e ] }; key  { [ Arabic_hah, bracketleft, 0x100202c ] }; key  { [ Arabic_jeem, braceright, 0x100202a ] }; key  { [ Arabic_tcheh, braceleft, 0x100202b ] }; key  { [ Arabic_sheen, Arabic_fatha, VoidSymbol ] }; // 2: Arabic_hamzaonwaw key  { [ Arabic_seen, Arabic_damma, VoidSymbol ] }; // 2: Arabic_hamzaonyeh key  { [ Farsi_yeh, Arabic_kasra, Arabic_alefmaksura ] }; // 2: Arabic_yeh key  { [ Arabic_beh, Arabic_shadda, VoidSymbol ] }; // 1: Arabic_hamzaunderalef key  { [ Arabic_lam, 0x10006c0, VoidSymbol ] };// 2: Arabic_hamzaonalef key  { [ Arabic_alef, Arabic_maddaonalef, 0x1000671 ] }; key  { [ Arabic_teh, Arabic_tehmarbuta, VoidSymbol ] }; key  { [ Arabic_noon, guillemotright, 0x100fd3e ] }; key  { [ Arabic_meem, guillemotleft, 0x100fd3f ] }; key  { [ Arabic_keheh, colon, semicolon ] }; key  { [ Arabic_gaf, quotedbl, quotedbl ] }; // 2: Arabic_semicolon key  { [ Arabic_zah, Arabic_kaf, VoidSymbol ] }; key  { [ Arabic_tah, 0x1000653, VoidSymbol ] }; key  { [ Arabic_zain, Arabic_jeh, VoidSymbol ] }; key  { [ Arabic_ra, Arabic_hamzaonwaw ,0x1000656 ] }; // 2: Arabic_superscript_alef ٰ key  { [ Arabic_thal, 0x100200c, 0x100200d ] }; key  { [ Arabic_dal, Arabic_hamza_above, Arabic_hamza_below ] }; key  { [ Arabic_hamzaonyeh, Arabic_hamza, ellipsis ] }; // 1: Arabic_peh key  { [ Arabic_waw, greater, comma ] }; key  { [ period, less, apostrophe ] }; key  { [ slash, Arabic_question_mark, question ] }; key  { [ 0x100200d, division, asciitilde ] }; key  { [ minus, Arabic_tatweel, underscore ] }; key  { [ equal, plus, 0x1002212 ] }; key  { [ Arabic_peh, bar, 0x1002010 ] }; // 1: backslash }; partial hidden alphanumeric_keys xkb_symbols "pes_part_ext" { // Persian and ASCII digits key  { [ 0x10006f1, exclam, grave, 1 ] }; key  { [ 0x10006f2, 0x100066c, at, 2 ] }; key  { [ 0x10006f3, 0x100066b, numbersign, 3 ] }; key  { [ 0x10006f4, 0x100fdfc, dollar, 4 ] }; key  { [ 0x10006f5, 0x100066a, percent, 5 ] }; key  { [ 0x10006f6, multiply, asciicircum, 6 ] }; key  { [ 0x10006f7, Arabic_comma, ampersand, 7 ] }; key  { [ 0x10006f8, asterisk, enfilledcircbullet, 8 ] }; key  { [ 0x10006f9, parenright, 0x100200e, 9 ] }; key  { [ 0x10006f0, parenleft, 0x100200f, 0 ] }; }; partial hidden alphanumeric_keys xkb_symbols "pes_part_keypad" { // Persian digits and Mathematical operators key  { [ division, XF86_Ungrab ] }; key  { [ multiply, XF86_ClearGrab ] }; key  { [ 0x1002212, XF86_Prev_VMode ] }; key  { [ plus, XF86_Next_VMode ] }; key  { [ KP_Enter ] }; key  { [ equal ] }; key  { [ KP_Home, 0x10006f7 ] }; key  { [ KP_Up, 0x10006f8 ] }; key  { [ KP_Prior, 0x10006f9 ] }; key  { [ KP_Left, 0x10006f4 ] }; key  { [ KP_Begin, 0x10006f5 ] }; key  { [ KP_Right, 0x10006f6 ] }; key  { [ KP_End, 0x10006f1 ] }; key  { [ KP_Down, 0x10006f2 ] }; key  { [ KP_Next, 0x10006f3 ] }; key  { [ KP_Insert, 0x10006f0 ] }; key  { [ KP_Delete, 0x100066b ] }; }; //////////////////////////////////////// // Kurdish Layout partial alphanumeric_keys xkb_symbols "ku" { include "tr(ku)" name[Group1]= "Kurdish (Iran, Latin Q)"; }; partial alphanumeric_keys xkb_symbols "ku_f" { include "tr(ku_f)" name[Group1]= "Kurdish (Iran, F)"; }; partial alphanumeric_keys xkb_symbols "ku_alt" { include "tr(ku_alt)" name[Group1]= "Kurdish (Iran, Latin Alt-Q)"; }; //////////////////////////////////////// // Kurdish Soranî Bahdînî (Arabic) keyboard layout, // based on the Kurdî Soranî Bahdînî keyboard from KurdITGroup // which is based on National Iranian Keyboard Standard (ISIRI 2901:1994), // with additions. // // Copyright (C) 2006 Erdal Ronahî, published under the GPL v2 // // Special copyright note: author explicitly permitted to license this // layout under MIT/X11 license, for details see // https://bugs.freedesktop.org/show_bug.cgi?id=9541 // // Author: Erdal Ronahî  // // Kurdish Arabic-Latin Layout for Soranî partial alphanumeric_keys xkb_symbols "ku_ara" { name[Group1]= "Kurdish (Iran, Arabic-Latin)"; // Other 3-Level symbols key  { [ 0x100200d, division, asciitilde ] }; key  { [ backslash, bar, ccedilla, Ccedilla ] }; // Digits key  { [ 1, exclam, 0x10006f1, grave ] }; key  { [ 2, at, 0x10006f2, at ] }; key  { [ 3, numbersign, 0x10006f3, 0x100066b ] }; key  { [ 4, dollar, 0x10006f4, 0x100fdfc ] }; key  { [ 5, percent, 0x10006f5, 0x100066a ] }; key  { [ 6, asciicircum, 0x10006f6, multiply ] }; key  { [ 7, ampersand, 0x10006f7, Arabic_comma ] }; key  { [ 8, asterisk, 0x10006f8, enfilledcircbullet ] }; key  { [ 9, parenright, 0x10006f9, 0x100200e ] }; key  { [ 0, parenleft, 0x10006f0, 0x100200f ] }; key  { [ minus, Arabic_tatweel, underscore ] }; key  { [ equal, plus, 0x1002212 ] }; key  { [ Arabic_qaf, X, q, Q ] }; key  { [ Arabic_waw, X, w, W ] }; key  { [ 0x10006d5, Arabic_heh, e, E ] }; key  { [ Arabic_ra , 0x1000695, r, R ] }; key  { [ Arabic_teh, Arabic_tah, t, T ] }; key  { [ 0x10006cc, 0x10006ce, y, Y ] }; key  { [ Arabic_hamzaonyeh, Arabic_hamza, u, U ] }; key  { [ Arabic_hah, Arabic_ain, i, I ] }; key  { [ 0x10006c6, Arabic_hamzaonwaw, o, O ] }; key  { [ 0x100067e, Arabic_theh, p, P ] }; key  { [ bracketright, braceright, ucircumflex, Ucircumflex ] }; key  { [ bracketleft, braceleft, scedilla, Scedilla ] }; key  { [ Arabic_alef, Arabic_maddaonalef, a, A ] }; key  { [ Arabic_seen, Arabic_sheen, s, S ] }; key  { [ Arabic_dal, Arabic_thal, d, D ] }; key  { [ Arabic_feh, Arabic_hamzaunderalef, f, F ] }; key  { [ 0x10006af, Arabic_ghain, g, G ] }; key  { [ Arabic_heh, 0x100200c, h, H ] }; key  { [ 0x1000698, Arabic_hamzaonalef, j, J ] }; key  { [ 0x10006a9, Arabic_kaf, k, K ] }; key  { [ Arabic_lam, 0x10006b5, l, L ] }; key  { [ Arabic_semicolon, colon, ecircumflex, Ecircumflex ] }; key  { [ apostrophe, quotedbl, icircumflex, Icircumflex ] }; key  { [ Arabic_zain, Arabic_dad, z, Z ] }; key  { [ Arabic_khah, Arabic_sad, x, X ] }; key  { [ Arabic_jeem, 0x1000686, c, C ] }; key  { [ 0x10006a4, Arabic_zah, v, V ] }; key  { [ Arabic_beh, 0x1000649, b, B ] }; key  { [ Arabic_noon, Arabic_tehmarbuta, n, N ] }; key  { [ Arabic_meem, Arabic_tatweel, m, M ] }; key  { [ Arabic_comma, greater, comma ] }; key  { [ period, less, apostrophe ] }; key  { [ slash, Arabic_question_mark, question ] }; include "nbsp(zwnj2nb3)" include "level3(ralt_switch)" }; // EXTRAS: ///////////////////////////////////////////////////////////////////////////////// // // Generated keyboard layout file with the Keyboard Layout Editor. // For more about the software, see http://code.google.com/p/keyboardlayouteditor // // Version 0.2, fixed AD09. // // Layout by Ernst Tremel, http://ubuntuforums.org/showpost.php?p=9365469&postcount=32 // Creation of this file by Simos Xenitellis. partial alphanumeric_keys xkb_symbols "ave" { name[Group1] = "Avestan"; key  { [ U10B30, U10B32 ] }; // 𐬰 𐬲 key  { [ U10B11, U10B12 ] }; // 𐬑 𐬒 key  { [ U10B17, UE102 ] }; // 𐬗  key  { [ U10B2C, U10B13 ] }; // 𐬬 𐬓 key  { [ U10B20, U10B21 ] }; // 𐬠 𐬡 key  { [ U10B25, U10B27 ] }; // 𐬥 𐬧 key  { [ U10B28, U10B29 ] }; // 𐬨 𐬩 key  { [ U10B3C, U10B39 ] }; // 𐬼 𐬹 key  { [ U10B3E, U10B3D ] }; // 𐬾 𐬽 key  { [ U10B3F, periodcentered ] }; // 𐬿 · key  { [ U10B00, U10B01 ] }; // 𐬀 𐬁 key  { [ U10B2F, U10B31 ] }; // 𐬯 𐬱 key  { [ U10B1B, U10B1C ] }; // 𐬛 𐬜 key  { [ U10B1F, U10B16 ] }; // 𐬟 𐬖 key  { [ U10B14, U10B15 ] }; // 𐬔 𐬕 key  { [ U10B35, UE100 ] }; // 𐬵  key  { [ U10B18, U10B24 ] }; // 𐬘 𐬤 key  { [ U10B10, UE101 ] }; // 𐬐  key  { [ U10B2E, UE103 ] }; // 𐬮  key  { [ U10B3B, U10B3A ] }; // 𐬻 𐬺 key  { [ U10B1D ] }; // 𐬝 key  { [ U10B22, U10B23 ] }; // 𐬢 𐬣 key  { [ U10B33, U10B34 ] }; // 𐬳 𐬴 key  { [ U10B08, U10B09 ] }; // 𐬈 𐬉 key  { [ U10B2D, U10B26 ] }; // 𐬭 𐬦 key  { [ U10B19, U10B1A ] }; // 𐬙 𐬚 key  { [ U10B2B, U10B2A ] }; // 𐬫 𐬪 key  { [ U10B0E, U10B0F ] }; // 𐬎 𐬏 key  { [ U10B0C, U10B0D ] }; // 𐬌 𐬍 key  { [ U10B0A, U10B0B ] }; // 𐬊 𐬋 key  { [ U10B1E ] }; // 𐬞 key  { [ U10B06, U10B07 ] }; // 𐬆 𐬇 key  { [ U10B02, U10B03 ] }; // 𐬂 𐬃 key  { [ U10B78 ] }; // 𐭸 key  { [ U10B79 ] }; // 𐭹 key  { [ U10B7A ] }; // 𐭺 key  { [ U10B7B ] }; // 𐭻 key  { [ U10B7C ] }; // 𐭼 key  { [ U10B7D ] }; // 𐭽 key  { [ U10B7E ] }; // 𐭾 key  { [ U10B7F ] }; // 𐭿 key  { [ U10B04, U10B05 ] }; // 𐬄 𐬅 key  { [ U10B04, U10B05 ] }; // 𐬄 𐬅 }; 
  • 包含所有修改的/usr/share/X11/xkb/rules/evdev.xml一部分:

     ...   ir fa Persian  per      pes_keypad Persian (with Persian Keypad)     ku ku Kurdish (Iran, Latin Q)  kur      ku_f ku Kurdish (Iran, F)  kur      ku_alt ku Kurdish (Iran, Latin Alt-Q)  kur      ku_ara ku Kurdish (Iran, Arabic-Latin)  kur        irwinxp fa Persian-WinXP  per      pes_keypad Persian (with Persian Keypad)     ku ku Kurdish (Iran, Latin Q)  kur      ku_f ku Kurdish (Iran, F)  kur      ku_alt ku Kurdish (Iran, Latin Alt-Q)  kur      ku_ara ku Kurdish (Iran, Arabic-Latin)  kur        iq ... 

但是现在,通过这些更改,新的Persian-WinXP布局不服从irwinxp并且irwinxp是igored。 而是ir控制Persian-WinXP

更新#2:

Unity的新布局有问题。 新的布局图标很暗。 但它运作良好。

黑暗的布局图标

注意 :我使用的是Ubuntu 14.04。

创建自定义键盘布局

例如,我希望添加一个新的修改后的英语(国际AltGr死键) US布局与交换rRtT 。 我将它命名为XY交换:RT英语(国际AltGr死键)

  1. 创建新的符号文件:

    sudo nano /usr/share/X11/xkb/symbols/xy

     default partial alphanumeric_keys xkb_symbols "basic" { name[Group1]= "XY swapped:RT English (international AltGr dead keys)"; include "us(altgr-intl)" // my custom changes: key  { [ t, T, ediaeresis, Ediaeresis ] }; key  { [ r, R, thorn, THORN ] }; include "level3(ralt_switch)" }; 

    include "us(altgr-intl)"意味着它inheritance了该布局中的所有键,只在此处覆盖了键。

    您可以使用键盘布局编辑器 ,这是一个帮助创建或编辑XKB键盘布局的GUI程序。 感谢@Glutanimate

  2. 将新布局声明添加到/usr/share/X11/xkb/rules/evdev.xml (复制和修改us布局部分)

    参考: 在“设置”中提供新的变体键盘布局?

    sudo gedit /usr/share/X11/xkb/rules/evdev.xml

     ...   xy en XY swapped:RT English (international AltGr dead keys)  eng fra ger      ... 
  3. 删除xkb缓存。

     sudo rm /var/lib/xkb/*.xkm 

    笔记:

    要将更改加载到布局菜单,只需关闭gnome-keyboard-preferences并重新加载,不需要重新启动Windows管理器。

    Ubuntu版本(13.10)发生更改,导致在修改“/ usr / share / X11 / xkb / symbols”目录中的文件后不刷新键盘设置缓存。 看起来似乎没有应用更改。 要强制缓存刷新,应删除“/ var / lib / xkb”中的* .xkm文件。

    参考: Howto:自定义键盘布局定义

    要么

     sudo dpkg-reconfigure xkb-data 

    参考: 为什么13.10打破我的自定义键盘布局?

    自定义键盘布局

回复修复OP修改

  • 更新#1错误的父布局 )您修改了irwinxp文件中的xkb_symbols "pes_part_basic" :没关系。

    irwinxp文件中的xkb_symbols "pes"仍然是:

     include "ir(pes_part_basic)" 

    应该是:

     include "irwinxp(pes_part_basic)" 
  • 更新#2自定义图标 )如果en更改为xy 。 所以新的布局将与En不同,它将显示为Xy

    最有可能在ubuntu-mono没有它的图标。 然后指标将动态生成可能不遵循当前主题的新指标。

    1. 复制暗/浅单声道主题的任何布局图标:

       sudo cp /usr/share/icons/ubuntu-mono-dark/status/22/indicator-keyboard-En.svg /usr/share/icons/ubuntu-mono-dark/status/22/indicator-keyboard-Xy.svg sudo cp /usr/share/icons/ubuntu-mono-light/status/22/indicator-keyboard-En.svg /usr/share/icons/ubuntu-mono-light/status/22/indicator-keyboard-Xy.svg 
    2. SVG文件只是XML。 然后打开以进行编辑并将文本值从En更改为Xy

       sudo nano /usr/share/icons/ubuntu-mono-dark/status/22/indicator-keyboard-Xy.svg sudo nano /usr/share/icons/ubuntu-mono-light/status/22/indicator-keyboard-Xy.svg 

      例:

            Xy     
    3. 更新主题缓存:

       sudo update-icon-caches /usr/share/icons/ubuntu-mono-*/ 
    4. 注销/登录

      带有自定义图标的新布局

其他有用的参考资料

  • 如何在Linux中修改键盘布局 (感谢@Rmano)
  • 构建一个XKB键盘 (感谢@Glutanimate)