#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.
Комментариев нет:
Отправить комментарий