Я работаю в ArchLinux + plasma.
Частая беда при работе с более чем одной языковой раскладкой - ввод пароля не на том языке. Больше всего это парит на экране блокировки (lock screen). В этом случае, когда вводишь неправильно, приходится ждать еще некоторое время ждать, прежде чем можно ввести пароль заново. Такое поведение предотвращает подбор пароля.
Сегодня окончательно решил избавиться от этого неудобства
Хочу отметить, что на самом деле в моем случае етсь два экрана ввода пароля. Первый на входе в систему, его показывает SDDM, это login screen. второй - lock screen, и это отдельная песня.
SDDM / login screen
Настройка SDDM весьма проста. Пишем в /usr/share/sddm/scripts/Xsetup
#!/bin/sh
# Xsetup - run as root before the login dialog appears
setxkbmap "us"
Lock screen
Тут, признаюсь, я не смог найти более элегантного решения, чем реагировать на состояния экрана запущен/отключен. Хотя, хотелось бы какой-то конфиг.
База решения описана тут
Кратко, реагируем на событие из шины dbus, и исполняем произвольный код, в данном случае установка раскладки
Получается такой скрипт:
#!/bin/bash
#prints out, among other things;
# string "org.kde.screensaver"
#transform it to 'org.kde.screensaver'
service=$(\
dbus-send \
--session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus org.freedesktop.DBus.ListNames \
| grep -o '[^"]*.screensaver'
)
#prints out, among other things;
#method bool org.freedesktop.ScreenSaver.SetActive(bool e)
#transform it to 'org.freedesktop.ScreenSaver'
interface=$(
qdbus \
$service /ScreenSaver \
| grep -oP '[^ ]*(?=.SetActive)'
)
path='/ScreenSaver'
#monitor it with a while loop
dbus-monitor "type='signal',interface='$interface',member='ActiveChanged',path='$path'" \
| while read -r line; do
#ignore the metadata and pull the 'boolean <true/false>' line
read line
#check if it is set to true
if echo $line | grep -q 'true'; then
# echo "Locked at $(date)"
setxkbmap -layout "us"
else
setxkbmap -layout "us,ru"
# echo "Unlocked at $(date)"
fi
done
Если кратко, в момент блокировки экрана оставляем единственную раскладку, английскую. В момент разблокировки ставим опять две как обычно.
Скрипт нужно запустить на старте системы или сессии пользователя
Comments