TigerVNC 是一套高性能的 VNC (Virtual Network Computing) 服务端工具。它基于 Xvnc 在 VNC 桌面上启动了一个窗口管理器,并提供两种主要模式:
vncserver(虚拟桌面):允许用户在计算机上并行运行多个虚拟 X 显示会话,实现了多客户端访问该计算机的不同虚拟桌面,适合多用户并行使用;x0vncserver(实机画面共享):则不创建虚拟显示,而是共享一个现有的 X 服务器,通常被用于实机画面的控制服务。
安装 TigerVNC 服务端
Debain 系
根据需要安装下列包之一:
1 | apt-get install tigervnc-standalone-server # 完整安装 |
RH 系
1 | yum install tigervnc-server # 确保以 root 身份登录 |
提醒: 对于 RH 系 的系统,如果没有连接到 RHN 或卫星服务器,请参考以下文章:
启动 vncserver (虚拟桌面)
准备文件
为需要用于启用 VNC 虚拟桌面服务的用户配置 VNC 密码,在必要时为每个 VNC 用户重复操作:
1 | su - vncuser1 # 切换至对应用户 |
提醒: 使用
vncpasswd为用户创建密码后,会在对应用户的~/.vnc/目录下生成名为passwdVNC 密码文件,也可使用如下命令在任意位置创建任意名称的 VNC 密码文件:
1 vncpasswd .vncpasswd # 在当前目录创建名为 .vncpasswd 的 VNC 密码文件
如需为用户配置分辨率,可选择以下两种方法之一:
- 统一配置。使用您喜欢的编辑器来编辑
/etc/sysconfig/vncservers追加以下行:
1 | VNCSERVERS="1:vncuser1 2:vncuser2" # 将“vncuser1和“vncuser2”替换为正确的用户名 |
- 单独配置。单独为某个用户配置分辨率,编辑
~/.vnc/config追加以下行:
1 | geometry = <WIDTH> x <HEIGHT> |
提醒: VNC 虚拟桌面默认分辨率为 1024x768。
创建服务
安装时将自动生成 /usr/lib/systemd/system/vncserver@.service 示例文件,若未找到,可按以下内容手动创建 vncserver@.service 文件:
1 | [Unit] |
将其复制到 /etc/systemd/system/ 目录,单用户保持其原名称即可:
1 | cp /usr/lib/systemd/system/vncserver@.service \ |
多用户则需要分别命名:
1 | # vncuser1 |
编辑 /etc/systemd/system/vncserver@.service 文件,将如下行中的 <USER> 替换为实际用户名,其他行不动:
1 | ExecStart=/usr/bin/vncserver_wrapper <USER> %i |
为确保变更生效,需执行以下命令:
1 | systemctl daemon-reload # 重载服务 |
启动服务
启动时需要指定一个非“0”的 <display_number> (“0”为实机画面预留显示号),并根据系统支持执行以下两组命令之一:
1 | # service 命令 |
启动 x0vncserver (实机画面)
x0vncserver 不创建虚拟桌面,而是共享当前物理显示器(DISPLAY=:0)。 适用于远程控制真实桌面(如 KDE、GNOME、XFCE)。
准备文件
使用 root 用户创建 VNC 密码文件,并将其保存在共享目录 /usr/share/ 下以避免权限问题:
1 | mkdir /usr/share/.vnc |
创建服务 (systemd)
在 /etc/systemd/system/ 目录下手动创建 x0vncserver.service 文件:
1 | [Unit] |
为确保变更生效,需执行以下命令:
1 | systemctl daemon-reload # 重载服务 |
启动服务
根据系统支持执行以下两组命令之一:
1 | # service 命令 |
(拓展)手动启动的方法
手动使用 TigerVNC 的 x0vncserver命令共享实机画面:
1 | x0vncserver -PasswordFile=~/.vnc/passwd -AlwaysShared=1 # 使用用户的密码文件,或: |
(拓展)脚本启动的方法
使用 git 工具克隆脚本仓库:
1 | git clone https://github.com/sebestyenistvan/runvncserver.git |
或者通过如下链接下载脚本,并手动上传至服务端主机:
1 | cd ./runvncserver/ # 进入仓库目录 |
脚本用法 (默认使用 ~/.vnc/passwd 文件,启动前确保文件存在):
1 | ./startvnc |
设置脚本开机自启的方法(将下方的地址替换为正确的脚本地址):
1 | echo "/home/user/runvncserver/startvnc start >/dev/null 2>&1" >> ~/.xsessionrc |
(拓展) Upstart 自启动方案 (2026/04/20 更新)
测试环境:Kubuntu 14.04 + KDE + LightDM
方案背景:Ubuntu 14.04 默认使用 Upstart,而不是 systemd。 Kubuntu 14.04 的 KDE 桌面默认使用 LightDM 作为显示管理器。登录前 Xauthority 属于 LightDM,而不是用户,且登录后 Xauthority 仍然可用(14.04 不会切换)
经过多轮调试,我们最终得到一个具备如下功能的 通用 Upstart 脚本:
- 自动检测 DISPLAY
- 自动检测 LightDM / SDDM / KDM / GDM / 用户桌面
- 自动检测 Xauthority
- 自动检测 VNC 密码文件
- 自动恢复
- 失败延时 5 秒(防止疯狂重启)
- 登录前可用(显示登录界面)
- 登录后可用(显示桌面)
- 运行日志记录
执行以下命令,为 DM (以 LightDM 为例)创建 VNC 密码(登录前使用):
1 | sudo mkdir -p /var/lib/lightdm/.vnc |
创建 Upstart 服务配置。新建并编辑 /etc/init/x0vncserver.conf 文件,写入以下内容:
1 | description "Universal auto-detect x0vncserver for major Linux desktops" |
脚本使用及日志查看方法:
1 | sudo service x0vncserver start # 启动服务 |
此时你可以在系统启动后就能远程看到实机的 KDE 登录界面。
配置防火墙
开放相应端口:
1 | # x0vncserver |
提醒: 实机画面需要打开5900端口,此外每个虚拟桌面用户都需要从 5901 开始的已打开的额外防火墙端口。因为在上面添加了两个用户,所以我们需要再打开两个端口。
保存规则(根据情况选择以下之一):
1 | service iptables save # 旧版本 |
提醒: 对于 RHEL7 及以后系统出现缺少
iptables命令或者重启后iptables规则失效的情况,请参考以下文章:
参考资料
- 如何在Redhat Enterprise Linux (RHEL) 6上安装和配置VNC服务器 | Dell 中国
- Chapter 13. TigerVNC Red Hat Enterprise Linux 7 | Red Hat Customer Portal
- easy_systemd/x0vncserver@.service at master · SYHGroup/easy_systemd (github.com)
- How to start a vnc server for the actual display (scraping) with TigerVNC (howtoforge.com)
- sebestyenistvan/runvncserver: Shell script to run tigervnc server (github.com)
- 拓展资料:VNC server配置 - 我的linux不可能这么可爱 - SegmentFault 思否
- 拓展资料:x0vncserver 共享桌面-腾讯云开发者社区-腾讯云 (tencent.com)