【记录】一次centos7.9系统配置VNC服务过程

一、环境

系统: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-serverGNOME 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值