Вопрос или проблема
Добрый день
Я использую RHEL 7.6 с версией ядра 3.10.0-514.el7.x86_64.
Версия Vncserver — tigervnc-server-1.8.0-17.el7.x86_64.
Мой файл vncserver@:1.service выглядит следующим образом, я заменил <user>
на действительного пользователя.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l <user> -c "/usr/bin/vncserver %i"
PIDFile=/home/<user>/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
Когда я выполняю команду systemctl start vncserver@:1
я получаю следующую ошибку
Job for vncserver@:1.service failed because a configured resource
limit was exceeded. See “systemctl status vncserver@:1.service” and
“journalctl -xe” for details.
systemctl status vncserver@:1 показывает следующее
Oct 01 09:05:21 systemd[1]: Starting Remote desktop
service (VNC)…Oct 01 09:05:24 host_name systemd[1]: Can’t open
PID file /home/user/.vnc/host_name:1.pid (yet?) after start: No
such file or directoryOct 01 09:05:24 host_name systemd[1]: Failed
to start Remote desktop service (VNC).Oct 01 09:05:24 host_name systemd[1]: Unit vncserver@:1.service entered > failed state.
Oct 01 09:05:24 host_name systemd[1]: vncserver@:1.service failed.
Каждый раз, когда я выполняю systemctl start vncserver@:1, число N увеличивается в файле host_name:N.pid в /home/user/.vnc, хотя оно должно оставаться 1.
Мой файл xstartup в каталоге .vnc выглядит так.
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
/etc/X11/xinit/xinitrc
# Assume either Gnome or KDE will be started by default when installed
# We want to kill the session automatically in this case when user logs out. In case you modify
# /etc/X11/xinit/Xclients или ~/.Xclients yourself to achieve a different result, then you should
# be responsible to modify below code to avoid that your session will be automatically killed
if [ -e /usr/bin/gnome-session -o -e /usr/bin/startkde ];
then
vncserver -kill $DISPLAY
fi
Я отключил firewall и перевел seLinux в разрешающий режим, но ошибка осталась, хотя я создал файл vncserver@:13.service для root, который запускается без проблем.
Любая помощь будет очень кстати
С уважением
У меня была та же проблема на centos-release-7-7.1908.0.el7.centos.x86_64 с ядром 3.10.0-1062.4.3.el7.x86_64, точно такая же настройка и конфигурация.
Я заметил через journalctl -xe ошибку, сгенерированную во время фазы запуска службы при попытке доступа к файлу /tmp/.X11-unix/X59 (мой VNC настроен для работы на порту 5959). После его ручного удаления, служба начала работать нормально.
RHEL7 и CentOS 7 по умолчанию поставляются с включенным iptables.
Я получал всевозможные странные ошибки из-за этого. Это очень напоминало одну из таких ошибок.
Вы можете убедиться, что у вас такая же ситуация, выполнив команду:
sudo systemctl status firewalld
Если это так, вам следует открыть VNC в iptables, смотрите здесь:
https://wiki.centos.org/HowTos/VNC-Server#Amend_the_iptables или https://www.cyberciti.biz/faq/linux-iptables-open-vncserver-port-6000-5800-5900/
В качестве альтернативы, если этот сервер не нуждается в защите iptables (в идеале, если он находится за другим брандмауэром), вы можете просто отключить и остановить iptables следующим образом:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
Команда stop остановит его, а команда disable предотвратит его запуск после перезапуска.
.
Ответ или решение
Для успешного запуска VNC сервера на RHEL 7.6 важно уделить внимание многим аспектам, которые могут влиять на его работу. Разберем несколько ключевых моментов и предложим решения возможных проблем.
Теория
VNC (Virtual Network Computing) позволяет удаленному пользователю подключаться к рабочему столу автомобиля через сеть. На RHEL 7 используется серверная версия VNC – TigerVNC. Для каждого VNC-сервера создается отдельная служба systemd, которая управляется соответствующими файлами конфигурации. Проблемы с запуском сервиса могут быть вызваны как неправильной настройкой файлов конфигурации, так и различными ограничениями системных ресурсов.
Из вашего описания можно выделить несколько ключевых моментов:
- Ошибка при запуске сервиса связана с невозможностью открытия PID-файла.
- Нарастающий индекс номера PID указывает на то, что сервис не завершается корректно.
- Некоторые компоненты (например, firewall или SELinux) могут вмешиваться в процесс установки и запуска VNC.
Пример
Ваш файл vncserver@:1.service
выглядит правильным на первый взгляд, однако проблема с созданием PID-файла может указывать на проблемы с правами доступа к каталогу или неправильными путями в конфигурации. На это намекает сообщение об ошибке systemd, касающееся невозможности открытия PID-файла.
Возможные причины и решения:
-
Необходимые директории и их права:
- Убедитесь, что директория
/home/<user>/.vnc
существует и имеет соответствующие права доступа. Вы можете использовать командуchmod
для изменения прав иchown
для изменения владельца директории.
sudo mkdir -p /home/<user>/.vnc sudo chown <user>:<user> /home/<user>/.vnc chmod 700 /home/<user>/.vnc
- Убедитесь, что директория
-
Системные ограничения:
- Убедитесь, что ваш пользователь имеет достаточные ресурсы, например, лимит на количество процессов (
ulimit
) или открытых файлов. Порой, увеличение этих лимитов может решить проблему с запусками.
- Убедитесь, что ваш пользователь имеет достаточные ресурсы, например, лимит на количество процессов (
-
Проверка X-сессии:
- Проверьте файл
xstartup
. Убедитесь, что все пути и команды в нем верны и что он имеет разрешения на выполнение.
- Проверьте файл
-
Ошибки SELinux:
- Поскольку вы уже перевели SELinux в режим Permissive, проблем здесь быть не должно, но стоит удостовериться, посмотрев логи SELinux:
sudo ausearch -m AVC -ts recent
-
Ограничения firewall:
- Хотя вы и отключили firewall, стоит проверить, что порты VNC (обычно 5900 + номер дисплея) не блокируются.
sudo firewall-cmd --permanent --zone=public --add-port=5901/tcp sudo firewall-cmd --reload
Применение
После устранения вышеупомянутых проблем повторная попытка запуска сервиса VNC должна быть успешной. Попробуйте выполнить:
sudo systemctl daemon-reload
sudo systemctl start vncserver@:1.service
sudo systemctl enable vncserver@:1.service
В случае сохранения проблем, повторите проверку всех шагов и логов: journalctl -xe
может предоставить более детальную диагностику проблем. Если по-прежнему возникают ошибки, полезно будет рассмотреть конфигурации служб и VNC на более новый пакет или обновление системы.
Заключение
Подключение VNC является эффективным способом удаленной работы с системой, однако требует тщательной настройки и учета множества факторов. Изучая проблему и предпринимая шаги по улучшению конфигурации и устранению ограничений, можно достичь стабильной работы VNC сервера на RHEL 7. Надеемся, что приведенные рекомендации помогут вам успешно решить вашу задачу.