Eu criei uma regra do udev para definir o layout de um teclado USB:
ACTION=="add", ATTRS{idVendor}=="0e6a", ATTRS{idProduct}=="030c", ENV{XKBMODEL}="pc105", ENV{XKBLAYOUT}="us", ENV{XKBVARIANT}="dvorak", ENV{XKBOPTIONS}=""
Funciona em uma sessão de depuração X que apenas inicia um terminal. O teclado USB fica com o layout, o teclado do laptop não.
Não funciona em uma sessão do Gnome (não-Unity). O teclado externo recebe o mesmo layout dk
do teclado do laptop.
Eu tentei os dois
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
e
gsettings set org.gnome.desktop.input-sources sources '[]'
Como sugerido por várias pessoas, mas sem sorte.