一、环境
系统:centos7.9
桌面;GNOME DESKTOP
二、安装步骤
(一)安装VNC服务端
#更新系统
sudo yum update -y
#安装TigerVNC服务端
sudo yum install tigervnc-server -y
(二)配置VNC用户
2.1 创建VNC用户
#若需新建用户(例如用户名为 vncuser)
sudo adduser vncuser
sudo passwd vncuser
2.2 设置VNC密码
切换到目标用户
su - vncuser # 或者直接使用现有用户
vncpasswd # 根据提示输入VNC登录密码(会生成 ~/.vnc 目录)
#确保 ~/.vnc/passwd 权限为 600
ls -l /home/vncuser/.vnc/passwd
#正确权限:
-rw-------. 1 vncuser vncuser 8 Aug 10 10:00 /home/vncuser/.vnc/passwd
#修复权限(如果需要)
sudo chmod 600 /home/vncuser/.vnc/passwd
sudo chown vncuser:vncuser /home/vncuser/.vnc/passwd
(三)配置VNC服务
3.1 复制systemd模板文件
sudo cp /lib/systemd/system/vncserver@.service etc/systemd/system/vncserver@:1.service
#检查服务文件权限
ls -l /etc/systemd/system/vncserver@:1.service
# 正确权限应为 root:root 和 644
sudo chown root:root /etc/systemd/system/vncserver@:1.service
sudo chmod 644 /etc/systemd/system/vncserver@:1.service
3.2 修改配置文件
编辑 /etc/systemd/system/vncserver@:1.service
,
替换 <USER>
为实际用户名(如 vncuser
):
```
Type=forking
User=vncuser # 指定服务运行时使用的用户
Group=vncuser # 指定用户组(可选,通常与用户名相同)
# 关键:清理残留进程的命令需要与User一致
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -geometry 1280x720 -depth 24
ExecStop=/usr/bin/vncserver -kill %i
```
(四)启动VNC服务
#重新加载systemd配置
sudo systemctl daemon-reload
#启动服务(:1对应端口5901,:2对应5902,以此类推)
sudo systemctl start vncserver@:1
#设置开机自启
sudo systemctl enable vncserver@:1
(五)防火墙配置
#开放VNC端口(默认5901)
sudo firewall-cmd --permanent --add-port=5901/tcp
sudo firewall-cmd --reload
(六)客户端验证
6.1 客户端工具
- 下载VNC Viewer(如 RealVNC 或 TigerVNC)。
6.2 连接方式
- 地址格式:
<服务器IP>:1
(端口5901)或<服务器IP>:5901
- 示例:
192.168.1.100:1
- 示例:
6.3 输入密码
- 使用步骤2.2中设置的VNC密码登录。
(七)常见问题排查
1. 连接失败:
- 检查服务状态:
sudo systemctl status vncserver@:1
2. 黑屏或无显示:
- 确保用户目录下存在
.vnc/xstartup
文件,并赋予执行权限:
chmod +x ~/.vnc/xstartup
3.验证是否安装了GNOME桌面环境的详细方法:
(1)检查已安装的GNOME相关软件包
通过RPM包管理器查询是否安装了GNOME核心组件:
#rpm -qa | grep -E ‘gnome-desktop3|gnome-shell|gnome-session|gnome-classic-session’
- 输出示例:
gnome-desktop3-3.28.2-14.el7.x86_64 gnome-shell-3.28.3-12.el7.x86_64 gnome-session-3.28.1-13.el7.x86_64
(2)查看系统默认的图形界面
检查系统是否默认启动图形界面(运行级别为5):
#systemctl get-default
- 输出示例:
graphical.target # 表示系统默认启动图形界面 multi-user.target # 表示默认启动命令行模式
- 补充:
即使设置为graphical.target
,若未安装GNOME,启动时仍会进入命令行。
(3)验证当前运行的桌面环境
如果系统已处于图形界面,可通过以下命令确认:
#echo $XDG_CURRENT_DESKTOP - 输出示例:
GNOME-Classic:GNOME
或检查GNOME进程:
#ps aux | grep -E 'gnome-shell|gnome-session'
- 输出示例:
root 1234 0.0 1.2 123456 7890 ? Sl 10:00 0:01 /usr/bin/gnome-shell
(4)检查GNOME配置文件
查看是否存在GNOME会话配置文件:
#ls /usr/share/xsessions/ | grep -i gnome
- 输出示例:
gnome-classic.desktop gnome-custom-session.desktop
(5)尝试启动GNOME(可选)
如果当前处于命令行模式,可手动启动GNOME:
startx
- 结果:
若GNOME已安装,系统将进入图形界面;若未安装,会提示错误(如command not found
)。
(6)安装GNOME(如果未安装)
若验证发现未安装GNOME,可通过以下命令安装:
#yum groupinstall “GNOME Desktop” -y
安装完成后设置默认启动图形界面:
#systemctl set-default graphical.target
#reboot
(7)关联VNC服务的GNOME配置
如果已部署VNC服务但遇到黑屏问题,需确保VNC的xstartup
文件正确调用GNOME:
检查/root/.vnc/xstartup(以root用户为例)
cat /root/.vnc/xstartup - 正确配置示例(GNOME环境):
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/xinit/xinitrc
- 赋予执行权限:
chmod +x /root/.vnc/xstartup
4、是否安装 `epel-release
- VNC服务(如 TigerVNC)和 GNOME 桌面环境 的核心组件已包含在 CentOS 默认仓库中,因此:
- 如果仅需基础功能(如安装
tigervnc-server
或GNOME Desktop
),无需安装 EPEL。 - 如果需要额外工具或依赖(如某些图形管理工具、优化插件等),可能需要 EPEL。
什么样子的场景需要安装 EPEL
- 如果仅需基础功能(如安装
- 安装某些工具时提示
No package available
,例如:yum install htop # 进程监控工具 yum install remmina # 远程桌面客户端
安装 EPEL 的方法
#若决定安装,执行以下命令:
yum install epel-release -y
#安装后,EPEL 仓库会自动启用,您可以通过以下命令验证:
yum repolist | grep epel
5、协议与安全版本问题
告警:
Wed Apr 2 13:32:20 2025 Connections: accepted: 10.4.4.29::52273 SConnection: Client needs protocol version 3.8 SConnection: Client requests security type VncAuth(2)
强制服务器使用兼容协议
编辑VNC服务启动命令(通常在 /etc/systemd/system/vncserver@:1.service 中):
ExecStart=/usr/bin/vncserver %i -geometry 1280x720 -depth 24 -SecurityTypes=VncAuth
重启服务:
sudo systemctl restart vncserver@:1
6、服务器强制更改像素
告警:
Wed Apr 2 13:32:24 2025 VNCSConnST: Server default pixel format depth 24 (32bpp) little-endian rgb888 VNCSConnST: Client pixel format depth 6 (8bpp) rgb222
#ExecStart=后面添加 -pixelformat rgb888
7、gnome-shell与gdbus
告警
wrapper@resource:///org/gnome/gjs/modules/_legacy.js:82:22 4月 02 14:06:51 localhost.localdomain gnome-shell[86717]: JS ERROR: Failed to open reauthentication channel: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: 无可用的会话
日志中的错误 GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: 无可用的会话 表明 GNOME Shell 无法通过DBus完成身份验证,通常发生在以下场景:
a.非图形界面登录环境(如VNC会话)中,用户会话未正确关联到DBus。
b.权限限制导致DBus拒绝访问。
c.SELinux或用户组策略阻止了身份验证流程。
(1) 确保用户会话与DBus关联
在VNC用户的 ~/.vnc/xstartup
文件中 明确指定DBus会话地址:
#vim /home/vncuser/.vnc/xstartup
修改内容为:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS # 删除或注释此行
export $(dbus-launch) # 添加此行以启动DBus会话
# 启动GNOME
exec /etc/X11/xinit/xinitrc
赋予执行权限:
chmod +x /home/vncuser/.vnc/xstartup
(2)调整用户组权限
将用户 vncuser
加入必要的用户组:
usermod -aG audio,video,dbus,input vncuser
(3)配置DBus策略允许非图形会话
创建或编辑DBus策略文件:
sudo vim /etc/dbus-1/session-local.conf
添加以下内容:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy context="default">
<allow send_destination="org.gnome.Shell"/>
<allow send_interface="org.gnome.SessionManager"/>
</policy>
</busconfig>
重启DBus服务:
sudo systemctl restart dbus
(4)修改GNOME配置绕过认证检查
编辑GNOME Shell配置文件:
sudo vim /etc/gdm/custom.conf
在 [daemon]部分添加:
[daemon]
WaylandEnable=false # 禁用Wayland(必须)
AutomaticLoginEnable=true # 允许自动登录(可选)
AutomaticLogin=vncuser # 自动登录用户(可选)
(5)调整SELinux策略(如果未配置则可以放过)
允许VNC用户访问DBus:
sudo semanage boolean --modify --on nis_enabled
sudo semanage boolean --modify --on authlogin_nsswitch_use_ldap
sudo setsebool -P daemons_enable_cluster_mode 1
(6)重启VNC服务
sudo systemctl restart vncserver@:1
(7)检查DBus会话状态:
sudo -u vncuser dbus-launch
应输出 DBUS_SESSION_BUS_ADDRESS 和 DBUS_SESSION_BUS_PID
8、VNC Main PID: 81160 (code=exited, status=1/FAILURE)
启动失败,主程序退出。
journalctl -u vncserver@:1
命令查看服务的日志。
如遇问题,请检查日志 /var/log/messages
或用户目录下的 ~/.vnc/*.log
。