LINUX.ORG.RU
ФорумAdmin

какой консольный полноэкранный редактор не требует терминала, а довольствуется stdin/stdout ?


0

0

Зачем? Есть машинка за фаерволом, которая может коннектится только наружу. Запускаем на ней socket, которые коннектится к серверу и запускает bash с правильным stdin/stdout, но терминала-то нет! Можно почти все, но хочется редактор. И su кстати тоже не работает (че делать?)

Хорошо бы такой же редактор и для винды... это я мечтаю.

ed :)

Кстати, а почему бы не сконнектиться ей наружу через ssh _с проброской портов_(пробросив внутренний 22 порт наружу), а потом сконнектиться к ней по ssh и запустить vim/emacs/что-угодно в нормальном терминале.

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

Т.е. пробросить 22-й порт от машинки наружу на 666 порт нашей (-R 22:our_host:666), потом сконнектиться ssh user@our_host -p 666.

gaa ★★
()

И ещё: export TERM=xterm на дальней стороне и запуск всего этого хозяйства на нашей в xterm тоже решает проблему.

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

ed вроде строчный, а не полноэкранный

Схемы с проброской портов тоже не интересны. Это единственный удаленный доступ на машинку, который должен быть максимально прост.

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

> ваняет бэкдором =/

И даже с комфортом :-)

Проще так сделать -- у долбанного провайдера регулярно отваливается запрошенная проброска 22 порта наружу.

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

> И ещё: export TERM=xterm на дальней стороне и запуск всего этого хозяйства на нашей в xterm тоже решает проблему.

Это ты про свою проброску портов или про что?

Редактор пытается читать клавитуру, а мне надо, чтобы он stdin читал. Тут переменные не помогут.

www_linux_org_ru ★★★★★
() автор топика

Вы изобретаете страшный велосипед... Не надо запускать socket и bash под ним, редакторы расчитаны на терминалы, иначе как они будут рисовать курсор? Каждый раз выводить весь экран заново в stdout?

Если у вас socket может коннектится наружу, то сможет и ssh. На удаленной машине запускает sshd, затем на этой машине делаете команду:

ssh -R 9999:127.0.0.1:22 имя_пользователя@ip_внешней_машины

Вводите пароль или настраиваете авторизацию по ключам.

Затем на внешей машине говорите:

ssh -p 9999 127.0.0.1

и получате нормальный терминал на удаленной машине. Где и su будет работать и mc...

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

>> И ещё: export TERM=xterm на дальней стороне и запуск всего этого хозяйства на нашей в xterm тоже решает проблему.

> Это ты про свою проброску портов или про что? Редактор пытается читать клавитуру, а мне надо, чтобы он stdin читал. Тут переменные не помогут.

Нет, это ещё один способ. Редактор будет читать /dev/stdin в любом случае. И переменные тут помогают. Только что попытался:

nc -l -p 6666 -c "TERM=xterm vim"

а в другой консоли -- nc localhost 6666 . И мне открылся нормальный vim, на полный экран с польной функциональностью

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

> И мне открылся нормальный vim, на полный экран с польной функциональностью

Хотя нет, вру, не совсем нормальный :(

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

Тот же трюк с nano дал что-то похожее на результат.

А если не лень, то можно попробовать оторвать от vim-а его шибко умную проверку на то, что /dev/stdin является терминалом и перекомпилить.

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

>Проще так сделать -- у долбанного провайдера регулярно отваливается запрошенная проброска 22 порта наружу.

А причем тут провайдер? Или у вас socket работает через прокси?

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

> редакторы расчитаны на терминалы, иначе как они будут рисовать курсор?

Редакторы могут рисовать курсор БЕЗ терминала (читаем про эскейп последовательности), нано успешно рисует экран, но дальше ничего не может.

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

> А если не лень, то можно попробовать оторвать от vim-а его шибко умную проверку на то, что /dev/stdin является терминалом и перекомпилить.

А мне лень... потому, что кто-то уже должен был написать мальнький редактор с оторванной проверкой.

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

> Хотя нет, вру, не совсем нормальный :(

Наконец-то ты понял мой вопрос! Ура!

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

> редакторы расчитаны на терминалы, иначе как они будут рисовать курсор?

Редактору надо объяснить размер экрана, это да, причем в переменной окружения. Но терминал не нужен

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

> Редакторы могут рисовать курсор БЕЗ терминала (читаем про эскейп последовательности)

:) ещё раз читаем про них же чтобы понять, что это работа терминала

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

>> редакторы расчитаны на терминалы, иначе как они будут рисовать курсор?

> Редактору надо объяснить размер экрана, это да, причем в переменной окружения.

COLUMNS=80 LINES=25

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

>> Редакторы могут рисовать курсор БЕЗ терминала (читаем про эскейп последовательности)

> :) ещё раз читаем про них же чтобы понять, что это работа терминала

Это работа терминала на моем десктопе. А я писал про ненужность терминала на удаленной машинке, где редактор исполняется. Там редактор пытается читать клавиатуру, и обламывается, видя, что терминала нет, а есть голый stdin.

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

> Это работа терминала на моем десктопе. А я писал про ненужность терминала на удаленной машинке, где редактор исполняется.

А он там и не нужен. Его дело (а, вернее, дело ncurses) -- посылать эскейп-последовательности.

> Там редактор пытается читать клавиатуру, и обламывается, видя, что терминала нет, а есть голый stdin.

Не клавиатуру, а stdin. Они все читают stdin и пишут на stdout. Только некоторые слишком умны и пытаются делать всякие проверки.

Собственно, либо эту проверку надо оторвать, либо выдрать тот код(наверно, из /bin/login), который говорит редактору, что stdin -- это терминал.

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

Проверил -- vim хотя и ругается на отсутствие терминала, но вроде может работать без него, и вроде даже нормально, если не пользоваться PgUp, PgDn, Control-что-то

Вопрос становится таким: как заставить nc/socket/десктопный терминал не отображать Control-X как ^X и не отображать PgUp PgDn в виде мусора?

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

>> Там редактор пытается читать клавиатуру, и обламывается, видя, что терминала нет, а есть голый stdin. > Не клавиатуру, а stdin.

Как ты из stdin, если это не терминал, прочитаешь комбирацию "Shift нажат, стрелка в право нажата-отпущена, Shift отпущен" ? Кое-какие консольные редакторы такое умеют.

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

> код(наверно, из /bin/login), который говорит редактору, что stdin -- это терминал.

O_O

Ты предлагаешь мне пропатчить /bin/login ?

Насколько мне известно, "терминал или нет" определяется вызовом ioctl на дескрипторе файла, но тут я и завраться могу.

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

>> код(наверно, из /bin/login), который говорит редактору, что stdin -- это терминал.

> Ты предлагаешь мне пропатчить /bin/login ? Насколько мне известно, "терминал или нет" определяется вызовом ioctl на дескрипторе файла, но тут я и завраться могу.

Типа того. Или просто перегрузить ioctl через LD_PRELOAD.

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

> Как ты из stdin, если это не терминал, прочитаешь комбирацию "Shift нажат, стрелка в право нажата-отпущена, Shift отпущен" ? Кое-какие консольные редакторы такое умеют.

Хм, а разве тут эмулятор терминала(который на твоей стороне) их не преобразует в esc-последовательность? Вроде они уже в заэскейпленом виде отсылаются.

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

> Вопрос становится таким: как заставить nc/socket/десктопный терминал не отображать Control-X как ^X и не отображать PgUp PgDn в виде мусора?

А если попробовать telnet с отключенным эхом?

Хотя там некоторые клавиши не совсем по-своему работают, так что придётся переучиться с up,down,left,right на k,j,h,l

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

>> перегрузить ioctl через LD_PRELOAD

> Ну вы, блин, даёте... pty на что?

Ну расскажи нам как его сделать.

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

>> Как ты из stdin, если это не терминал, прочитаешь комбирацию "Shift нажат, стрелка в право нажата-отпущена, Shift отпущен" ? Кое-какие консольные редакторы такое умеют. > Хм, а разве тут эмулятор терминала(который на твоей стороне) их не преобразует в esc-последовательность? Вроде они уже в заэскейпленом виде отсылаются.

Так я и хочу сделать.

Но редакторы на удаленной машинке и команда su вместо чтения stdin делают ioctl. Впрочем, vim вроде умеет читать stdin, так что вопрос этот можно закрыть, и выяснить, что на стороне сервера запусить.

Telnet без эха не подходит, так как на стороне сервера -- слушающий nc, а telnet -- наоборот, подключается.

Короче -- требуется слушающий nc с возможностью запретить эхо и посылать символы не после энтера, а сразу (а vim должен не рыпаться, пытаясь разрешить/запретить эхо... будем надеятся, что он так и делает?). Можно такой nc и написать, но опять же, думаю есть готовый. Может, сделать новую тему?

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

> Telnet без эха не подходит, так как на стороне сервера -- слушающий nc, а telnet -- наоборот, подключается. Можно такой nc и написать, но опять же, думаю есть готовый. Может, сделать новую тему?

telnet без эха использовать на своей стороне, например, заредиректив порт ещё раз у себя (nc -l -p 3333 -c 'nc -l -p 6666'). Так что вроде всё готово.

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

Кстати, а права рута на обеих машинах у тебя имеются? Если да, то можно пробросить ppp поверх tcp и получить нормальное соединение. Потребуются только pppd и nc.

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

> Так что вроде всё готово.

Но опять с лишним редиректом. Надо все же нормальный netcat найти.

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

> Кстати, а права рута на обеих машинах у тебя имеются? Если да, то можно пробросить ppp поверх tcp и получить нормальное соединение. Потребуются только pppd и nc.

Права рута на обоих есть. Но то что щас -- портабельно под винду (если там вим тоже будет читать stdin).

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

>> Кстати, а права рута на обеих машинах у тебя имеются? Если да, то можно пробросить ppp поверх tcp и получить нормальное соединение. Потребуются только pppd и nc.

> Права рута на обоих есть. Но то что щас -- портабельно под винду (если там вим тоже будет читать stdin).

vim под виндой какой-то кривой. Там только gvim юзабелен. Разве что из-под cygwin...

> Но опять с лишним редиректом. Надо все же нормальный netcat найти.

В man stty я нашёл строчки, которые могут помочь отключить мусор:
* [-]ctlecho
echo control characters in hat notation (`^c')

gaa ★★
()

как вариант - не ипать моск, а запустить на сервере vpn-server, на клиенте vpn-client и спокойно работать в привычной обстановке.

внимательно почитав тред, создаётся впечатление, что топикпастер пытается изобрести зверский велосипед используя nc :)

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

> как вариант - не ипать моск, а запустить на сервере vpn-server, на клиенте vpn-client и спокойно работать в привычной обстановке.

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

> внимательно почитав тред, создаётся впечатление, что топикпастер пытается изобрести зверский велосипед используя nc :)

Пока велосипед состоит из 2 строчек -- одна на удаленной машинке, другая на сервере. ИМХО велосипеды начинаются со 100.

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

s/упавший сервер/упавшую машинку за фаерволом/

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

> * [-]ctlecho echo control characters in hat notation (`^c')

Уже почти то что надо. Но netcat посылает строку только после энтера (во всяком случае вим реагирует на PgDn только после энтера), а надо чтобы посимвольно.

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

если сервер падает так, что отрубается vpn, то видимо он просто мёртв и припарки ввиде извращённого nc ему уже не помогут :)

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

> Но netcat посылает строку только после энтера (во всяком случае вим реагирует на PgDn только после энтера), а надо чтобы посимвольно.

Сдаюсь :) Разве что патчить сетевого кота.

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

И сервером и машинкой за фаерволом в нашем учебном примере будет localhost.

На сервере: stty raw -echo; nc -l -p 1234 ; stty sane

За фаерволом: nc localhost 1234 -c vim

Тут еще не хватает объяснения размера экрана, но про это уже писали.

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

> И сервером и машинкой за фаерволом в нашем учебном примере будет localhost.

Ура? Мы его всё-таки изобрели? :)

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

> Ура? Мы его всё-таки изобрели? :)

Таки велосипедность есть, например bash -si вместо vim работает неполноценно. Но в целом эти две строчки меня устраивает гораздо больше подъема vpn с их скриптами (а кузнецов еще забыл сказать про sshd -- здесь же он не требуется).

Теперь можно это портировать под винду... нужен вим под виндой, понимающий stdin и ansi-последовательности.

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

Интересно, оказавшись под BSD или OSX, что будет быстрее -- поднять vpn или скачать/поставить nc и сказать nc myserver 1234 -c vim

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