COVID вскрыл массу трудностей с удалённой работой. Основная из которых – чудовищная латентность и потеря пакетов в сети, шейпинг VPN провайдерами, идиотская организация VPN у работодателя, когда траффик из Москвы в Москву, на расстояние 3-х километров идёт через Лондон…
Вариант работы через ssh – практически мало применим из-за заметной латентности (в редакторе просто сложно перемещать клавишами курсор и попадать им в нужное место), из-за разрывов и переподключений.
Через VNC практически работать вообще невозможно. Тоже латентность и нужна большая ширина канала. Через RDP – в варианте когда RDP может работать через UDP (что вызывает массу сложностей в преодолении фаерволов) более-менее шевелится, но тоже так себе. И последнее работает только в варианте винды-винды, не для линукса.
Нашёл для себя mosh. Он более-менее сглаживает проблемы с ssh, но добавляет своих. Во-первых не всегда через фаервол проходит (проблемы как с просто блокировкой UDP, так и с тем, что в отсутствии траффика NAT забывает про соответствие портов). И самое главное, в нём проблемы с отмоткой буфера терминала назад (наверх) – её попросту нет (потому, что mosh эмулирует, условно, 80x24, только видимую часть, а не 80x2000).
Но нужна-то в основном не работа в консоли, а работа с редактором исходных текстов. И если редактор запускать в ssh, mosh, etc, то латентность так или иначе даст о себе знать. Гораздо лучше, когда редактор может работать локально, только передавая изменения по сети. С такими редакторами в linux всё достаточно плохо:
-
Emacs имеет такой режим, но проблема Emacs в том, что он Emacs, кроме того, непонятно насколько хорошо там работает навигация по тексту, скорей не очень.
-
Vim имеет такой режим только для галочки. Можете редактировать по одному файлику, при этом проблема с навигацией по исходникам (можно пропатчить tags файл от ctags, но с GNU global такой номер уже не проходит, с поиском по многим файлам тоже проблема).
-
говорят что-то умеет sublime, но я не видел из-за бедности, и догадываюсь, там далеко не всё так волшебно как описывают.
-
на удивление более-менее почти пристойно работает Visual Studio Code. Соединяется через ssh, вытаскивает оттуда файлы, редактирует, поиск производит удалённо на той стороне и только передаёт результаты (Vim тоже можно научить в принципе). Проблема VSCode в трудном, неудобном, интерфейсе и плохой навигации по исходным текстам (перейти к определению идентификатора она умеет, а в обратную сторону, найти все использования – только поиском, что не всегда быстро, удобно и корректно).
-
про Eclipse не знаю… может кто расскажет.
И в любом случае редактор-комбайн плохая замена обычной консоли. Есть масса нюансов, когда консоль побеждает. Когда нужно что-то нестандартное, или посмотреть логи, например.
Микрософтовский подход с RDP и UDP не так уж плох, думается, но к сожалению для Linux нет никакой альтернативы вообще. Хотелось хотя бы mosh с возможностью отмотки буфера экрана… (–no-init знаю, но в половине случаев это не работает).
Кроме того, UDP плохо проходит не только через фаерволы интернет-провайдера, но даже через корпоративные сети. В то время как HTTPS всегда везде разрешен. В идеале хотелось бы видеть что-то вроде mosh, но со следующими свойствами:
-
работа через множественные короткоживущие HTTPS-соединения, фонтанное кодирование (как способ помехоустойчивого кодирования в условиях регулярных разрывов);
-
симуляция не 80x24, а терминала вместе с буфером (несколько тысяч строк) и передача обновлений на сторону клиента;
-
предсказание реакции на ввод с помощью обучения и симуляция реакции нажатия на клавиши (до того, как пакеты добежали до удалённой стороны, обработались, и фактическая картинка пришла обратно). mosh это умеет делать только в ограниченном множестве случаев, заданных вручную. Очевидно, реакцию под все возможные программы предусмотреть трудно, но при этом вполне возможно фактическое обучение на примерах.
-
поддержка не единственного, а множества терминалов в рамках одного соединения (обычно для работы нужно несколько окон). Разные варианты вроде GNU screen и его альтернатив, увы, неудобны в использовании. Окна всё же хочется, чтоб управлялись оконным менеджером, чтоб между ними можно было переключаться, двигать их и т.п., причём принципиально мышью.
Могут заметить, мол зачем тогда терминалы. Чем RDP хуже? На самом деле, практически ничем кроме одного: совершенно не нужен «рабочий стол» с удалённой машины. Нужны только отдельные пять окон, например. И чтоб они управлялись локальным оконным менеджером, без задержек в отрисовке. Не знаю есть ли «бесшовный» RDP в современности, во времена Citrix (~2006г) что-то такое было. Кроме того буфер терминала, который проматывать можно нужен также локальный (чтоб отрисовывался без торможений), кроме того предиктивное обновление экрана с последующей заменой картинки фактическим результатом, чего RDP не умеет (и что очень просто психологически выматывает, когда работаешь на компьютере, где на экране нет обратной связи на все твои действия).
Может существуют какие-то проекты приближающиеся к описанным пожеланиям?