Warning: don't change your keyboard to a non-Latin layout until
you've read the section "Running setxkbmap
With
Non-Latin Keyboard"! If you do accidentally do this, and can't
figure out how to switch back to the layout you're used to,
restarting your computer will probably fix everything.
Note: I'm going to try to provide an explanation that's as distro-agnostic as possible. If you use a mainstream distro such as Ubuntu, it's possible that there are other ways of changing the keyboard layout.
Second Note: I'm also going to assume that you're familiar with the command line, and know how to open a terminal and type commands into it. If you aren't, there are many good tutorials available on the internet.
I've found that the easiest way to change the keyboard layout on
Linux is with the setxkbmap
command. It requires a
layout (given using the -layout
flag), and optionally a
variant (specified using the -variant
flag). A layout
can also be given as an argument without the -layout
flag, but in this tutorial we will use the flag for clarity.
Thus, if you want to change your keyboard to a layout that does not require a variant (i.e. any of the layouts with "-" in the "Variant" column in the table below), you can run the following command:
setxkbmap -layout <layout>
However, to change your keyboard to a layout that requires a variant (such as the layouts for most Finno-Ugric languages written with the Cyrillic alphabet), the command will need to look like this:
setxkbmap -layout <layout> -variant <variant>
Note that both the -layout
and -variant
flags can take multiple arguments, given as a comma-separated list
(with no spaces between the elements). Both flags must have the same
number of arguments. This will come in handy later, if you want to
toggle between multiple keyboard layouts.
setxkbmap
With Non-Latin Keyboard
You basically have two options: bind the setxkbmap
commands that you are planning to use to hotkeys, and/or set up
multiple layouts with a key combination allowing you to switch
between them. Since the first option is heavily dependent on the
window manager that you use, I will only be discussing the second
option here.
Common choices for the layout toggle key are the Windows keys
(grp:lwin_toggle
/grp:rwin_toggle
), the
caps lock key (grp:caps_toggle
), or one of the Alt keys
(grp:lalt_toggle
, or just grp:toggle
for
the right alt key). A fuller list of options can be found by running
man xkeyboard-config
and scrolling down to the section
OPTIONS > Switching to another layout.
To set multiple layouts with a key to toggle between them, you will
need to add one more flag to your setxkbmap
command:
-option
, which takes one or more of the previously
mentioned options (use a comma-separated list if specifying multiple
toggle keys) as an argument. If you need to use the
-variant
flag, make sure that the elements in the list
given to both that and the -layout
flag match, even if
it means you have to leave some spaces blank. An example command
might resemble the following (note that the repetition of
-option
is not a mistake — it will be explained
later):
setxkbmap -layout fi,ru -variant ',chm' -option -option grp:lwin_toggle
The minus sign "-" indicates that no variant is necessary. Variants in parentheses are optional and generally not necessary.
Language | Layout | Variant |
---|---|---|
Erzya | ru |
- |
Estonian | ee |
- , (dvorak ,
nodeadkeys ,
us )
|
Finnish | fi |
- , (classic ,
mac ,
nodeadkeys ,
winkeys )
|
Hungarian | hu |
- , (nodeadkeys ,
querty ,
standard )
|
Komi (both) | ru |
kom |
Mari (both) | ru |
chm |
Mokša | ru |
- |
Sámi (*) | fi , no , se |
smi , smi_nodeadkeys
(only with no layout)
|
Udmurt | ru |
udm |
* - technically, these are listed as being for Northern Sámi only. I can't promise that they'll work for other Sámi languages.
A compose key allows you to type a much larger variety of characters than those assigned keys in your keyboard layout, by combining ("composing") multiple characters. These combinations always being with a particular key (the "compose key"), which has no other function in the keyboard layout.
Common choices for the compose key are the left or right Windows key
(compose:lwin
/compose:rwin
), the caps lock
key (compose:caps
), or the right alt key
(compose:ralt
). A fuller list of options can be found
by running man xkeyboard-config
and scrolling down to
the section OPTIONS > Position of Compose key. Make sure
you pick a different key from the one you use to toggle between
layouts.
As with the layout toggling key, the compose key option must simply
be added to the comma-separated list of options passed to the
-option
flag. For example:
setxkbmap -layout fi,ru -variant ',chm' -option -option compose:rwin,grp:lwin_toggle
When using the -option
flag with arguments in a command
that you will run multiple times over the course of a session (say,
if you plan to use multiple layouts and want to access them by
binding calls to setxkbmap
to hotkeys), you should
first clear the existing options by passing a blank
-option
flag to the command immediately before the one
carrying your actual options (this is shown in all example commands
where options are used). If you don't do this, calls to
setkxbmap
will eventually stop working (likely due to a
data store filling up somewhere, although I'm unsure of the specific
cause of this problem).
You should also bear in mind that setxkbmap
can do a
lot more than the basics mentioned here. Spend some time
reading the relevant man pages (man setxkbmap
,
man xkeyboard-config
) if you're interested.
Feel free to email me@<this site's domain name> if you have further questions, or believe I have made a mistake somewhere.