Восстановление от Sys Rq + r

25

У меня была действительно плохая блокировка моего X-сервера, и мне пришлось выполнить Sys Rq + r, чтобы освободить клавиатуру от X и войти в консоль. Я смог убить процесс, который блокировал мою систему, и продолжить работу на моем все еще работающем X-сервере.

Теперь, когда я нажимаю Alt + F4, чтобы убить окно, моя система переключается на 4-ю консоль вместо того, чтобы убивать активное окно. Так что, похоже, моя клавиатура все еще находится в режиме освобождения.

Как мне отменить мою предыдущую команду Sys Rq + r, чтобы я мог продолжить свою работу на своем работающем X-сервере?

Бьярке Фрейнд-Хансен
источник

Ответы:

30

Я нашел решение сам, только после того, как задал этот вопрос.

Чтобы переключить консоль, на которой запущен X (обычно tty7), из режима ASCII в режим RAW выполните следующую команду:

sudo kbd_mode -s -C /dev/tty7

И теперь все работает как положено снова. :)

Более подробная информация доступна в вопросе: что означает режим клавиатуры raw / unraw?

Бьярке Фрейнд-Хансен
источник
Благодарность! Все еще пытаясь выяснить, есть ли способ сделать это для всех ttys одновременно, так же, как unRaw ...
хорошо относиться к своим модам
3
@phyzome Вы не хотите делать это для всех ttys, так как «обычный» (текстовый режим) tty ожидает режим ASCII (XLATE) или UTF-8 (UNICODE). В противном случае вы не сможете печатать там (это именно то, что исправляет SysRq-R). Ради интереса, примерьте kbd_mode -s -C /proc/self/fd/0tty, посмотрите, как он сломался, затем исправьте это с помощью SysRq-R.
никто не
1
Если вы используете TTY, в котором работает X, вы также можете использовать sudo kbd_mode -s -C /dev/tty$(sudo fgconsole).
TSJNachos117
0

Если вы обнаружите, что просматриваете эту конкретную команду в сети более одного раза (как я это сделал), вы можете использовать следующий сценарий оболочки для восстановления клавиатуры в используемом TTY:

#!/bin/bash

IFS=$'\n\t'
function ttys() {
    # find open files named `/dev/tty?` from commands named `Xorg`
    lsof -Fn -c Xorg -a /dev/tty? | \
      egrep '^n' |                  \
      sed -r 's/^n(.+)$/\1/g' |     \
      sort |                        \
      uniq
}

tty=$(ttys)
count_ttys=$(wc -l <<< $tty )

if [[ $count_ttys -gt 1 ]]; then
  echo 'more than one tty in use, exiting'
  exit 1
fi

echo binding keyboard to $tty
sudo kbd_mode -s -C $tty
runejuhl
источник