After upgrading Ubuntu, I had to redo my custom dvorak layout.
To enable it, the only way I’ve found is to add the layout to /usr/share/X11/xkb/us.
Then you can enable it through a GUI, or with command:
setxkbmap us dvorak-intl-code It is optimized for multilinguists and hackers:
// Dvorak international with dead keys and optimisations for code // Olivier Mehani (shtrom-xorg@ssji.net) & James Pic // Reproduce the per-key mapping of us(intl) for the dvorak layout // aka "I just swapped my keys over" // Symbols and numbers swapped for code // colon and semi colon swapped for vim partial alphanumeric_keys xkb_symbols "dvorak-intl-code" { name[Group1]= "English (Dvorak international with dead keys)"; include "us(dvorak)" key <tlde> { [dead_grave, dead_tilde, grave, asciitilde ] }; key <ae01> { [ exclam, 1, exclamdown, onesuperior ] }; key <ae02> { [ at, 2, twosuperior, dead_doubleacute ] }; key <ae03> { [ numbersign, 3, threesuperior, dead_macron ] }; key <ae04> { [ dollar, 4, currency, sterling ] }; key <ae05> { [ percent, 5, EuroSign, dead_cedilla ] }; key <ae06> { [asciicircum, 6, onequarter, dead_circumflex ] }; key <ae07> { [ ampersand, 7, onehalf, dead_horn ] }; key <ae08> { [ asterisk, 8, threequarters, dead_ogonek ] }; key <ae09> { [ parenleft, 9, leftsinglequotemark, dead_breve ] }; key <ae10> { [ parenright, 0, rightsinglequotemark, dead_abovering ] }; key <ae11> { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; key <ae12> { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; key <ad01> { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; key <ad02> { [ comma, less, ccedilla, Ccedilla ] }; key <ad03> { [ period, greater, dead_abovedot, dead_caron ] }; key <ad04> { [ p, P, odiaeresis, Odiaeresis ] }; key <ad05> { [ y, Y, udiaeresis, Udiaeresis ] }; // key <ad06> { [ f, F ] }; // key <ad07> { [ g, G ] }; key <ad08> { [ c, C, copyright, cent ] }; key <ad09> { [ r, R, registered, registered ] }; key <ad10> { [ l, L, oslash, Ooblique ] }; key <ad11> { [ slash, question, questiondown, dead_hook ] }; // key <ad12> { [ equal, plus, multiply, division ] }; key <ac01> { [ a, A, aacute, Aacute ] }; key <ac02> { [ o, O, oacute, Oacute ] }; key <ac03> { [ e, E, eacute, Eacute ] }; key <ac04> { [ u, U, uacute, Uacute ] }; key <ac05> { [ i, I, iacute, Iacute ] }; key <ac06> { [ d, D, eth, ETH ] }; // key <ac07> { [ h, H ] }; key <ac08> { [ t, T, thorn, THORN ] }; key <ac09> { [ n, N, ntilde, Ntilde ] }; key <ac10> { [ s, S, ssharp, section ] }; // key <ac11> { [ minus, underscore, yen, dead_belowdot ] }; key <ab01> { [ colon, semicolon, paragraph, degree ] }; key <ab02> { [ q, Q, adiaeresis, Adiaeresis ] }; // key <ab03> { [ j, J ] }; key <ab04> { [ k, K, oe, OE ] }; // key <ab05> { [ x, X ] }; // key <ab06> { [ b, B ] }; key <ab07> { [ m, M, mu, mu ] }; key <ab08> { [ w, W, aring, Aring ] }; // key <ab09> { [ v, V ] }; key <ab10> { [ z, Z, ae, AE ] }; key <bksl> { [ backslash, bar, notsign, brokenbar ] }; include "level3(ralt_switch)" }; </bksl></ab10></ab09></ab08></ab07></ab06></ab05></ab04></ab03></ab02></ab01></ac11></ac10></ac09></ac08></ac07></ac06></ac05></ac04></ac03></ac02></ac01></ad12></ad11></ad10></ad09></ad08></ad07></ad06></ad05></ad04></ad03></ad02></ad01></ae12></ae11></ae10></ae09></ae08></ae07></ae06></ae05></ae04></ae03></ae02></ae01></tlde>