How do I change the "system default" keyboard?

I've tried changing the session keyboard but it doesn't work. If I go

Settings → Settings Manager → Keyboard → Layout (tab at top) → uncheck Use System Defaults → Delete the current keyboard / add a new one

I find that when I log back on the correct keyboard is still not working.


You can change the setting for default system keyboard hardware (e.g. "Generic 105-key keyboard" to "Generic 101-key keyboard") and also the system keyboard layout (e.g. "us-intl" to "us") with the command

sudo dpkg-reconfigure keyboard-configuration

view this file /usr/share/console-setup/KeyboardNames.pl. In it you'll see a Perl Hash of Hashes:

  'us' => {
'Cherokee' => 'chr',
'English (Colemak)' => 'colemak',
'English (Dvorak alternative international no dead keys)' => 'dvorak-alt-intl',
'English (Dvorak international with dead keys)' => 'dvorak-intl',
'English (Dvorak)' => 'dvorak',
'English (Macintosh)' => 'mac',
'English (US, alternative international)' => 'alt-intl',
'English (US, international with dead keys)' => 'intl',
'English (US, with euro on 5)' => 'euro',
'English (classic Dvorak)' => 'dvorak-classic',
'English (international AltGr dead keys)' => 'altgr-intl',
'English (layout toggle on multiply/divide key)' => 'olpc2',
'English (left handed Dvorak)' => 'dvorak-l',
'English (programmer Dvorak)' => 'dvp',
'English (right handed Dvorak)' => 'dvorak-r',
'Russian (US, phonetic)' => 'rus',
'Serbo-Croatian (US)' => 'hbs',
  }

Let's say you want

'English (international AltGr dead keys)' => 'altgr-intl',

Instead of

'English (US, international with dead keys)' => 'intl',

Firstly, see that they all fall under us. Now edit /etc/default/keyboard and change this

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="intl"
XKBOPTIONS=""

to

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="altgr-intl"
XKBOPTIONS=""