I use three different layouts and looking code to change layout programmaticaly from .bashrc
function.
3 Answers
For example, to get the US layout (that is, by the way, excellent for programming; see this question).
In X, try setxkbmap -layout us
In the Linux console, add XKBLAYOUT="us"
to /etc/default/keyboard
; then run setupcon
as superuser. Or, use dpkg-reconfigure keyboard-configuration
(also as superuser). You could also use a different map in the console than in X by using KMAP
; look in /etc/console-setup/
.
This may require some fiddling; possibly, you'd like to write aliases and/or functions in your .bashrc
for fast access. If you plan on switching back and forth, I've found that a compose key is a better solution. Unless, of course, you're writing in a totally different alphabet.

- 6,903
- 8
- 44
- 65
It is indeed strange that X11
doesn't provide a standard tool to switch to a given layout (when you define several with setxkbmap
).
But I just found a tool that can do it: xkblayout-state
With it you can get/set the current layout, either by name or by position in your layout stack.

- 82,805

- 2,501
It may look hacky but it works like a charm:
setxkbmap -layout ru && setxkbmap -layout ru,us
setxkbmap -layout us && setxkbmap -layout us,ru
To force switch:
setxkbmap -layout ru && setxkbmap -layout us && setxkbmap -layout us,ru
You can program your loop if you need.
setxkbmap
? – Marco Oct 30 '12 at 19:21.bashrc
is definitely not the right file for this. It's run when you start a shell, not when you log in. See Alternative to .bashrc – Gilles 'SO- stop being evil' Oct 31 '12 at 21:37