Dziwna sytuacja mnie ostatnio spotkała – na czystej instalacji openSUSE 13.2 na terminalach vtty nie działały mi.. backspace, tab i control (choć jakimś sposobem ctrl+alt+f* przełączał na inne terminale więc zamiast ctrl+c musiałem się przełączać na inny ekran i ubijać przez killall) oraz escape i jeszcze kilka innych. Objaw: albo niewidoczny znak (jak spacja, ale nie spacja) albo „?” czarny na białym tle. Po długich poszukiwaniach odnalazłem przyczynę tego nietypowego zachowania.
Ale po kolei.
Nie byłem w stanie uwierzyć, że to porysowana płyta uszkodziła Linuksowi rozpoznawanie backspace’a – i to nie była przyczyna (dla pewności puściłem md5 na płucie dvd).
Jakoś nie dawałem też wiary drugiemu administratorowi, że to wina openSUSE („tylko Debian/Gentoo!”).
Pierwsze co sprawdziłem to rzecz jasna układ klawiatury i język systemowy – przez localectl status – i nic podejrzanego tam nie było.
Prewencyjnie zresetowałem do en_US i klawiaturę na en-latin9 – localectl set-keymap –no-convert en-latin9 ( localectl list-keymaps listuje dostępne) i dalej nic (oczywiście robiłem zarówno reset konsoli jak i całego systemu).
Naszło mnie na sprawdzenie, czy przypadkiem to nie wina hardware’u – maszyna na której stawiałem ma chyba jakiś lekki problem z USB – opcja z irqpoll nic nie dała (ale klawiatura USB w pewnej konfiguracji BIOSu zaczęła działać; po resecie do fabrycznych była zbędna). Komenda showkeys pokazała mi, że system poprawnie odczytuje kody klawiszy – escape miał 1, backspace 14, tab 15 itd. Wskazówka: showkeys przejmuje klawiaturę i zwalnia ją po 10 sekundach od ostatniego naciśnięcia – można przeoczyć tą informację przy niskiej rozdzielczości i szybkim przejeżdżaniu po klawiaturze).
Ponowne generowanie initramu z różną konfiguracją opcji sd-vconsole, keyboard i consolefont nie pomagało (przez mkinitrd lub mkinitcpio zależnie od dystrybucji).
W końcu uznałem, że warto sprawdzić ostatnią rzecz w locale – czcionkę. Pozornie bez wpływu na zachowanie backspace. Otóż nic bardziej mylnego. Zmiana n najbardziej ograniczoną jaką się da – pomogła. setfont Lat2-Terminus16 -m 8859-2. Dopisanie w /etc/vconsole.conf
FONT=Lat2-Terminus16 FONT_MAP=8859-2
ustawia to na sztywno.
Witam.
Niestety mimo podanej niżej wskazówki, nadal jest to samo. W nowej czcionce zamiast znaków zapytania jest po prostu hmm.. puste pole.
Rozwiązaniem jest wpisanie komendy: unicode_start
Wtedy jest wszystko dobrze.. niestety działa to tylko do restaru. Może jakieś pomysły co z tym zrobić na stałe?
Pozdrawiam
Hmm, może to zależy od framebuffera i jego współpracy z kartą graficzną (stawiałem na maszynie serwerowej więc może ma coś zbyt starego, a nie uszkodzone pliki).
Ja wybrałem pierwszą czcionkę, która działała. Są zapisane w /usr/share/kbd/consolefonts – może jakaś inna zadziała.
Zawsze można dopisać unicode_start do bashrc – lokalnego ~/.bashrc albo globalnego /etc/bash.bashrc.local (ten może nie istnieć – trzeba go utworzyć) – tu jednak jest problem, że przy logowaniu nie będzie jeszcze unicode.
Powodzenia.