Linux: Раскладка переключается не с первого раза

18 Aug 2018

[caption id=”attachment_2466” align=”alignleft” width=”150”] Caps_lock Картинка из википедии[/caption]

Не всегда виновато железо.

Возникла странная проблема: нажатие капслока не приводило к переключению раскладки сразу.

Клавиатура мембранная и достаточно старая, а значит вполне вероятно, что капсу плохо. Но увы, с новой клавиатурой все то же самое.

Только повторное нажатие переводило раскладку в английскую.

$ cat /etc/X11/xorg.conf.d/00-keyboard.conf
# Read and parsed by systemd-localed. It's probably wise not to edit this file  
# manually too freely.  
Section "InputClass"  
 Identifier "system-keyboard"  
 MatchIsKeyboard "on"  
 Option "XkbLayout" "us,ru"  
 Option "XkbVariant" ","  
 Option "XkbOptions" "grp:caps\_toggle,grp\_led:scroll,compose:ralt"  
EndSection

При этом последовательно нажимая буквенную кнопку, а следом за ней переключение раскладки я получал такую строку как ниже.

Фaффaффaффaффa

Что-то тут не так. Почему переключалка не сразу меняла раскладку?

Давайте посмотрим на вывод информации о текущей раскладке?

$ setxkbmap -query | grep layout
layout: us,ru,ru

Стоп. Почему так (и да - это причина бед)?

Менеджер у нас xfce. Поэтому смотрим в настройки клавиатуры.

Проблемы с раскладкой

Откуда он берет информацию о второй ru-раскладке? Ось у нас кентось, поэтому проверяем дополнительно localectl.

$ localectl
  
 System Locale: LANG=ru\_RU.UTF-8  
 VC Keymap: us  
 X11 Layout: us,ru  
 X11 Variant: ,  
 X11 Options: grp:caps\_toggle,grp\_led:scroll,compose:ralt

Тоже все верно.

$ tree /etc/dconf/db/
  
/etc/dconf/db/  
├── distro  
├── distro.d  
│   └── locks  
├── gdm  
├── gdm.d  
│   └── locks  
├── local  
├── local.d  
│   └── locks  
├── site  
└── site.d  
└── locks

И тут ничего нет, что могло бы ломать ввод.

После множества экспериментов с раскладкой было выяснено, что источником проблем является gdm. Именно он выставлял дополнительный лайоут в момент старта на основании информации о текущей локали.

В качестве решения проблемы был выполнен переход на lightdm.