Linux: How to Set Different Layouts for 2 Keyboards

By Xah Lee. Date: .

Here's, how to set different layouts for 2 physical keyboards.

  1. First, use xinput to identify your keyboards.
  2. Then, use setxkbmap to set the layout.

Example:

# Use xinput to find your keyboards.

$ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=11   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=12   [slave  pointer  (2)]
⎜   ↳ Logitech Performance MX                   id=14   [slave  pointer  (2)]
⎜   ↳ E-Signal USB Gaming Keyboard              id=16   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated Camera                         id=9    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=13   [slave  keyboard (3)]
    ↳ Sennheiser Sennheiser 3D G4ME1            id=15   [slave  keyboard (3)]
    ↳ E-Signal USB Gaming Keyboard              id=17   [slave  keyboard (3)]

# My keyboards are id 10 (laptop integrated) and id 17 (external keyboard).

# Now, set my external keyboard to be Swedish layout, and my internal to Dvorak:
$ setxkbmap -device 17 se
$ setxkbmap -device 10 dvorak

2018-02-13, thanks to Henrik Sjöstrand, https://gist.github.com/hencjo/0710d51c5ba51e0aeb2d905f1e3a38f3