xkb 选项覆盖特殊键盘布局

xkb 选项覆盖特殊键盘布局

我制作了一个特殊的西班牙语键盘布局,其中包括 AltGr-s 上的德语 ß,以及 AltGr-e、AltGr-E、AltGr-o、AltGr-O、AltGr-a 和 AltGr-A 上的斯堪的纳维亚语 æ Æ (ae, AE)、ø Ø (oe, OE) 和 å Å (aring, Aring)。€ (EuroSign) 已从 AltGr-e 移至 AltGr-5。

这在 Ubuntu Budgie 21.04 上效果很好。此后,我在同一台机器上重新安装 Ubuntu Budgie 20.04 LTS(全新安装),复制了自定义布局,并执行了 setxkbmap {custom_layout}。突然,在 AltGr-e 上我得到了 €,在 AltGr-5 上我得到了 ½。我无法看到下面的设置出了什么问题。你能帮忙吗?

// Modified for a real Spanish keyboard by Jon Tombs.

default  partial alphanumeric_keys
xkb_symbols "basic" {

    include "latin(type4)"

    name[Group1]="Spanish";

    key <AE01>  { [         1,     exclam,          bar,   exclamdown ] };
    key <AE03>  { [         3, periodcentered, numbersign,   sterling ] };
    key <AE04>  { [         4,     dollar,   asciitilde,       dollar ] };
    key <AE06>  { [         6,  ampersand,      notsign,  fiveeighths ] };
    key <AE11>  { [apostrophe,   question,    backslash, questiondown ] };
    key <AE12>  { [exclamdown, questiondown, dead_tilde,   asciitilde ] };

    key <AD11>  { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
    key <AD12>  { [      plus,   asterisk, bracketright,  dead_macron ] };


    key <AC01>  { [         a,              A,     aring,       Aring ] };
    key <AD03>  { [         e,              E,        ae,          AE ] };
    key <AC10>  { [    ntilde, Ntilde,   asciitilde, dead_doubleacute ] };
    key <AC11>  { [dead_acute, dead_diaeresis, braceleft,   braceleft ] };
    key <TLDE>  { [ masculine, ordfeminine,    backslash,   backslash ] };

    key <BKSL>  { [  ccedilla,   Ccedilla,   braceright,   dead_breve ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "winkeys" {

    include "es(basic)"
    name[Group1]="Spanish (Win keys)";
    include "eurosign(5)"
};

partial alphanumeric_keys
xkb_symbols "Sundeadkeys" {

    include "es(basic)"

    key <AC11>  { [dead_acute, dead_diaeresis, braceleft, braceleft ]   };
    key <AD11>  { [dead_grave, dead_circumflex, bracketleft, dead_abovering ] };
};

partial alphanumeric_keys
xkb_symbols "sundeadkeys" {

    include "es(Sundeadkeys)"

    name[Group1]="Spanish (with Sun dead keys)";
};

partial alphanumeric_keys
xkb_symbols "nodeadkeys" {

    include "es(basic)"

    name[Group1]="Spanish (no dead keys)";

    key <AD11>  { [     grave, asciicircum,  bracketleft,      degree ] };
    key <AD12>  { [      plus,   asterisk, bracketright,       macron ] };
    key <AD03>  { [         e,              E,        ae,          AE ] };
    key <AC10>  { [    ntilde, Ntilde,   asciitilde, dead_doubleacute ] };
    key <AC10>  { [    ntilde,     Ntilde,   asciitilde,  doubleacute ] };
    key <AC11>  { [     acute,  diaeresis,    braceleft,    braceleft ] };
    key <BKSL>  { [  ccedilla,   Ccedilla,   braceright,        breve ] };
    key <AB10>  { [     minus, underscore, dead_belowdot,    abovedot ] };
};

// Spanish mapping (note R-H exchange)
partial alphanumeric_keys
xkb_symbols "dvorak" {

    name[Group1]="Spanish (Dvorak)";

    key <TLDE> {[  masculine, ordfeminine, backslash, degree        ]};
    key <AE01> {[          1, exclam, bar, onesuperior          ]};
    key <AE02> {[          2, quotedbl, at, twosuperior         ]};
    key <AE03> {[          3, periodcentered, numbersign, threesuperior ]};
    key <AE04> {[          4, dollar, asciitilde, onequarter        ]};
    key <AE05> {[          5, percent, EuroSign, fiveeighths        ]};
    key <AE06> {[          6, ampersand, notsign, threequarters     ]};
    key <AE07> {[          7, slash, onehalf, seveneighths      ]};
    key <AE08> {[          8, parenleft, oneeighth, threeeighths    ]};
    key <AE09> {[          9, parenright, asciicircum           ]};
    key <AE10> {[          0, equal, grave, dead_doubleacute        ]};
    key <AE11> {[ apostrophe, question, dead_macron, dead_ogonek    ]};
    key <AE12> {[ exclamdown, questiondown, dead_breve, dead_abovedot   ]};

    key <AD01> {[     period, colon, less, guillemotleft                ]};
    key <AD02> {[      comma, semicolon, greater, guillemotright        ]};
    key <AD03> {[     ntilde, Ntilde, lstroke, Lstroke          ]};
    key <AD04> {[          p, P, paragraph              ]};
    key <AD05> {[          y, Y, yen                    ]};
    key <AD06> {[          f, F, tslash, Tslash             ]};
    key <AD07> {[          g, G, dstroke, Dstroke           ]};
    key <AD08> {[          c, C, cent, copyright            ]};
    key <AD09> {[          h, H, hstroke, Hstroke           ]};
    key <AD10> {[          l, L, sterling               ]};
    key <AD11> {[ dead_grave, dead_circumflex, bracketleft, dead_caron  ]};
    key <AD12> {[       plus, asterisk, bracketright, plusminus     ]};

    key <AC01> {[          a, A, aring, Aring               ]};
    key <AC02> {[          o, O, oslash, Oslash             ]};
    key <AC04> {[          u, U, aring, Aring               ]};
    key <AC05> {[          i, I, oe, OE                 ]};
    key <AC06> {[          d, D, eth, ETH               ]};
    key <AC07> {[          r, R, registered, trademark          ]};
    key <AC08> {[          t, T, thorn, THORN               ]};
    key <AC09> {[          n, N, eng, ENG               ]};
    key <AC10> {[          s, S, ssharp, section            ]};
    key <AC11> {[ dead_acute, dead_diaeresis, braceleft, dead_tilde ]};
    key <BKSL> {[   ccedilla, Ccedilla, braceright, dead_cedilla    ]};

    key <LSGT> {[       less, greater, guillemotleft, guillemotright    ]};
    key <AB01> {[      minus, underscore, hyphen, macron        ]};
    key <AB02> {[          q, Q, currency               ]};
    key <AB03> {[          j, J                     ]};
    key <AB04> {[          k, K, kra                    ]};
    key <AB05> {[          x, X, multiply, division         ]};
    key <AB06> {[          b, B                     ]};
    key <AB07> {[          m, M, mu                 ]};
    key <AB08> {[          w, W                     ]};
    key <AB09> {[          v, V                     ]};
    key <AB10> {[          z, Z                     ]};

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "cat" {

    include "es(basic)"

    name[Group1]="Catalan (Spain, with middle-dot L)";

    key <AC09>  { [     l,      L,      0x1000140,  0x100013F ] };
};

partial alphanumeric_keys
xkb_symbols "ast" {

    include "es(basic)"

    name[Group1]="Asturian (Spain, with bottom-dot H and bottom-dot L)";

    key <AC06>  { [     h,      H,      0x1001E25,  0x1001E24 ] };
    key <AC09>  { [     l,      L,      0x1001E37,  0x1001E36 ] };
};

// Copied from macintosh_vndr/es
partial alphanumeric_keys
xkb_symbols "mac" {
    include "es"
    name[Group1]= "Spanish (Macintosh)";
};

partial alphanumeric_keys
xkb_symbols "olpc" {

    // http://wiki.laptop.org/go/OLPC_Spanish_Keyboard

    include "us(basic)"
    name[Group1]="Spanish";

    key <AE00> { [    masculine,    ordfeminine      ] };
    key <AE01> { [            1,         exclam,             bar ] };
    key <AE02> { [            2,       quotedbl,              at ] };
    key <AE03> { [            3,     dead_grave,      numbersign,   grave           ] };
    key <AE05> { [            5,        percent,        EuroSign,   dead_circumflex ] };
    key <AE06> { [            6,      ampersand,         notsign ] };
    key <AE07> { [            7,          slash,       backslash ] };
    key <AE08> { [            8,      parenleft                         ] };
    key <AE09> { [            9,     parenright                         ] };
    key <AE10> { [            0,          equal                  ] };
    key <AE11> { [   apostrophe,       question                  ] };
    key <AE12> { [   exclamdown,   questiondown                  ] };

    key <AD03> { [            e,              E,              ae,   AE ] };
    key <AD11> { [   dead_acute, dead_diaeresis,           acute,   dead_abovering  ] };
    key <AD12> { [  bracketleft,      braceleft                  ] };

    key <AC01> { [            a,              A,           aring,            Aring ]};
    key <AC10> { [       ntilde,        Ntilde                  ] };
    key <AC11> { [         plus,       asterisk,      dead_tilde ] };
    key <AC12> { [ bracketright,     braceright,      section    ] };

    key <AB08> { [        comma,      semicolon                  ] };
    key <AB09> { [       period,          colon                  ] };
    key <AB10> { [        minus,     underscore                  ] };

    key <I219> { [         less,        greater,  ISO_Next_Group ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "olpcm" {

    // Mechanical (non-membrane) OLPC Spanish keyboard layout.
    // See: http://wiki.laptop.org/go/OLPC_Spanish_Non-membrane_Keyboard

    include "us(basic)"
    name[Group1]="Spanish";

    key <AE00> { [    questiondown,    exclamdown, backslash      ] };
    key <AE01> { [            1,         exclam,             bar ] };
    key <AE02> { [            2,       quotedbl,              at ] };
    key <AE03> { [            3,     dead_grave,      numbersign,   grave           ] };
    key <AE04> { [            4,     dollar,     asciitilde,     dead_tilde ] };
    key <AE05> { [            5,        percent,     EuroSign,   dead_circumflex ] };
    key <AE06> { [            6,      ampersand,         notsign ] };
    key <AE07> { [            7,          slash,       backslash ] };   // no '\' label on olpcm, leave for compatibility
    key <AE08> { [            8,      parenleft,    masculine                ] };
    key <AE09> { [            9,     parenright,    ordfeminine                 ] };
    key <AE10> { [            0,          equal                  ] };
    key <AE11> { [   apostrophe,       question                  ] };

    key <AD03> { [            e,              E,        ae,      AE ] };
    key <AD11> { [   dead_acute, dead_diaeresis,     dead_abovering, acute  ] };
    key <AD12> { [  plus,      asterisk                  ] };

    key <AC01> { [            a,              A,           aring,            Aring ]};
    key <AC10> { [       ntilde,        Ntilde                  ] };
    key <AC10> { [       ntilde,        Ntilde                  ] };
    // no AC11 or AC12 on olpcm

    key <AB08> { [        comma,      semicolon                  ] };
    key <AB09> { [       period,          colon                  ] };
    key <AB10> { [        minus,     underscore                  ] };

    key <AA02>  { [        less,        greater ] };
    key <AA06>  { [  bracketleft,      braceleft,   ccedilla,         Ccedilla  ] };
    key <AA07>  { [  bracketright,     braceright                ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "deadtilde" {

    include "es(basic)"

    name[Group1]="Spanish (dead tilde)";

    key <AE04>  { [         4,     dollar,   dead_tilde,       dollar ] };
};

partial alphanumeric_keys
xkb_symbols "olpc2" {

    // Modified variant of US International layout, specifically for Peru
    // Contact: Sayamindu Dasgupta <[email protected]>

    include "us(olpc)"
    name[Group1]="Spanish (OLPC2)";

    key <AE03> { [  3, numbersign,   dead_grave,  dead_grave] }; // combining grave
    key <I236>  { [ XF86Start ] };

    include "level3(ralt_switch)"
};

// EXTRAS:

partial alphanumeric_keys
    xkb_symbols "sun_type6" {
    include "sun_vndr/es(sun_type6)"
};

setxbkmap -query -verbose 的输出:

    $ setxkbmap -print -verbose
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwerty)
types:      complete
compat:     complete
symbols:    pc+es+inet(evdev)+group(win_space_toggle)+eurosign(e)+terminate(ctrl_alt_bksp)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+es+inet(evdev)+group(win_space_toggle)+eurosign(e)+terminate(ctrl_alt_bksp)"    };
    xkb_geometry  { include "pc(pc105)" };
};

我可以看到 xkb 对欧元符号进行了更改。我猜想这个更改是在读取上面的键盘布局文件后进行的。所以问题是我如何永久阻止 xkb 进行该更改。

该更改并非来自键盘配置文件:

$ cat /etc/default/keyboard 
# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="es"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"

我也尝试过使用 dconf-editor,按照,但是它只显示上面的选项,也就是没有选项。我也试过:

sudo gsettings set org.gnome.desktop.input-sources xkb-options "['grp:win_space_toggle', 'terminate:ctrl_alt_bksp']"

没有快乐。

那么发生了什么事?非常感谢您的帮助...

注意:语言环境是 en-us,而键盘是 es-es。

相关内容