前言
最近在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 用户服务默认没有运行,导致 startdde 或 dde-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-sessiondde-launcherdde-dockdde-desktop
- 必须启动
dbus会话,否则组件间无法正常通信 startdde不是唯一入口,拆解为组件手动启动更可靠- 如果只需要远程访问当前桌面,
x0vncserver是最省心的方案
参考资料
- TigerVNC官方文档
- Deepin社区Wiki
本文档基于 TigerVNC 1.12.0 + Deepin DDE 环境验证通过