LINUX.ORG.RU

Не работает Backspace в tty

 , ,


0

2

Банальный вопрос, который много раз задавали, только вот поиск по слову «backspace» не дал того, что не дал.

Описание проблемы: До того момента, пока я не введу правильные логин и пароль и пока не появится приглашение bash, в tty1-12 не работает клавиша Backspace. Вместо стирания последнего символа при каждом нажатии печатается ^H. Shift-Backspace работает, но это неудобно. В чём может быть дело?


Ответ на: комментарий от xenith

Но hint был правильный. Глянь, какой TERM установлен у login. Скорей всего это vt100. После логина он меняется, скорей всего, на vt220 или linux.

PS: давно не ковырял всё это, т.ч. что где смотреть уже не помню.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

Это было едва ли не первой моей мыслью, но я поспешно решил, что проверить значение $TERM до того, как залогинишься, нельзя. Попробую.

xenith ()
Ответ на: комментарий от beastie

Взял вот этот скрипт, дёргаемый для запуска htop в tty без login'а, дописал в конец $TERM. Как ни странно, получил «Press a key to launch htop on linux». Там можно печатать что угодно (htop не запустится до нажатия Enter), так что я проверил – ^H также присутствует, а Backspace не работает даже с шифтом. Куда теперь копать?

xenith ()
Ответ на: комментарий от salsa

Может быть, этим проблему и можно решить, только настоящая причина вряд ли там. Файлы terminfo я никогда не трогал, а раньше как-то работало ведь. Если других вариантов не будет, то попробую.

xenith ()

зачем тебе backspace, когда есть пѓавославный ^H? :)

aol ★★★★★ ()
Ответ на: комментарий от xenith

дописал в конец $TERM.

Что имено и куда вы дописали? Вобще, read встроенная команда bash, сомнительно, чтобы bash анализировал TERM перез вызовом read, ИМХО, только на момент запуска скрипта.

а раньше как-то работало ведь

Раньше это когда? До обновления или в другом дистрибутиве? Вобще, о каком дистрибутиве идёт речь и какой там процесс читает login и password? ″ps -A f u e″ показывает процессы с переменными среды, чтобы было видно где какой TERM.

mky ★★★★★ ()
Ответ на: комментарий от vel

После залогинивания всё работает, но если, например, ошибся в логине или пароле, то надо начинать по новой.

xenith ()
Ответ на: комментарий от mky

только на момент запуска скрипта

Конечно.

ps -A fue

root     29847  0.5  0.0  15648  1868 tty2     Ss+  15:54   0:00 /sbin/agetty --noclear tty2 linux LANG= LC_COLLATE= LC_MESSAGES= LC_MONETARY= LC_NUMERIC= LC_TIME= PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TERM=linux LANGUAGE= LC_CTYPE= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=

Например.

xenith ()
Ответ на: комментарий от xenith

Там term и параметром для agetty передаётся, и в переменной есть.

xenith ()
Ответ на: комментарий от vel

C-W там работает. В случае логина из одного слова получается одно и то же. :)

xenith ()
Ответ на: комментарий от xenith

Вы не ответили на вопрос про дистрибутив и про то, когда это началось, раз раньше работало.

Вобще, странно, linux console и должна посылать ^H по BackSpace, почему agetty не понимает не понятно, может /usr на отдельном разделе и terminfo не доступен в момент запуска agetty?

mky ★★★★★ ()
Ответ на: комментарий от mky

Дистр – Gentoo. Началось давно, и я долго не обращал внимания (поэтому не запомнил, когда именно – весной уже было), но сейчас дошли руки.

На отдельном только /home/ и несистемные каталоги. С доступом к terminfo, вроде, всё хорошо.

$ ls -la /usr/lib/terminfo/l/linux
lrwxrwxrwx 1 root root 32 Sep 18 17:01 /usr/lib/terminfo/l/linux -> ../../../../etc/terminfo/l/linux
$ ls -la /etc/terminfo/l/linux
-rw-r--r-- 1 root root 1780 Sep 18 17:01 /etc/terminfo/l/linux
xenith ()
Ответ на: комментарий от mky

linux console и должна посылать ^H по BackSpace

Нет, она должна посылать ^? 127 0177 0x7f (Delete, Забой).
См. showkey -a. Чему и соответствуют настройки stty по умолчанию: erase = ^?;.

ABW ★★★★★ ()
Ответ на: комментарий от xenith

См. сообщение выше. Так что у тебя просто не грузится правильная раскладка.
Если у тебя правильный (без systemd) Gentoo, то включи логирование загрузки в /etc/rc.conf (rc_logger=YES), посмотри, что говорит по поводу выполнения keymaps и termencoding. И что у тебя в /etc/conf.d/keymaps.
И terminfo во время логина ни при чём, его подхватывает bash-евский readline позже. Можешь убедиться, запустив dash или posh, если они есть.

ABW ★★★★★ ()
Ответ на: комментарий от xenith

Тогда ничем не могу помочь. Кроме предполложения, что он (systemd) тебе всё и поломал.

ABW ★★★★★ ()
Ответ на: комментарий от ABW

По Backspace получаю один в один то же самое, что по C-H:

^H 8 0010 0x08

^? 127 0177 0x7f

Это по S-Backspace. В иксах получаю и по бекспейсу, как и должно быть.

xenith ()
Ответ на: комментарий от xenith

Попробуйте в исходниках вашего ядра, которые компилировались найти файл: ″drivers/tty/vt/defkeymap.c″. Там будет объявление массивов plain_map[NR_KEYS] и shift_map[NR_KEYS]. Во второй строке предпоследнии числа должны быть одинаковыми и содержать ″0xf07f″.

mky ★★★★★ ()
18 апреля 2016 г.
Ответ на: комментарий от xenith

У меня не работала клавиш. Когда нажму Backspace какую-то квадратные символи вводил. А месту bacpspace был H. Есть много решение. Но я за минуту решил. Так:включаешь пк и нажимаеш все что есть. И вуаля!

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.