Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

xkb options overriding special keyboard layout

Writer Mia Lopez

I have made a special Spanish keyboard layout that includes the German ß on AltGr-s, and the Scandinavian æ Æ (ae, AE), ø Ø (oe, OE), and å Å (aring, Aring), on AltGr-e, AltGr-E, AltGr-o, AltGr-O, AltGr-a, and AltGr-A, respectively. The € (EuroSign) has been moved from AltGr-e to AltGr-5.

This worked great on Ubuntu Budgie 21.04. I since moved back to Ubuntu Budgie 20.04 LTS (fresh install) on the same machine, copied over the custom layout, and did setxkbmap {custom_layout}. Suddenly, on AltGr-e I've got €, and on AltGr-5 I've got ½. I am not capable of seeing what is going wrong with the setup below. Can you help?

// 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" { // 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: 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 <> 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)"
};

The output of 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)" };
};

I can see that xkb applies a change to the eurosign. I suppose that change is made after reading the keyboard layout file (es) above. So the question is how I permanently stop xkb from making that change.

The change does not come from the keyboard configuration file:

$ cat /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="es"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"

I have also tried to use dconf-editor, as per this, but it only shows the options above, that is, no options. I have also tried:

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

No joy.

So what is going on? Help much appreciated...

Note: The locale is en-us, while the keyboard is es-es.

8 Reset to default

Know someone who can answer? Share a link to this question via email, Twitter, or Facebook.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy