再会
我正在运行内核版本为 3.10.0-514.el7.x86_64 的 RHEL 7.6。
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 时出现以下错误
由于超出配置的资源限制,vncserver@:1.service 的作业失败。有关详细信息,请参阅“systemctl status vncserver@:1.service”和“journalctl -xe”。
systemctl status vncserver@:1 显示此信息
10月01日09:05:21 systemd[1]:正在启动远程桌面服务(VNC)...
10 月 01 日 09:05:24 host_name systemd[1]: 启动后无法打开 PID 文件 /home/user/.vnc/host_name:1.pid (还不能打开吗):没有此文件或目录
10 月 01 日 09:05:24 host_name systemd[1]: 无法启动远程桌面服务(VNC)。
10 月 01 日 09:05:24 主机名 systemd[1]: 单元 vncserver@:1.service 进入 > 失败状态。
10 月 01 日 09:05:24 host_name systemd[1]: vncserver@:1.service 失败。
每次我执行 systemctl start vncserver@:1 时,/home/user/.vnc 中的 N 增加 host_name:N.pid 文件应该保持为 1。
我的 .vnc 目录中的 xstartup 文件如下所示。
#!/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 or ~/.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
我已经禁用防火墙,并将 seLinux 置于 Permissive 模式,但仍然出现相同的错误,但是我为 root 创建了一个 vncserver@:13.service 文件,启动时没有问题。
任何帮助将不胜感激
问候
答案1
我在带有 3.10.0-1062.4.3.el7.x86_64 内核的 centos-release-7-7.1908.0.el7.centos.x86_64 上遇到了同样的问题,设置和配置完全相同。
我通过 journalctl -xe 注意到,在服务启动阶段尝试访问 /tmp/.X11-unix/X59 文件时生成了一个错误(我的 VNC 设置为在端口 5959 上运行)。手动删除它后,服务又恢复正常。
答案2
RHEL7 和 CentOS 7 默认开启 iptables。我收到了各种奇怪的错误。这个和其中一个非常相似。您可以通过运行以下命令来确保这是您的情况:
sudo systemctl status firewalld
如果是这种情况,您应该在 iptables 中打开 VNC,请参阅此处的详细信息: 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
停止将停止它,禁用将阻止它在重启后返回。