Embora essa pergunta seja um pouco antiga, pensei em compartilhar minha solução, pois nenhuma das outras respostas abordava como ter esse trabalho na inicialização.
Minha situação:
Eu tenho um teclado Happy Hacking que se conecta via usb com chaves movidas (controle onde está o caps lock, etc.). Eu uso isso na maioria das vezes, mas às vezes eu gostaria de usar o teclado de laptop padrão ou outro teclado USB. Para esses teclados, criei um layout de teclado personalizado.
O truque é que o layout do teclado personalizado não deve ser aplicado ao teclado Happy Hacking.
Solução:
Criei um arquivo de configuração do Xorg como tal:
$ cat /etc/X11/xorg.conf.d/30-keyboard.conf
Section "InputClass"
Identifier "Happily Hacked Keyboard"
MatchDevicePath "/dev/input/event*"
MatchIsKeyboard "on"
Driver "evdev"
Option "XkbLayout" "us"
Option "XkbVariant" "hhk"
EndSection
Section "InputClass"
Identifier "Happy Hacking Keyboard"
MatchIsKeyboard "on"
MatchVendor "Topre_Corporation"
Driver "evdev"
Option "XkbLayout" "us"
Option "XkbVariant" "basic"
EndSection
A primeira parte diz basicamente para qualquer teclado padrão, aplique o layout dos EUA com a variante personalizada. A segunda parte diz que, para o feliz teclado de hackers, use o layout dos EUA com a variante básica.
Você pode combinar dispositivos com base em vários parâmetros: xorg doc