Pull to refresh

Comments 40

Если кому-нибудь нужны скомпилированные бинарники, чтобы попробовать на своём сервере, обращайтесь (если, конечно, не боитесь исполнять чужие бинарники :))
UFO just landed and posted this here
Очень просто:

freebsd$ cd /usr/ports
freebsd$ find .


После чего по часам (да, именно часам, а не с помощью time) измерил, сколько времени пройдет, пока снова появится приглашение.

Получилось 180 тысяч строк, которые были отрисованы за 45 сек. То же самое через ssh с помощью Terminal.app заняло около 10 секунд.
Контрольные скрины, которые мы проверяли при работе над pyte:

aptitude
mc
vim
nano
adom
atop
htop
Проверил aptitude: он отображается не совсем так, как в консоли linux, почему-то не проставляются правильно фоновые цвета. vim работает без нареканий, mc тоже. apt-get install adom ничего дал, поэтому не тестировал. htop работает, но после выхода весь шрифт почему-то становится жирным. Я портировал последнюю на тот момент версию из ветки master, возможно это и не баги порта.

Я не стал исправлять все найденные мной баги хотя бы потому, что вы, по идее, должны лучше разбираться в этом коде и вам было бы намного легче найти ошибки. В любом случае, если вам этот порт не нужен и у меня будет желание, я потом допишу остаток порта (в текущей реализации нет сохранения истории, она в любом случае нужна :)).

И кстати, похоже, ваша библиотека неправильно расставляет табстопы — они начинаются с 8, а не с 7, как у вас прописано в коде. Если поставить 8, то вывод ls и некоторых других утилит, которые используют табуляцию, начинает отображаться корректно.
М… Извиняйте, но именно ловля этих блох и является главной задачей в работе по написанию эмулятора терминала. Написать конечный автомат для трёх-пяти состояний особых усилий не требует. А вот отладить все особые случаи — это да, это сложно.

adom — это ASCII игрушка, благодаря которой мы поправили баг с «чёрным по чёрному».

www.adom.de/adom/download.php3

Насчёт табуляции спасибо, посмотрю внимательнее.
Да, я согласен, что отлов ошибок в данном случае — дело непростое, но поскольку уже есть референсная реализация, и мой порт очень близко повторяет вашу библиотеку, находить ошибки намного проще, чем когда пишешь такую библиотеку «с нуля». Я отловил пару багов буквально за час и не думаю, что оставшиеся 3-4 бага займут сильно больше времени — я просто не очень хочу этим заниматься, как я писал ниже )
У нас есть нерешённая проблема с инсталлером OpenSUSE, который сильно битый по сравнению с VNCterm'ом. (давняя вяловисящая бага, на которую я bobry никак не могу развести).
Я говорил лишь о тех багах, которых нет в реализации на питоне :). При портировании я это делал «втупую», не опираясь ни на какие доки или что-либо ещё, поэтому я не думаю, что я смогу вам как-то очень помочь в решении давно висящих багов в исходной библиотеке ;). К тому же, я это делал для фана, а вы — нет
UFO just landed and posted this here
Я просто посмотрел, что и в console.log() и в текстовом редакторе вывод «ls» (под Mac OS X) отображался правильно, а с использованием и исходной библиотеки и моего порта — вся табуляция была сдвинута на один пробел, поэтому я поставил начало табуляции с индекса 8, а не 7, как было изначально, и всё стало ровно — никаких проблем с новым положением табстопов я не встречал.

На самом деле, я и не стремился к полной совместимости даже с вашей библиотекой, поскольку, как я понял, мне нужно всё же портировать xterm, поскольку ваша либа работает только с консолью линукса, что, к сожалению, дает большие ограничения на других платформах, на которых мой псевдотерминал работает — на Mac OS X и FreeBSD.
UFO just landed and posted this here
Наверное, я что-то не так делаю, но когда я ставлю TERM=xterm-color, у меня портится, к примеру, приглашение:

UFO just landed and posted this here
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Этот PS1 получился из дефолтного bashrc в убунте, кстати говоря. Насколько я понял, оно использует какие-то специфичные именно для xterm esc-последовательности, которые, по идее, должны приводить к смене заголовка или чему-то такому, и ваша библиотека этого не обрабатывает. Ещё один момент заключается в том, что почти все эмуляторы терминала «притворяются» именно xterm, а не linux, и похоже, что многие программы ведут себя сильно по-разному в зависимости от значений этой переменной, и «лучше всего» они себя ведут именно в xterm. Я не могу привести никаких пруфов, это просто моё наблюдение :). Поскольку у вас была задача — сделать доступ к консоли linux, то вашей библиотеке не обязательно решать проблемы совместимости с xterm, но я пишу именно эмулятор терминала, и эти вещи для меня важны :).
UFO just landed and posted this here
Я лично воспринимаю библиотеку pyte просто как ещё одну реализацию linux консоли, которая является «настоящей» консолью, нежели псевдотерминалом. Я воспринимаю её именно так в том числе потому, что у неё есть проблемы при отрисовке, когда переменная окружения TERM стоит xterm-color, и именно xterm-color является эмулятором псевдотерминала ;).
не путайте, пожалуйста, пседво-терминалы и эмуляторы терминалов. Псевдо-терминал — абстракция создания /dev/pts, к показу буковок не имеет никакого отношения.

А вот эмулятор терминала — это то, что из потока esc-последовательностей делает пользователю картинку (на VGA экране или в окне X-сервера, или даже в виде виндового окошка).

xterm является эмулятором терминала и использует инфраструктуру псевдотерминалов (которую предоставляет ядро) для запуска локального шелла.

2 bobry: pyte не является в чистом виде эмулятором терминала, т.к. не имеет средств отображения. Вот selecon, который pyte для рендеринга использует — является.
Да, возможно вы правы
Установил, поигрался — впечатляет :) Буду использовать локально вместо путти :)

Как я понял — с раскраской есть небольшие траблы? Например, у меня после смены пользователя и ls цвет по умолчанию становится голубым :)
У вас это происходит после отключения через утилиту ssh? Я тоже видел этот баг, наверное это тоже баг моего порта библиотеки selectel/pyte, хотя надо будет не полениться и проверить, в чём же на самом деле дело :)
Коннекчусь к убунте 11.10. Сразу вижу, что залогинен раскрашенным и жирным www-data. пишу su aleks, ввожу пароль. все не жирно и не раскрашено, пишу ls, и далее начиная с какого-нибудь файла все голубым выводит. Если запустить mc — все нормально становится.
К сожалению, смогу ответить на этот вопрос только после выходных.
Выходные прошли — echo $TERM пишет «linux».
Если можете, пришлите пожалуйста вывод ls (можно получить, к примеру, выполнив «ls --color=force >tmpfile» (или как-то так, чтобы информация о цвете обязательно попала)) мне в личку, я постараюсь посмотреть, в чём дело :)
См. ниже коммент с демо. Там вы сами сможете всё это сделать :)
Ага, вижу багу, сохранил файлик к себе, воспроизводится :). Действительно похоже, что проблема с недоочисткой после сброса (возможно даже сброс цвета вообще не работает :)).
Еще было бы круто реализовать поддержку alt+enter. В mc очень удобная штука.
UFO just landed and posted this here
классная штука, есть идеи использования
Единственное пожелание — использовать socket.io вместо низкоуровневого WS
UFO just landed and posted this here
Демо (Ubuntu 64 bit 11.04):

176.9.227.21/term-ws/shell-ws.php

su habr
пароль: 12345678

Как оказалось, если смотреть бравзером (firefox/chrome) из винды и запустить mc — всё немного печально когда походишь по дирикториям. Из убунты когда пробовал таких проблем не было.

Кроме того, как я заметил, в описании на гитхабе произошли небольшие изменения. Пришлось вспоминать про «go build».
Большое спасибо (хоть и поздновато, конечно :))! Да, я обновил немного описание, по идее достаточно выполнить go get ..., после чего, если бинарь будет в $PATH, то shell-ws.php его сам найдет, если не в $PATH, то достаточно символическую ссылку на него создать. Впрочем, просто «go build» тоже сработает :).

Кстати, я починил багу с вводом русских букв.

У меня винды нет, поэтому на ней не проверял, наверное дело в том, что на винде может не быть каких-нибудь юникодовых символов, хотя, честно говоря, не знаю :). Если будет возможность — посмотрю, что там. Честно говоря, я взял «Courier New» просто потому, что в нём было меньше всего косяков с отображением и больше всего юникодовых символов — там могут быть проблемы с шириной текста, если каких-то символов нет, и Courier New имеет самую лучшую поддержку юникода в макоси (наверное для других ОС это тоже справедливо).
Кстати, я ещё чуть-чуть обновил код :), ибо в вашей демо я нашел багу с тем, что дескрипторы для общения с псевдотерминалом не высвобождаются, что может привести к тому, что в конечном счёте они закончатся и демо перестанет работать без видимых на то причин.
По-поводу винды — там именно всё начинается, когда переходишь на уровень ниже в дириктории (cd ..) надеюсь, почините (ну и альт+ентер добавите :)). Может всё из-за разных символов перехода на новую строку?

По-поводу $PATH — понял — однако, есть такая штука — я когда go устонавливал писал «export PATH=$PATH:/usr/local/go/bin» под рутом. А когда захожу в ваш эмулятор — он то коннектится юзером www-data и там $PATH — другой — т.е. немного законфузило почему же не работает.

Сегодня сутра зашел и терминал не работал — прибил процесс term-ws и всё заработало. Как я понимаю, это и есть бага, которую вы описали?
> По-поводу винды — там именно всё начинается, когда переходишь на уровень ниже в дириктории (cd ..)
Я посмотрю, но ничего не обещаю :)

> ну и альт+ентер добавите :)
По идее, мне надо не лениться и добавить все сочетания клавиш с Alt и Ctrl, я только добавил Alt + стрелочки направо и ещё что-то.

Сегодня сутра зашел и терминал не работал — прибил процесс term-ws и всё заработало. Как я понимаю, это и есть бага, которую вы описали?

На самом деле я не тестировал работу демона под большой нагрузкой и в течение продолжительного времени, и, по всей видимости, это не та бага, которую я описал, на самом деле. Оно просто почему-то долго коннектится, но всё же в конце концов «просирается», просто это много времени занимает, не знаю, почему :).
Я починил багу с тем, что курсор не полностью сбрасывается, теперь должно быть намного лучше. Впрочем, недочёты в отрисовке всё равно есть, к примеру, белый фон почему-то не рисуется, как надо. Честно говоря, я так понимаю, что библиотека pyte всё же не все случаи охватывает и не полностью задаёт цвет символов. «Черный на черном» я пофиксил именно в коде отрисовке, а не где-то ещё, и хрен его знает, сколько ещё драконов скрывается в этом коде :))
Sign up to leave a comment.

Articles

Change theme settings