Debian wiki keyboard portal. This portal covers all aspects of configuring keyboards on Debian.
The keyboard settings are stored in /etc/default/keyboard file provided by the keyboard-configuration package. Other packages use this to configure both the Linux kernel and the X Window system to realize consistent keyboard experiences under the Linux console and the X Window system.
You can change your keyboard settings using:
# dpkg-reconfigure keyboard-configuration
# service keyboard-setup restart
As usual, it will prompt you for the model of keyboard (what the keyboard *is*), and then for the keyboard layout (what the keys should *do*). Use this tool to change your keyboard map, e. g. from QWERTY to QWERTZ or to Dvorak, or for non-English layouts.
To apply new settings, restarting the keyboard-setup service should suffice, otherwise you can try to restart kernel input system via udev:
- udevadm trigger --subsystem-match=input --action=change
or reboot the whole OS.
You can also edit /etc/default/keyboard manually, here's an example:
# KEYBOARD CONFIGURATION FILE # Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="us,de,fr,ua,ru" XKBVARIANT="" XKBOPTIONS="grp:alt_shift_toggle" BACKSPACE="guess"
XKBMODEL is a keyboard model variable (look at a /usr/share/X11/xkb/rules/base.lst (plain text) or /usr/share/X11/xkb/rules/base.xml (XML) for a full list);
- XKBLAYOUT variable contains a list of used layouts;
"grp:alt_shift_toggle" sets a layout switching key combination (<Alt>+<Shift>).
Under the X environment, this keyboard layout setting in /etc/default/keyboard can be overridden by executing something like "setxkbmap us,ru -option grp:ctrl_shift_toggle" in the X startup configuration file ~/.xsessionrc . Please note that this is effective only for the X environment and the modern GUI environment may not be running under X environment.
Modern keyboard configuration (input method)
The simple keyboard input mechanism realized by the above configuration can't support some languages, such as Chinese and Japanese, properly.
When any of the input method framework packages are installed and activated, the X Window based keyboard configuration settings are ignored.
For GNOME system (the default Debian Desktop environment), ibus package is automatically installed and activated. The keyboard input needs to be configured from its GUI Settings -> Keyboard for basic configurations. For more complicated configuration such as swapping CapsLock and Ctrl, you need to install gnome-tweak and use it.
For non-GNOME system, the stand alone GUI configuration command ibus-setup can set up the input methods for ibus. Under those desktop environments, menu entry of their keyboard configuration utility or pop-up menu entry offered by clicking the associated tray icon may start ibus-setup for you. For KDE, this menu is System_settings -> Hardware -> Input_devices/keyboard.
Multi-language keyboard configuration strategy
People who wish to set up a single keyboard input environment for multiple (European) languages without the input method framework should consider following configuration strategy.
If the input method package is installed, deactivate it by executing im-config -n none.
- Select the correct keyboard model. (US/ISO)
Select the English (US International ?AltGr Unicode combining,alternative )
People who wish to set up multiple dynamically-switchable keyboard input environments for multiple languages should consider following configuration strategy.
Install input method framework package such as ibus
(optional) Install pertinent input method engine package such as ibus-anthy
Activate desirable input engine by adding it from menu such as Settings -> Keyboard --> Input Sources.
Switch among input methods with by pressing GUI-SPACE.
How to set keyboard layout in initramfs
The appropriate section of /etc/initramfs-tools/initramfs.conf needs to be changed to have a localized keyboard layout at boot time:
# # KEYMAP: [ y | n ] # # Load a keymap during the initramfs stage. # KEYMAP=y
# update-initramfs -u
How to enable USB keyboard in initramfs
The initramfs-tools must include the usbhid module and its dependencies for USB keyboard support at boot time. Either the configuration file /etc/initramfs-tools/conf.d/driver-policy must include most modules, or they will have to be specified in another file:
# # MODULES: [ most | netboot | dep | list ] # # most - Add most filesystem and all harddrive drivers. # # dep - Try and guess which modules to load. # # netboot - Add the base modules, network modules, but skip block devices. # # list - Only include modules from the 'additional modules' list # MODULES=most
If the configuration above was not set to include most modules, then the necessary modules have to be specified in the file /etc/initramfs-tools/modules:
# USB keyboard at boot usbcore uhci_hcd ehci_hcd usbhid
# update-initramfs -u
How to switch a keyboard layout in X11 / graphical desktop environment or ttyX console
The keyboard layout can be changed on Settings -> Keyboard -> Input Sources (or Settings -> Region & Languages -> Input Sources). One can also change it via CLI using dconf/gsettings by adding keys to /org/gnome/desktop/input-sources/sources.
For releases older than Stretch, these layouts include minority languages and dialects, as well as very specific configurations, and are hidden by default in the GUI.
The only way to make them visible is to enable the corresponding setting in gconf:
$ gsettings set org.gnome.desktop.input-sources show-all-sources true
For more information on this issue see https://bugzilla.gnome.org/show_bug.cgi?id=682240.
KDE does this via System_settings/Hardware/Input_devices/keyboard - Most people doing dual languages will simply select the correct keyboard model and then go to the layout tab and select English(US International ?AltGr Unicode combining,alternative ).
Use your favorite desktop keyboard layout switcher applet.
Generic / Console
In order to activate changed settings in /etc/default/keyboard without reboot, run setupcon(1).
Generic / Terminal
You can also switch the layout from the terminal, e. g.:
$ setxkbmap de
$ setxkbmap fr
$ setxkbmap us
Of special interest for keyboard hardware with us layout might be the altgr-intl variant (this provides a simple AltGr mapping for many umlauts and special symbols):
$ setxkbmap -rules evdev -model evdev -layout us -variant altgr-intl
$ setxkbmap -model pc105 -layout us -variant altgr-intl
To configure a simple key for toggling between multiple configured keyboard layouts, see Option XkbOptions in Section InputClass somewhere within the xorg config file collection (see [SOLVED] Setxkbmap .xinitrc).
If changes to /etc/default/keyboard do not apply after restarting, it is possible that the changes are being overridden by gsettings. For instance, if XKBOPTIONS set in /etc/default/keyboard are not working, check using:
gsettings get org.gnome.desktop.input-sources xkb-options
and reset if necessary:
gsettings reset org.gnome.desktop.input-sources xkb-options
IBus can also sometimes override settings from /etc/default/keyboard. The keyboard setup dialog in GNOME 3 will modify IBus's configuration directly, but for users of other X environments, you can use the ibus-setup command to modify the settings for IBus. To force it to defer to the settings from /etc/default/keyboard, run ibus-setup, go to the Advanced tab, and check Use system keyboard layout.