Захотелось поработать удалённо с оконными приложениями линукса. Насколько я знаю, линукс позволяет такие штуки - когда программа выполняется на одной машине, а окна рисует на другой - поэтому надеялся обойтись без средств удаленного доступа типа TeamViewer или VNC, и эта надежда отчасти оправдалась. Нужна лишь небольшая настройка.
1. Настраиваем линукс, на котором будут выполняться программы. У меня Slackware, но, думаю, под другими вариантами настройка будет примерно такой же. Нужно в конфигурационном файле /etc/ssh/sshd_config найти и раскомментировать следующие строки:
X11Forwarding yes X11DisplayOffset 10 X11UseLocalhost yes
2. Настраиваем Windows, которая будет заниматься отрисовкой окон. Оконные приложения в X11, как я понял, устроены хитро: приложение является клиентом, а окнами занимается сервер, которому, в принципе, всё равно где работать - на этой же машине или на соседней. Поэтому нужно поднять сервер X11. Мой выбор пал на Cygwin/X.
2.1. Устанавливаем Cygwin/X. Это несложный процесс: запускаем установщик cygwin, в которм выбираем для установки пакеты:
xorg-server xinit xorg-docs xlaunch
2.2. Настраиваем Cygwin/X. Как выяснилось, "из коробки" у него не очень хорошо с подключениями tcp, переключением раскладки клавиатуры и глубиной цвета в rdp-сессии.
2.2.1. Переключение раскладки клавиатуры: в папке путь_установки_cygwin/home/имя_пользователя/ создаём файл .XWinrc с таким содержимым:
XKBLayout us,ru XKBModel evdev XKBOptions grp:alt_shift_toggle XKBRules base XKBVariant ,winkeys
Клавиатура будет переключаться по Alt+Shift. Если хотим Ctr+Shift, надо в XKBOptions указать grp:ctrl_shift_toggle.
2.2.2. Доступ по tcp: изменяем ярлык запуска сервера, дописывая в него параметр -listen tcp после двойного минуса (перед двойным минусом перечисляются параметры, относящиеся к клиенту, после него - к серверу):
путь_установки_cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; exec /usr/bin/startxwin -- -listen tcp"
Сервер будет ожидать входящие подключения на 6000 порту.
2.2.3. Корректировка глубины цвета: если работа с Windows производится в RDP-сессии, как у меня, то окна отрисовываются почему-то с минимальной глубиной цвета, чуть ли не в 16-цветной палитре. Исправляет это параметр -nocompositewm. То есть, окончательно команда ярлыка запуска сервера приобретает следующий вид:
путь_установки_cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; exec /usr/bin/startxwin -- -listen tcp -nocompositewm"
2.3. Настраиваем PuTTY. Переходим в категорию Connection -> SSH -> X11 и выставляем там параметры:
Enable X11 Forwarding -> true X11 Location -> :0.0 Remote X11 authentication protocol -> MIT-Magic-Cookie-1 X authority file for local display -> путь_установки_cygwin\cygwin\home\имя_пользователя\.Xauthority
После всех настроек можно заходить через PuTTY на линуксовую машину и запускать на ней оконные приложения (xclock, xlogo, firefox и т.д.). Работает всё, правда, небыстро, но тут уж - как есть...
Литература:
http://tolik-punkoff.com/2016/11/21/nastrojka-x11-forwarding-cherez-ssh-s-pomoshhyu-putty-i-xming/
https://datacadamia.com/ssh/x11/cygwinx_remote_client#with_putty
https://stackoverflow.com/questions/34932495/forward-x11-failed-network-error-connection-refused
https://x.cygwin.com/docs/ug/setup.html#setup-cygwin-x-installing