как передать по ssh нажатие клавиш ctrl + home
Модератор: SLEDopit
как передать по ssh нажатие клавиш ctrl + home
В качестве файлового менеджера использую Midnight Commander для правки конфигов использую его встроенный редактор mcedit, для которого в пользовательском файле mc.keymap прописаны комбинации клавиш:
ctrl + home перемещаюсь в начало строки
ctrl + end в конец строки
home в начало файла
end в конец файла
К такой комбинации клавиш привык настолько, что нажимаю их уже на автомате на уровне моторики. Отвыкать и привыкать к новым не хочу.
На сервере в файле ~./inputrc прописано следующее:
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Может я ошибаюсь но это означает комбинацию ctrl + home или end или нет?
На клиенте такие же настройки.
В дальнейшем рассматривает буквенно-цифровую консоль или консоль в фреймбуфере, в эмуляторах понятно, что надо смотреть ещё ихние комбинации клавиш.
Если на клиенте или на сервере в консоли нажать ctrl + v, а потом например ctrl + home то выдаст \e[1~ , а так же если вместо ctrl + home нажать просто одну клавишу home то тоже выдаст \e[1~ , при этом при нажатии просто ctrl в консоле ничего не пишется.
Получается что код (или как правильно назвать не знаю) \e[1~ соответствует нажатию клавиши home без ctrl?
Получается так, что если работать в mcedit непосредственно в консоли он получает код нажатия ctrl + home и соответственно его обрабатывает как прописано в его конфиге, а вот если работать через удалённое пожключение через ssh клиент, то mcedit получает только код нажатия home без ctrl и соответственно я нажимаю ctrl + home , и попадаю не в начало строки, а в начало файла.
Как по ssh передать именно нажатие ctrl + home и какой на самом деле должен иметь код одновременное нажатие этих двух клавиш?
ctrl + home перемещаюсь в начало строки
ctrl + end в конец строки
home в начало файла
end в конец файла
К такой комбинации клавиш привык настолько, что нажимаю их уже на автомате на уровне моторики. Отвыкать и привыкать к новым не хочу.
На сервере в файле ~./inputrc прописано следующее:
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Может я ошибаюсь но это означает комбинацию ctrl + home или end или нет?
На клиенте такие же настройки.
В дальнейшем рассматривает буквенно-цифровую консоль или консоль в фреймбуфере, в эмуляторах понятно, что надо смотреть ещё ихние комбинации клавиш.
Если на клиенте или на сервере в консоли нажать ctrl + v, а потом например ctrl + home то выдаст \e[1~ , а так же если вместо ctrl + home нажать просто одну клавишу home то тоже выдаст \e[1~ , при этом при нажатии просто ctrl в консоле ничего не пишется.
Получается что код (или как правильно назвать не знаю) \e[1~ соответствует нажатию клавиши home без ctrl?
Получается так, что если работать в mcedit непосредственно в консоли он получает код нажатия ctrl + home и соответственно его обрабатывает как прописано в его конфиге, а вот если работать через удалённое пожключение через ssh клиент, то mcedit получает только код нажатия home без ctrl и соответственно я нажимаю ctrl + home , и попадаю не в начало строки, а в начало файла.
Как по ssh передать именно нажатие ctrl + home и какой на самом деле должен иметь код одновременное нажатие этих двух клавиш?
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
mcedit не пользуюсь, но разве на него как-то влияет содержимое inputrc? Это конфиг readline, коего я среди зависимостей mc не наблюдаю.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Да всё верно. Но, получается следующая ситуация. Когда в фоне открыт mc и в нём по F4 для редактирования файл то он перехватывает нажатия клавиш и согласно своему конфигу соответственно их обрабатывает.Bizdelnick писал: ↑09.01.2022 12:04mcedit не пользуюсь, но разве на него как-то влияет содержимое inputrc? Это конфиг readline, коего я среди зависимостей mc не наблюдаю.
Если же я по ssh связываюсь с сервером и в нём запускаю mc и по F4 открываю файл для редактирования то в mc уже приходит код нажатой клавиши от клиента, который формируется клиентской библиотекой readline.
Прописанные у клиента в файле ~/.inputrc строки:
"\e[1~": beginning-of-line
"\e[4~": end-of-line
есть не что иное как нажатие просто клавиш home и end, но не сочетание ctrl+home и ctrl+end, поэтому mc на сервере и принимает только home и end.
Как прописать именно нажатие сочетаний клавиш ctrl+home и ctrl+end в этой readline - ~/.inputrc я найти не могу.
Но может всё происходит не так и я ошибаюсь и ищу не в том направлении?
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Причём тут какая-то «клиентская библиотека readline»? Перехватывать нажатие клавиш может только терминал. Что касается escape-последовательностей, они тоже зависят от терминала. Я вот посмотрел у себя, в виртуальной консоли нажатие что Home, что Ctrl+Home становится ^[[1~, неважно, локально или по ssh. А в terminator локально Home — ^[OH, Ctrl+Home — ^[[1;5H, по ssh — соответственно ^[[H и ^[[1;5H. Вы каким терминалом пользуетесь? Другие пробовали?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
На клиенте и на сервере база данных возможностей терминала - terminfo у меня linux. На клиенте в графике пользуюсь эмулятором терминала konsole. На сервере буквенно-цифровой режим, даже не фреймбуфер. На сервере не знаю, (надо посмотреть), а на клиенте одинаково что ctrl+home, что просто home - ^[[1~
Наверное надо править terminfo - linux?
Наверное надо править terminfo - linux?
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Переменная окружения TERM корректно пробрасывается ssh?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Я не знаю как это узнать, корректно она пробрасывается или нет.
На клиенте и на сервере переменная окружения TERM=linux - одинакова.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Я и имел в виду, что она должна быть одинакова. Но linux — это виртуальная консоль, в konsole должно быть другое значение (не помню, какое). Вы, часом, не переопределяете эту переменную где-нибудь в bashrc или ещё где-то? Так делать нельзя, я Вам ещё пять лет назад об этом писал. Удивительно, если Вы с тех пор только первый раз граблями получили.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Переопределяю и на сервере и на клиенте в ~/.bashrc на linux, так как по умолчанию вроде стоит xterm.Bizdelnick писал: ↑10.01.2022 15:05Вы, часом, не переопределяете эту переменную где-нибудь в bashrc или ещё где-то?
Добавлено (15:44):
В папке terminfo файл linux есть.- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
По умолчанию нигде ничего не стоит и не должно. Эту переменную устанавливает сам эмулятор терминала. Уберите её отовсюду, где прописали.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Полностью убрал на сервере и на клиенте. После этого на сервере и на клиенте терминал стал xterm, по умолчанию он такой и есть. Но почему то ctrl + home и ctrl + end имеют одинаковые кода как и в терминале linux и соответственно они такие же как и просто home и end и соответственно не работает как и раньше.Bizdelnick писал: ↑10.01.2022 17:02По умолчанию нигде ничего не стоит и не должно. Эту переменную устанавливает сам эмулятор терминала. Уберите её отовсюду, где прописали.
Почему то после нажатия ctrl + v и последующего нажатия просто клавиши ctrl в терминале никакого кода не выдаётся, не знаю должен выдаваться или нет?
Наверное всё таки придётся править файлик terminfo - linux
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Нет, не должен. Это же модификатор.
Что Вы там собрались править и зачем? Он и использоваться не должен с konsole.
Добавлено (02:18):
Нашёл-таки машину, где установлен mc, проверил — то же самое, по ssh на ctrl-home и ctrl-end реагирует как на home и end без модификатора.Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Интересно, можно или нет сделать так, что бы и по ssh реагировал не как home и end, а как ctrl + home и ctrl + end, если возможно, то интересно как это сделать?Bizdelnick писал: ↑11.01.2022 01:57Нашёл-таки машину, где установлен mc, проверил — то же самое, по ssh на ctrl-home и ctrl-end реагирует как на home и end без модификатора.
Добавлено (10:54):
Думаю в начале надо добиться, что бы без ssh в терминале нажатия ctrl + home имел отличный код от просто нажатия home. Добиться этого думаю можно только правкой файла terminfo -> linux, других способов не знаю.Re: как передать по ssh нажатие клавиш ctrl + home
Обходиться только консолью без файлового менеджера это здорово! Я как то хотел этому научиться, но не смог. С видом перечня файлов и папок в терминале как то привычнее, без них чувствуешь дискомфорт избавиться от которого так и не удалось.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Так имеет, см. выше.
Вы, похоже, вообще не понимаете, для чего он нужен. Он всего лишь содержит описание того, каким образом взаимодействовать с терминалом (конкретно — виртуальной консолью linux), на само поведение терминала он не влияет. И, ещё раз, если Вы используете konsole, которая ведёт себя несколько иначе, чем виртуальная консоль linux, использовать файл linux противопоказано.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Не надо его ни на что менять! И на linux в том числе.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 10
Re: как передать по ssh нажатие клавиш ctrl + home
Привожу пример. Есть декстоп. Открываю терминал и пишу
Есть виртуалка в qemu, которая запускается с ключом -nographic и выдаёт выхлоп по ttyS0. Запускаю её, логинюсь. Даю команду
Пробую в виртуалке разный софт: htop, mc и т.д. Клавиши f1-10 вообще не работают, сочетания клавиш тоже работают не все. Такое происходит потому, что программа в виртуалке не знает о том, какой терминал используется на самом деле. Делаю export TERM=xterm-256color. после этого программы в виртуалке выглядят как положено и все клавиши работают как обычно. По ssh такая же песня.
Код: Выделить всё
$ echo $TERM
rxvt-unicode-256color
Код: Выделить всё
# echo $TERM
vt100
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Это совершенно другой случай. ssh сам пробрасывает значение переменной TERM, когда создаёт псевдотерминал, поэтому там переопределять её не надо. qemu же в принципе не может ничего пробросить, потому что эмулирует аппаратный терминал.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
- Сообщения: 10
Re: как передать по ssh нажатие клавиш ctrl + home
Понял, буду знать, спасибо.
Re: как передать по ssh нажатие клавиш ctrl + home
Этот вариант не подходит так как при xterm (как в моём случае и при linux) ctrl+home и ctrl+end не работает.
Получается, что настроить работу ctrl+home и ctrl+end отличную от home и end нельзя...?
Пробовал, то же самое, не работает, менял на клиенте и на сервере. Проверял не с konsole а с фреймбуферского терминала без иксов переходя на него по нажатию на ctrl+alt+F1
Да действительно, я как то не подумал, ведь konsole может переопределять нажатия клавиш.Bizdelnick писал: ↑11.01.2022 01:57Что Вы там собрались править и зачем? Он и использоваться не должен с konsole.
Посмотрел в настройках клавиатуры konsole и оказалось, что нажатия клавиши home имеет код \E[1~ а нажатие клавиши end
имеет код \E[4~ следуя из этого логично можно предположить что нажимая в терминале konsole ctrl+v home выведется \E[1~ , а end \E[4~ так оно и есть, здорово и отлично!
Добавляю нажатия клавиш Ctrl+home с кодом \E[1;5H ctrl+end с кодом \E[1;5F перезапускаю konsole нажимаю ctrl+v ctrl+home и о УЖАС! получаю всё тот же \E[1~ , а нажимая ctrl+v ctrl+end получаю \E[4~
Почему так?
Неужели не получится нажатие на ctrl+home сделать отличным от нажатия на home?
Проверку xterm то же осуществлял без иксов с фреймбуферского терминала.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
Так и при linux ведь не работает. Это не вариант, который не подходит, это норма, при которой также наблюдается описанное Вами поведение.
Не знаю. Надо разбираться, возможно, вплоть до исходников openssh.
Но ведь локально у Вас всё работает, как должно, проблема только при ssh-подключении, верно? Значит, причина не в эмуляторе терминала.
Добавлено (13:06):
Простите, что?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
Ну вот же......
То же самое только с xterm
Да локально работает и на сервере и на клиенте. Я не уверен, что не в терминале, может mc как то перехватывает нажатия клавиш и обрабатывает по своему согласно своим конфикам. Ведь он в фоне, хоть и запущен в терминале.Bizdelnick писал: ↑13.01.2022 13:05Но ведь локально у Вас всё работает, как должно, проблема только при ssh-подключении, верно? Значит, причина не в эмуляторе терминала.
Ай да линукс.... Я понимаю, когда после обновлений в виндовс 10 перестали работать принтеры расшаренные по сети, типа выкидывайте эти принтеры и скорее бегите покупать принтеры с ip адресами и после нескольких последующих обновлений принтеры так и не заработали. Это виндовс - коммерция, не для людей, для выколачивания денег.Bizdelnick писал: ↑13.01.2022 13:05v4567 писал: ↑13 янв 2022 10:10
Получается, что настроить работу ctrl+home и ctrl+end отличную от home и end нельзя...?
Не знаю. Надо разбираться, возможно, вплоть до исходников openssh.
Но линукс...... Получается для того что бы настроить пару клавиш надо править исходники..!?!?!?
Re: как передать по ssh нажатие клавиш ctrl + home
Возможно, что это только ваша проблема. Локальная.
Хотя, если не хотите править руками - напишите разработчику.
Re: как передать по ssh нажатие клавиш ctrl + home
Интереса ради сходил по ssh на другую машину и попытался понажимать кнопки. В mcedit (по крайней мере у меня) поведение "обратное" - без Ctrl переход происходит к началу/концу строки, с Ctrl - к началу/концу файла, однако это работает, во всяком случае, варианты с нажатым и ненажатым Ctrl различаются. Так что это явно какая-то частная проблема, максимум - проблема настроек в конкретном дистрибутиве.
P.S. У меня обе машины OpenSUSE Thumbleweed, терминал MATE, в остальном все стандартно.
P.S. У меня обе машины OpenSUSE Thumbleweed, терминал MATE, в остальном все стандартно.
Re: как передать по ssh нажатие клавиш ctrl + home
В ArchWiki есть такое решение, относительно сломанных комбинаций в mc:
Сломаны сочетания клавиш
С некоторыми определениями терминалов вроде screen-256color или xterm-termite сочетания клавиш, такие как Shift+F6, могут не работать или работать как другие сочетания. Чтобы исправить это, назначьте последовательности терминала вручную в диалоговом окне Распознавание клавиш в настройках.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Re: как передать по ssh нажатие клавиш ctrl + home
Если не ошибаюсь то это немного про другое, здесь в конкретно в этом дистрибутиве в самом терминале эти клавиши имеют другие кода (получается mc не перехватывает нажатие клавиш, а получает кода от терминала, тогда по логике вещей у меня локально всё ведь работает и должно различаться ctrl+home и home , а оно не различается...!?!?!?!) и настроить их можно в псевдографическом интерфейсе самого mc или в файлике ini.UnixNoob писал: ↑13.01.2022 15:41В ArchWiki есть такое решение, относительно сломанных комбинаций в mc:
Сломаны сочетания клавиш
С некоторыми определениями терминалов вроде screen-256color или xterm-termite сочетания клавиш, такие как Shift+F6, могут не работать или работать как другие сочетания. Чтобы исправить это, назначьте последовательности терминала вручную в диалоговом окне Распознавание клавиш в настройках.
Добавлено (16:00):
А Вы можете глянуть локально и удалённо какие переменные $TERM, что прописано в /etc/inputrc и ~/.inputrc, если локально и удалённо переменная TERM=xterm то преобразовать этот файлик в текстовый командой:Фантом писал: ↑13.01.2022 15:32Интереса ради сходил по ssh на другую машину и попытался понажимать кнопки. В mcedit (по крайней мере у меня) поведение "обратное" - без Ctrl переход происходит к началу/концу строки, с Ctrl - к началу/концу файла, однако это работает, во всяком случае, варианты с нажатым и ненажатым Ctrl различаются. Так что это явно какая-то частная проблема, максимум - проблема настроек в конкретном дистрибутиве.
P.S. У меня обе машины OpenSUSE Thumbleweed, терминал MATE, в остальном все стандартно.
infocmp -r1 xterm > xterm
и посмотреть, что там прописано по поводу клавиш ctrl+home, ctrl+end, home, end и если заходите с графического эмулятора терминала, то что в нём в настройках клавиатуры прописано по поводу этих клавиш.
Я просто у себя по аналогии наоборот сделаю и всё, думаю тогда должно заработать, раз у вас работает.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: как передать по ssh нажатие клавиш ctrl + home
И зачем Вы это делали? В виртуальной консоли правильное значение — linux, о чём я Вам неоднократно писал выше.
Если это баг, то да, для того, чтобы его исправить, надо править исходники. А Вы думали, это как-то иначе делается?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: как передать по ssh нажатие клавиш ctrl + home
v4567, картина такая: в переменной xterm-256color , в домашнем каталоге в любом случае ничего, /etc/inputrc включает довольно длинный /etc/inputrc.keys (923 строки), но конкретно чего-то специфического для этого терминала там нет (просто для xterm - есть). Все это верно и для локальной, и для удаленной машин.
Re: как передать по ssh нажатие клавиш ctrl + home
Здравствуйте. Есть аналогичная проблема. Захожу физически на сервер, mcedit работает как положено, ctrl + home/end отрабатывает. Но стоит подключиться по SSH через putty это же сочетание перестаёт работать. Это как-нибудь решается?