Всем привет.
Для заказчика необходима была одновременная работа десятков пользователей на виртуальных дисплеях, аналог Citrix/Windows только для Linux.
Рассмотрел по порядку следующие варианты:
Xrdp - забраковал - медленно работает, если вдруг графика, то все, слайд шоу.
X2go - забраковал - по той же причине, что и Xrdp.
NoMachine - очень понравился, на нем в качестве эксперимента, можно даже играть в простые 3-D игры (проверял на lineage 2), передает достойную картинку и звук, даже несколько месяцев исправно обновлял триал лицензии.
Как работает подробно можно узнать тут:
https://www.nomachine.com/ru/terminal-serverНо есть два существенных недостатка -
проприетарный и
платный, по запросам заказчика
цена годовой подписки 100 000 руб.
Немного, если сравнивать с Citrix, но и немало, если сравнивать со стоимостью годовой подписки на виртуальную серверную для того же заказчика.
Звук передавать в сторону клиента не планируется, потому остановил свой выбор на VNC.
Из всех VNC - выбрал TigerVNC:
- входит в дистрибутив,
- автоматически масштабирует экран виртуального дисплея по размерам окна,
- поддерживает режим -rawkeyboard (Отправляет события клавиатуры напрямую и избегает их сопоставления с текущей раскладкой клавиатуры) - нет проблем с вводом русских букв и есть возможность по разному переключать клавиатуры на родительской системе и гостевой.
Настраивал вот по этой инструкции, как отдельные сервисы:
https://www.altlinux.org/VNCНо столкнулся с проблемой десятого дисплея, /usr/bin/vncserver -rawkeyboard :10 никак не хотел стартовать, 9 сервисов работало, а на 10 ступор.
Сам с этой проблемой не справился, хорошо на форуме поддержки tigervnc получил такой комментарий к своему вопросу:
Have you checked if it is the fact that you have 10 sessions that is the
problem, or if it just that display :10 that's broken? :10 is commonly
used for SSH forwarding so it has happened that some programs have
special hacks for that.
Regards
--
Pierre Ossman Software Development
Cendio AB https://cendio.com
Ключ -X Enables X11 forwarding, каждый раз, когда я подключаюсь к хосту командой ssh -XC user@host - sshd использует :10 дисплей для пересылки данных для Х сервера, по этой причине он недоступен для vnc, т.к. уже занят.
Сначала я отказался от вызова :10 дисплея, вызывая сразу после :9 дисплея - :11 дисплей, проверил - реально работает, но затем решил изменить конфигурацию sshd.
Для Альт Линукс это:
/etc/openssh/sshd_config
#X11Forwarding yes
#X11DisplayOffset 10
Я передвинул sshd с :10 дисплея на :200 :
nano /etc/openssh/sshd_config
X11Forwarding yes
X11DisplayOffset 200
service sshd restart
service sshd status
active
После этого можно запускать в консоли ssh графические программы, например xterm, и :10 дисплей свободен, и TiregVNC прекрасно на нем работает.
12 подключений для работы пользователей:
sam@sam-rpi4b-8g ~ $ netstat -ntpa | grep Xvnc
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5911 0.0.0.0:* LISTEN 4638/Xvnc
tcp 0 0 0.0.0.0:5912 0.0.0.0:* LISTEN 4687/Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 3743/Xvnc
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 4173/Xvnc
tcp 0 0 0.0.0.0:5903 0.0.0.0:* LISTEN 4222/Xvnc
tcp 0 0 0.0.0.0:5904 0.0.0.0:* LISTEN 4271/Xvnc
tcp 0 0 0.0.0.0:5905 0.0.0.0:* LISTEN 4321/Xvnc
tcp 0 0 0.0.0.0:5906 0.0.0.0:* LISTEN 4370/Xvnc
tcp 0 0 0.0.0.0:5907 0.0.0.0:* LISTEN 4419/Xvnc
tcp 0 0 0.0.0.0:5908 0.0.0.0:* LISTEN 4468/Xvnc
tcp 0 0 0.0.0.0:5909 0.0.0.0:* LISTEN 4517/Xvnc
tcp 0 0 0.0.0.0:5910 0.0.0.0:* LISTEN 4566/Xvnc
sam@sam-rpi4b-8g ~ $ vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:1 3743
:2 4173
:7 4419
:10 4566
:9 4517
:4 4271
:3 4222
:6 4370
:5 4321
:8 4468
:12 4687
:11 4638
Вывод:
Если для работы с TigerVNC планируется большое количество пользователей, необходимо учитывать, что :10 дисплей обычно используется sshd для пересылки данных X-сервера и vncserver :10 не запустится, так как :10 дисплей будет занят sshd.
Выход: или не использовать :10 дисплей для vncserver, запуская после vncserver :9 сразу vncserver :11 (плохой вариант, см. P.S.2) или передвинуть sshd c :10 дисплея на большой номер, который не планируется использовать для vncserver.
Настройка /etc/openssh/sshd_config, параметры #X11Forwarding yes, #X11DisplayOffset 10
Кстати, этот вывод в вашей редакции можно вставить в инструкцию
https://www.altlinux.org/VNC , чтобы сократить мучения таких как я.
Вопрос к знатокам:
1. Хорош ли выбор tigerVNC для одновременной работы десятков пользователей.
2. Если ли команда linux, которая покажет наличие дисплеев в системе и какими процессами они заняты, что-то типа :0 - x11vnc, :1-:20 Xvnc, :200 sshd
P.S. Канал закрыт VPN (WireGuard), у каждого пользователя свой ip и для пущей секретности на iptables можно ограничить подключения к конкретному порту конкретного ip.
P.S.2: Пропускать дисплеи sshd - не выход, так как для каждого подключения sshd задействует отдельный дисплей, следующий за параметром
X11DisplayOffsetНапример для второй сессии ssh был открыт 201 дисплей:
ssh -XC sam@172.23.0.21
sam@172.23.0.21's password:
Last login: Tue Nov 23 00:58:15 2021 from 172.23.0.19
sam@sam-rpi4b-8g ~ $ echo $DISPLAY
localhost:201.0
Для мониторинга дисплеев VNC я задействовал такую команду:
sam@sam-rpi4b-8g ~ $ ps -eo pid,user,cmd | grep vnc
3743 sam /usr/bin/Xvnc :1 -auth /home/sam/.Xauthority -desktop sam-rpi4b-8g:1 (sam) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/sam/.vnc/passwd -rfbport 5901 -rfbwait 30000 -rawkeyboard :1
4041 root /bin/bash /usr/sbin/x11vnc-start-daemon
4047 root /usr/bin/x11vnc -auth /run/lightdm/root/:0 -dontdisconnect -usepw -shared -forever -rfbport 5900 -rfbauth /root/.vnc/passwd -display :0 -repeat
Здесь видны все настройки, с которыми запускается каждый сервис vnc.
Как оказалось, перечень занятых дисплеев (кроме sshd) можно посмотреть в каталоге временных файлов:
ls /tmp/.X11-unix
X0 X1