Изменить языковой макет в блокировке экрана
Я пользователь Xubuntu 14.04.2. У меня есть две раскладки клавиатуры: русская и английская. Иногда, когда я закрываю свой ноутбук, а затем возвращаюсь и пытаюсь продолжить работу, Xubuntu требует, чтобы я ввел свой пароль пользователя (мой пароль состоит из английских букв и цифр).
Однако, часто моя раскладка клавиатуры была установлена на русский язык, и переключение клавиш не работает.
Мне нужно перезагрузить ноутбук, чтобы исправить это.
Как мне поступить?
6 ответов
У меня точно такая же проблема, как и у вас, и я делаю это:
избавляться от
gnome-screensaverот:sudo apt-get purge gnome-screensaverУстановите заставку X:
sudo apt-get install xscreensaver xscreensaver-data xscreensaver-gl
Всякий раз, когда вы забыли переключиться обратно на английский до того, как система заблокируется, нажмите Ctrl+Alt+F1, чтобы войти в систему как пользователь-администратор и kill -9 xscreensaver и ты вернулся!
(Это просто обходной путь, а не реальное "решение", но оно работает для меня и определенно лучше, чем выключение и перезапуск)
Я использую Ubuntu 21.04, и решение «dbus-monitor» у меня не сработало, поэтому я делюсь своим подходом к нему.
с использованием
xscreensaver-commandмы можем отслеживать изменения состояния скринсейвера.
Затем, когда статус изменится на
LOCK, мы можем изменить макет на
usи измените его обратно, как только заставка «освободит» рабочий стол
Получив сценарий, я запустил его при входе в систему.
xscreensaver-command --watch |
while read MSG; do
CMD=`echo $MSG | awk '{print $1}'`
if [[ "$CMD" == "LOCK" ]]; then
##### CURRENTL=$(setxkbmap -query | grep layout | awk '{print $2}')
echo "Locked with current layout ${CURRENTL}"
setxkbmap us
fi
if [[ "$CMD" == "UNBLANK" ]]; then
##### setxkbmap $CURRENTL
setxkbmap us,il,us
echo -n "Returning to "
setxkbmap -query | grep layout | awk '{ print $2 }'
fi
# echo $CMD
done
Ubuntu 16.04 использует другое имя интерфейса:
dbus-monitor --session "type=signal,interface=com.canonical.Unity.Session" |
while read MSG; do
LOCK_STAT=`echo $MSG | egrep -o member='.*' | cut -d '=' -f 2`
if [[ "$LOCK_STAT" == "Locked" ]]; then
CURRENTL=$(setxkbmap -query | grep layout | awk '{print $2}')
echo "Locked with current layout ${CURRENTL}"
setxkbmap us
fi
if [[ "$LOCK_STAT" == "Unlocked" ]]; then
setxkbmap $CURRENTL
echo -n "Returning to"
setxkbmap -query | grep layout
fi
done
[Редактировать] Это может быть обходной путь, но сейчас его путаница с другими сочетаниями клавиш переключения макетов
[Оригинал] Этот работал для меня, НО я не мог запустить его при запуске и поддерживать его в фоновом режиме.
Прослушайте сигнал блокировки и измените раскладку на пароль. (уродливый обходной путь, но, кажется, работает)
dbus-monitor --session "type=signal,interface=org.gnome.ScreenSaver" |
while read MSG; do
LOCK_STAT=`echo $MSG | grep boolean | awk '{print $2}'`
if [[ "$LOCK_STAT" == "true" ]]; then
setxkbmap us
else
setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll us,il
fi
done
Я только что улучшил предыдущие примеры для Ubuntu 20.04.
dbus-monitor --session "type=signal,interface=org.gnome.ScreenSaver" |
while read MSG; do
LOCK_STAT=`echo $MSG | grep boolean | awk '{print $2}'`
if [[ "$LOCK_STAT" == "true" ]]; then
CURRENTL=$(setxkbmap -query | grep layout | awk '{print $2}')
echo "Locked with current layout ${CURRENTL}"
setxkbmap us
fi
if [[ "$LOCK_STAT" == "false" ]]; then
setxkbmap $CURRENTL
echo -n "Returning to "
setxkbmap -query | grep layout | awk '{ print $2 }'
fi
done
Xscreensaver великолепен, но разработчик, JWZ, ясно дал понять, что не собирается поддерживать несколько клавиатур.
xsecurelock - лучшее решение. Он поддерживает переключение раскладок клавиатуры из заставки, а также выдает жирное красное уведомление, если включена блокировка заглавных букв. У него нет встроенного таймера, как у xscreensaver, поэтому вам нужно будет следовать инструкциям на их веб-странице, чтобы он запускался автоматически после тайм-аута.