Odzyskiwanie z Sys Rq + r

25

Miałem naprawdę złe zawieszenie mojego serwera X i musiałem wykonać Sys Rq + r, aby zwolnić klawiaturę z X i dostać się do konsoli. Byłem w stanie zabić proces blokujący mój system i kontynuować pracę na wciąż działającym serwerze X.

Teraz za każdym razem, gdy np. Naciskam Alt + F4, aby zabić okno, mój system przełącza się na 4. konsolę zamiast zabijać aktywne okno. Wygląda więc na to, że moja klawiatura wciąż jest w trybie zwolnionym.

Jak cofnąć poprzednie polecenie Sys Rq + r, aby móc kontynuować pracę na działającym serwerze X?

Bjarke Freund-Hansen
źródło

Odpowiedzi:

30

Sam znalazłem rozwiązanie zaraz po zadaniu tego pytania.

Aby przywrócić konsolę, w której działa X (zwykle tty7), z trybu ASCII do trybu RAW wykonaj następującą komendę:

sudo kbd_mode -s -C /dev/tty7

A teraz wszystko działa zgodnie z oczekiwaniami. :)

Więcej informacji dostępnych w pytaniu: Co oznacza tryb klawiatury raw / unraw?

Bjarke Freund-Hansen
źródło
Dzięki! Wciąż próbuję dowiedzieć się, czy jest sposób, aby to zrobić dla wszystkich ttys naraz, w ten sam sposób, w jaki unRaw robi ...
traktuj swoje mody dobrze
3
@ phyzome Nie chcesz tego robić dla wszystkich tty, ponieważ „normalny” (tryb tekstowy) tty oczekuje trybu ASCII (XLATE) lub UTF-8 (UNICODE). W przeciwnym razie nie możesz tam wpisać (to właśnie naprawia SysRq-R). Dla zabawy wypróbuj kbd_mode -s -C /proc/self/fd/0tty, zobacz, jak się psuje, a następnie napraw to przez SysRq-R.
nikt
1
Jeśli używasz TTY, w którym działa X, możesz także użyć sudo kbd_mode -s -C /dev/tty$(sudo fgconsole).
TSJNachos117
0

Jeśli wielokrotnie wyszukujesz w sieci to polecenie (tak jak zrobiłem), możesz użyć następującego skryptu powłoki, aby ponownie przechwycić klawiaturę w używanym 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
źródło