Deepin桌面环境配置TigerVNC远程桌面完整指南

前言

最近在Deepin操作系统上配置 TigerVNC 远程桌面时,遇到了连接后黑屏、立即断开的问题。经过一番折腾,终于找到了完美的解决方案。

本文将详细记录整个配置过程和踩坑经验,希望能帮助到遇到同样问题的朋友。


环境说明

  • 操作系统:Deepin DDE (Deepin Desktop Environment)
  • VNC服务端:TigerVNC 1.12.0
  • 用户:普通用户(非root)

问题现象

使用 TigerVNC 连接 Deepin 桌面时出现以下问题:

  • VNC客户端连接后黑屏,没有任何显示
  • 连接建立后几秒钟自动断开
  • 日志显示 dde-session.target 启动失败

根本原因分析

Deepin桌面环境(DDE)默认依赖 systemd 用户服务(特别是 dde-session.target)来启动整个桌面。

然而,在 VNC 创建的 X 会话环境中,systemd 用户服务默认没有运行,导致 startddedde-session 无法正常启动,最终表现为黑屏或立即退出。


解决方案

一、配置VNC启动脚本

核心思路:绕过 systemd,手动启动 DDE 的核心组件。

编辑 VNC 启动脚本 ~/.vnc/xstartup

bash 复制代码
#!/bin/bash

# 清理环境变量,避免与现有桌面冲突
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

export DISPLAY=:1
export XDG_SESSION_TYPE=x11
export XDG_CURRENT_DESKTOP=Deepin

# 等待X服务器就绪
sleep 2

# 启动dbus会话(关键!)
dbus-launch --sh-syntax > /tmp/dbus.env
source /tmp/dbus.env

# 直接启动DDE核心组件(绕过systemd)
/usr/bin/dde-session &

# 额外启动必要的桌面组件
sleep 1
/usr/bin/dde-launcher &   # 启动器
/usr/bin/dde-dock &       # 任务栏
/usr/bin/dde-desktop &    # 桌面

# 保持脚本运行
wait

设置执行权限:

bash 复制代码
chmod +x ~/.vnc/xstartup

二、手动启动VNC服务

bash 复制代码
# 停止已有会话(如果有)
vncserver -kill :1

# 清理残留文件
rm -f /tmp/.X1-lock /tmp/.X11-unix/X1

# 启动VNC服务
vncserver :1 -localhost no -geometry 1920x1080 -depth 24

参数说明

  • :1:显示编号,对应端口5901
  • -localhost no:允许非本机连接
  • -geometry 1920x1080:设置分辨率
  • -depth 24:颜色深度

三、配置开机自启(可选)

如果需要系统启动时自动运行 VNC 服务,可以配置 systemd。

创建服务文件:

/etc/systemd/system/vncserver@.service

ini 复制代码
[Unit]
Description=TigerVNC Server
After=network.target systemd-user-sessions.service

[Service]
Type=forking
User=guocf
Group=guocf
PAMName=login
WorkingDirectory=/home/guocf

PIDFile=/run/vncserver.pid

ExecStart=/usr/bin/vncserver :%i \
    -geometry 1920x1080 \
    -depth 24 \
    -localhost no \
    -SecurityTypes VncAuth

ExecStop=/usr/bin/vncserver -kill :%i
SuccessExitStatus=0 1

[Install]
WantedBy=multi-user.target

启用服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1

四、防火墙配置

如果连接不上,检查防火墙是否开放了 VNC 端口(默认5901):

bash 复制代码
# 如果使用ufw
sudo ufw allow 5901/tcp

# 如果使用firewalld
sudo firewall-cmd --permanent --add-port=5901/tcp
sudo firewall-cmd --reload

替代方案:x0vncserver

如果上述方案仍然无法解决,可以使用 x0vncserver 直接共享当前物理桌面(显示 :0),这是最简单可靠的方案。

bash 复制代码
# 安装
sudo apt install tigervnc-scraping-server

# 设置密码
vncpasswd ~/.vnc/passwd

# 启动共享
x0vncserver \
  -display :0 \
  -passwordfile ~/.vnc/passwd \
  -rfbport 5901 \
  -forever

优点

  • 100%可靠
  • 配置简单

缺点

  • 共享的是当前已登录的桌面
  • 用户注销后服务断开

常见问题排查

问题现象 可能原因 解决方法
黑屏后立即断开 dde-session.target 启动失败 使用本文的手动启动方案
X1 socket文件不存在 Xvnc初始化失败 清理 /tmp/.X1-lock/tmp/.X11-unix/X1 后重启
systemd服务启动失败 PID文件权限问题 检查服务配置中的用户和路径
dde-session: Unknown option 参数错误 直接运行 dde-session,不要加 --session 参数

连接测试

使用 VNC 客户端连接(如 TigerVNC Viewer、RealVNC 等):

text 复制代码
服务器地址:你的IP地址:5901
密码:你设置的VNC密码

这里推荐 Aeroshell连接,应该就看到完整的 Deepin 桌面环境。


核心要点总结

  • Deepin DDE 强依赖 systemd 用户服务,在 VNC 环境中需要手动启动核心组件绕过这一限制
  • 关键组件:
    • dde-session
    • dde-launcher
    • dde-dock
    • dde-desktop
  • 必须启动 dbus 会话,否则组件间无法正常通信
  • startdde 不是唯一入口,拆解为组件手动启动更可靠
  • 如果只需要远程访问当前桌面,x0vncserver 是最省心的方案

参考资料

  • TigerVNC官方文档
  • Deepin社区Wiki

本文档基于 TigerVNC 1.12.0 + Deepin DDE 环境验证通过

相关推荐
zincsweet2 小时前
Linux进程队列的原理
linux
code monkey.2 小时前
【Linux之旅】Linux 线程同步与互斥实战:从锁机制到生产消费模型全指南
linux·c++·线程·同步·互斥
我能坚持多久2 小时前
STL详解——list的模拟实现
c++·windows·list
銳昊城2 小时前
项目九:活动目录和域的组建(1) C1
运维·服务器
司晨卿2 小时前
claude windows安装
windows
我是Superman丶2 小时前
Windows 创建软链接/目录联接命令
windows
risc1234562 小时前
所有“能调用大模型”的框架分类
java·服务器·前端
仍然.2 小时前
传输层协议UDP
网络·网络协议·udp
Mortalbreeze2 小时前
理解文件和缓冲区
linux·服务器