Автор Тема: Проблема с VNC :10 дисплей (решено) - можно хоть 100 пользователей подключать.  (Прочитано 1035 раз)

Оффлайн smatsak

  • Linux, C++
  • Давно тут
  • **
  • Сообщений: 204
  • Cloud-based technology
Всем привет.

Для заказчика необходима была одновременная работа десятков пользователей на виртуальных дисплеях, аналог 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



     
« Последнее редактирование: 23.11.2021 01:29:56 от smatsak »

Оффлайн telets

  • Давно тут
  • **
  • Сообщений: 57
    • Email
Мы используем freenx и rxclient (до p10 использовали nxclient). Всё бесплатно и хоть 1000 пользователей.
Здесь есть о том, как мы настроили https://unixforum.org/viewtopic.php?p=1350161#p1350161

Здесь о nxclient https://unixforum.org/viewtopic.php?p=1357360#p1357360

Сейчас на Sl10 используем rxclient - входит в репозиторий.