Вопрос или проблема
Я установил VNC-сервер на машину с CentOS. Я создал пользователя, а затем включил VNC-сервер для них при запуске, следуя этим шагам: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-remote-access-for-the-gnome-desktop-on-centos-7. Я с успехом могу войти на машину через VNC, но похоже, что пользователи VNC не делят одну и ту же сессию… словно когда я вхожу на физическую машину и запускаю процесс, когда устанавливается VNC-соединение, на рабочем столе ничего не активно. Что я сделал не так? Мне нужно, чтобы VNC позволял пользователям входить и удаленно отлаживать программное обеспечение, которое могло быть или не быть запущенным кем-то, кто вошел в физическую машину.
Я не эксперт, но у меня есть друг, который использует ssh для легкого доступа к моим машинам, как только я даю ему логин. Это один из многих способов, но он сработал для меня. Я не думаю, что это так же безопасно, как VPN, но сработало, без инцидентов до сих пор. У него есть лучшее преимущество для выявления недобросовестной активности. Это не моя область, но, как я сказал, это, похоже, работает хорошо.
Вы можете использовать x11vnc для этого.
Как Root (sudo -i):
yum install x11vnc
x11vnc -storepasswd /etc/x11vnc.pass
printf '[Unit]\nDescription="x11vnc"\nRequires=display-manager.service\nAfter=multi-user.target\n\n' > /etc/systemd/system/x11vnc.service
printf '[Service]\nExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -auth guess -display :0 -forever -shared -rfbauth /etc/x11vnc.pass -usepw \nExecStop=/usr/bin/killall x11vnc\nRestart=always\nRestartSec=150ms\n\n' >> /etc/systemd/system/x11vnc.service
printf '[Install]\nWantedBy=multi-user.target\n\n' >> /etc/systemd/system/x11vnc.service
systemctl daemon-reload
systemctl enable x11vnc.service
systemctl start x11vnc.service
Это будет делить основной дисплей с теми, кто подключается и знает x11 пароль, который вы установили.
less /etc/systemd/system/x11vnc.service
Посмотрите на строку ExecStart, чтобы увидеть, какие аргументы используются, они задокументированы здесь: http://www.karlrunge.com/x11vnc/x11vnc_opts.html
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что стандартный VNC-сервер, установленный на вашем CentOS 7, создаёт отдельные сессии для каждого пользователя. Это означает, что если один пользователь подключается к серверу через VNC, он не видит те же приложения или процессы, которые были запущены другим пользователем на физическом экране. Что вам нужно, так это настроить VNC таким образом, чтобы пользователи могли делиться одной и той же сессией, чтобы все изменения и запущенные приложения были доступны всем подключённым пользователям.
Решение: Использование x11vnc для общих сессий
Как вы правильно заметили, использование x11vnc — это хороший способ достичь ваших целей, так как этот инструмент позволяет подключаться к существующему X11-сессии, что и необходимо в вашем случае.
1. Установка x11vnc
Первым шагом будет установка x11vnc
, если он ещё не установлен. Выполните следующие команды от имени пользователя с правами root
:
yum install x11vnc
x11vnc -storepasswd /etc/x11vnc.pass
В первой команде происходит установка x11vnc
, а во второй — вы создание файла для хранения пароля, который будет использоваться для авторизации при подключении.
2. Создание сервиса systemd
Далее необходимо создать сервис для автоматического управления x11vnc
. Вот пример содержимого, который нужно добавить в новый файл сервиса:
printf '[Unit]\nDescription="x11vnc"\nRequires=display-manager.service\nAfter=multi-user.target\n\n' > /etc/systemd/system/x11vnc.service
printf '[Service]\nExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -auth guess -display :0 -forever -shared -rfbauth /etc/x11vnc.pass -usepw \nExecStop=/usr/bin/killall x11vnc\nRestart=always\nRestartSec=150ms\n\n' >> /etc/systemd/system/x11vnc.service
printf '[Install]\nWantedBy=multi-user.target\n\n' >> /etc/systemd/system/x11vnc.service
В данном файле мы указываем параметры, необходимые для запуска x11vnc
, включая опцию -forever
, которая позволяет серверу оставаться активным даже после отключения всех клиентов, и -shared
, которая позволяет нескольким пользователям подключаться к одной и той же сессии.
3. Активация и запуск сервиса
После создания файла сервиса следует перезагрузить демон systemd, активировать и запустить сервис. Используйте следующие команды:
systemctl daemon-reload
systemctl enable x11vnc.service
systemctl start x11vnc.service
4. Проверка настройки
Для проверки правильности конфигурации, вы можете использовать следующую команду:
less /etc/systemd/system/x11vnc.service
В этом файле вы должны убедиться в правильности заданных параметров, особенно в строке ExecStart
, которая содержит все необходимые опции для запуска x11vnc
.
Заключение
Теперь все пользователи, которые подключаются к VNC с использованием заданного пароля, будут видеть ту же X-сессию, что и пользователь, который физически работает на машине. Такой подход идеально подходит для удалённой отладки программного обеспечения, так как обеспечит совместный доступ к вашим приложениям и рабочему окружению.
Если у вас возникнут дополнительные вопросы или потребуется помощь с конкретными настройками, не стесняйтесь обращаться.