9F.Sphynkx.Org.Ua: In GNU We Trust

Как уже было сказано, drawterm - это терминальная программа для подключения к удаленному рабочему столу, если выражаться в терминологии Windows. Существуют версии для Linux, Windows, MacOS X, Android, iOS (??). drawterm позволяет подключиться к машине, запустить на ней новую сессию rio и полноценно работать с системой. Более того, drawterm также монтирует в Plan9 корень системы, из-под которой был запущен (она будет доступна как /mnt/term на время сессии), позволяя обмениваться файлами между системами. Также drawterm взаимодействует с раскладкой клавиатуры удаленной машины - переключение раскладки в удаленно системе будет происходить привычной комбинацией клавиш и будут доступны все имеющиеся раскладки клавиатуры.

Установка

Есть старые версии программы, разработанные Рассом Коксом и новые, с исправлением багов и дополнениями новых возможностей. Для Windows рекомендуется версия с сайта 9front.org (878Kb).

В Linux он может быть найден в репозиториях. В Ubuntu/Linux Mint/Debian устанавливается командой:

apt install drawterm

Для Fedora необходимо подключить сторонний репозиторий:

dnf copr enable khm/drawterm
dnf install drawterm
man drawterm

В крайнем случае можно скачать исходники и собрать самостоятельно, следуя инструкциям для сборки.

Для Android в PlayStore drawterm не присутствует, но есть версия от cinap_lenrek:

Для установки приложений из сторонних ресурсов на устройстве необходимо включить режим разработки.

Еще подборка сборок под разные ОС, но Windows-версия там нерабочая.

Настройки на стороне Plan9

Для начала настроим порт 17019, слушающий входящие соединения:

acme lib/profile

В пользовательском профиле перед функцией switch($service) вставляем следующие строки (делаем бекапы конфигурации и следуем рекомендациям раздела Troubleshooting):

auth/factotum -g 'key proto=p9sk1 dom=vega9 user=glenda !password=<Secret>'
aux/listen1 -t tcp!*!rcpu /rc/bin/service/tcp17019 -R &
ip/ipconfig

Данным кодом в хранилище паролей создаются ключи авторизации. Затем поднимается порт 17019 для входящих соединений к сервису удаленного терминала. В последней строке инициализируется сетевой стек.

Перегружаемся и проверяем доступность по сети:

telnet 192.168.7.13 17019

При этом устанавливается подключение к консоли системы. При успешном подключении мы попадаем в нечто, выйти из которого можно лишь через killall -9 telnet. На этой стадии можно удаленно подключиться к удаленной системе командой:

drawterm -a 192.168.7.13:17019 -h 192.168.7.13 -u glenda

После ввода пароля попадаем в консоль.

Можно настроить запуск rio с предопределенными окнами. Создаем и заполняем $home/bin/rc/riostart-remote:

touch $home/bin/rc/riostart-remote

#!/bin/rc
window 0,0,161,117 stats -lmisc
window 161,0,278,117 clock
window 278,0,478,117 winwatch -e '^(winwatch|stats|clock|faces)'
window -scroll bar

В конце файла обязательно ставим перевод строки. Тут указывается создание окон с координатами:

Далее, снова добавим в lib/profile строки - после определения функции fn cpu% (соблюдаем отступы):

if(! webcookies >[2]/dev/null)
webcookies -f /tmp/webcookies
webfs
plumber
rio -i riostart-remote

Тут происходит настройка сессии при подключении конкретным пользователем. При удаленном подключении, в конструкции switch($service) отрабатывает case cpu и подготавливает окружение для удаленного доступа. Подключаются сервисы, необходимые для работы браузеров и пр. сетевых приложений (webcookies, webfs), сервис взаимодействия между приложениями (plumber) и затем уже стартует rio с индивидуальными настройками сессии.

Если drawterm не подключается, ссылаясь на неправильный домен - возможно надо прописать его явно в /rc/bin/termrc: sysname='vega9'

Настройки на принимающей стороне

Процесс подключения и запуск rio можно автоматизировать следующим скриптом:

#!/bin/sh
PASS=<Secret> /root/bin/drawterm -a 192.168.7.13:17019 -h 192.168.7.13 -u glenda -c rio -s -i riostart-remote &

Запускается новая сессия rio, не связанная ни с оригинальной, запущенной при старте системы, ни с другими, после повторного запуска этой команды.

Rio в окне Drawterm

В Windows переменная PASS в drawterm не отсылается, поэтому надо вводить пароль вручную. Скрипт подключения выглядит почти аналогично:

drawterm.exe -a 192.168.7.13:17019 -h 192.168.7.13 -u glenda -c rio -s -i riostart-remote &

Окно запроса пароля Drawterm

Файл drawterm.exe следует разместить в области видимости переменной PATH либо указать полный путь.