#linux #kde
Имеется Arch Linux с установленной KDE последней версии — 5.10.0. В качестве менеджера
входа в систему используется SDDM. Имеется ровно две раскладки — русская и английская.
На экране входа будет выбрана последняя использованная раскладка. Как изменить это,
чтобы независимо от последней использованной раскладки на экране входа всегда была
английская раскладка? Последовательность действий, иллюстрирующая проблему:
Включаю компьютер, появляется экран входа, раскладка клавиатуры — английская (это
хорошо)
Вхожу в систему, изменяю раскладку клавиатуры на русскую
Блокирую экран с помощью CtrlAltL, либо закрываю и открываю крышку ноутбука
В обоих случаях появляется экран входа с русской раскладкой клавиатуры (это плохо)
Проблема в том, что пароль состоит из английских символов, и каждый раз при входе
мне приходится смотреть, какая сейчас раскладка и менять её, если она русская.
Ответы
Ответ 1
Я тоже задавался этим вопросом.
Вариант 1 (проверка по наличию процесса lockscreen)
Создал скрипт
$ cat ~/scripts/enru.sh
#!/bin/bash
CHKSTR=`ps aux| grep -v grep | grep lockscreen`
if [[ $CHKSTR == *lockscreen* ]]; then
kbd=`setxkbmap -print | sed -n 's#xkb_symbols[^"]*"\([^"]*\)".*$#\1#p' | awk
-F+ '{print $2}'`
if [[ $kbd == ru ]]; then
xdotool key 'alt+shift'
fi
fi
Добавил в crontab от имени пользователя строку
$crontab -u USERNAME -e
* * * * * DISPLAY=:0 bash ~/scripts/enru.sh >/dev/null 2>/dev/null
Скрипт каждую минуту проверяет, запущен ли процесс usr/lib/unity/unity-panel-service
--lockscreen-mode и, при его наличии, запускает проверку и изменение раскладки клавиатуры.
Вариант 2 (запуск при нажатии Ctrl+Alt+L)
Создал скрипт
$ cat ~/scripts/enru2.sh
#!/bin/bash
gnome-screensaver-command --lock && gsettings set org.gnome.desktop.input-sources
current 0
# current 0 говорит о том, что нужно включить дефолтную раскладку en_EN. current
1, соответственно, ru_RU
Проверяем, есть ли у нас дополнительные комбинации клавиш, которые мы уже используем:
$ gsettings get org.gnome.settings-daemon.plugins.media-keys custom-keybindings
['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']
custom0 говорит о том, что одна комбинация уже добавлена, поэтому надо добавить следующую
- custom1:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/',
'/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/']"
Если же вы добавляете свою первую комбинацию клавиш, то выполните команду
$ gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/']"
Отключаем хоткеи для системного lockscreen'а:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys screensaver ''
Задаём имя нашему хоткею:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
name 'Lockscreen'
Указываем, какую команду надо выполнять:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
command "/home/$USER/scripts/enru2.sh"
Задаём комбинацию клавиш для запуска блокировки экрана:
$ gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
binding 'l'
Ответ 2
Имеются два независимых варианта решения, причём можно использовать оба одновременно.
В обоих вариантах используется программа xkb-switch. Была выбрана эта программа,
так как она позволяет легко переключить раскладку на английскую (альтернативный способ
— определять раскладку, и если она русская, эмулировать нажатие комбинации клавиш смены
раскладки с помощью xdotool — может не сработать). В Arch Linux установить xkb-switch
можно из AUR.
Первый вариант работает, если вы блокируете сеанс с помощью перехода в ждущий режим
(то есть, например, при закрытии и последующем открытии крышки ноутбука). Заключается
он в написании скрипта, который будет выполняться непосредственно перед переходом компьютера
в ждущий режим. Для systemd скрипт может выглядеть следующим образом:
# /etc/systemd/system/suspend@.service
[Unit]
Description=Change keyboard layout to english immediately before suspend
Before=sleep.target
[Service]
User=%I
Type=simple
Environment=DISPLAY=:0
ExecStart=/usr/local/bin/xkb-switch -s us
[Install]
WantedBy=sleep.target
Чтобы скрипт заработал, нужно выполнить следующую команду:
sudo systemctl enable suspend@имя_вашего_пользователя.service
Второй вариант работает, если вы блокируете сеанс, но не выключаете компьютер (так
происходит, например, при нажатии CtrlAltL). Заключается он в написании скрипта, который
будет выполняться каждые несколько десятков секунд (например, каждую минуту). Этот
скрипт будет проверять, заблокирован ли сеанс (например, проверив, существует ли процесс
с именем, содержащим lockscreen), и если заблокирован, то менять раскладку на английскую.
Подробное описание второго варианта для Ubuntu.