Изменить языковой макет в блокировке экрана

Я пользователь 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, поэтому вам нужно будет следовать инструкциям на их веб-странице, чтобы он запускался автоматически после тайм-аута.

Другие вопросы по тегам