好的,在 Linux 系统中,VNC 是一个非常实用的远程桌面工具。下面我将为您提供一个完整、详细且适用于主流发行版(如 CentOS/RHEL、Ubuntu/Debian)的安装和配置指南。
![图片[1]_Linux之VNC工具安装及远程连接过程_知途无界](https://zhituwujie.com/wp-content/uploads/2025/12/d2b5ca33bd20251219094442.png)
我们将使用 TigerVNC 作为 VNC 服务器,因为它性能好、安全性高且易于配置。整个过程分为四个主要部分:
- 安装 VNC 服务器和客户端
- 配置 VNC 服务器(核心步骤)
- 启动并设置 VNC 服务为开机自启
- 使用 VNC 客户端进行远程连接
方法概览
我们将为指定的 Linux 用户创建一个独立的 VNC 会话(例如,一个名为 myvncuser 的用户)。这种方式安全且互不干扰。我们将:
- 安装 TigerVNC 服务器。
- 为用户设置 VNC 密码。
- 配置一个
~/.vnc/xstartup脚本,以启动用户熟悉的桌面环境(如 GNOME, KDE, XFCE)。 - 启动 VNC 服务器实例(例如,显示端口
:1)。 - 使用 VNC 客户端(如 RealVNC, TightVNC)连接。
第一部分:安装 VNC 服务器和客户端
首先,通过 SSH 或本地终端以 root 或 sudo 用户身份登录到你的 Linux 系统。
1.1 在 RHEL / CentOS / Fedora 上安装
这些系统使用 dnf (或 yum) 包管理器。
# 更新系统包(可选,但推荐)
sudo dnf update -y
# 安装 TigerVNC 服务器和客户端
sudo dnf install tigervnc-server tigervnc -y
# 安装你想要的桌面环境(如果系统尚未安装)
# 例如,安装 GNOME(CentOS 8+/RHEL 8+ 默认)
sudo dnf groupinstall "Server with GUI" -y
# 或者安装 XFCE(轻量级,推荐用于服务器)
# sudo dnf groupinstall "Xfce" -y
1.2 在 Debian / Ubuntu 上安装
这些系统使用 apt 包管理器。
# 更新系统包列表
sudo apt update
# 安装 TigerVNC 服务器和客户端
sudo apt install tigervnc-standalone-server tigervnc-common -y
# 安装你想要的桌面环境
# 例如,安装 XFCE(非常流行且轻量)
sudo apt install xfce4 xfce4-goodies -y
# 或者安装完整的 GNOME 桌面
# sudo apt install ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y
第二部分:配置 VNC 服务器(核心步骤)
现在,我们将为一个普通用户配置 VNC。请不要直接用 root 用户运行 VNC 会话,这存在安全风险。
2.1 切换到目标用户并设置 VNC 密码
假设我们要为 myvncuser 这个用户配置 VNC。
# 切换到目标用户
su - myvncuser
# 为该用户设置 VNC 专用密码
# 这个命令会在 ~/.vnc/ 目录下创建一个名为 passwd 的文件
vncpasswd
执行 vncpasswd 后,会提示你输入并确认密码。这个密码是客户端连接时使用的。注意: VNC 密码长度最长为 8 个字符。如果输入超过 8 位,只有前 8 位有效。
你还可以设置一个仅限查看的密码(View-only password),用它可以连接但无法进行任何操作(只能看)。按需设置即可。
完成后,你会看到 ~/.vnc/passwd 文件被创建。
2.2 创建和编辑 xstartup 启动脚本
这个脚本决定了你 VNC 会话启动后会看到什么样的桌面环境。
# 确保在用户家目录下
cd ~
# 创建 .vnc 目录(如果 vncpasswd 没自动创建的话)
mkdir -p .vnc
# 编辑 xstartup 文件
vim ~/.vnc/xstartup
根据你的桌面环境,将以下内容之一复制粘贴到 xstartup 文件中。
选项 A:适用于 XFCE 桌面 (推荐用于服务器)
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
选项 B:适用于 GNOME 桌面
#!/bin/bash
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
gnome-session &
选项 C:适用于 KDE Plasma 桌面
#!/bin/bash
export XDG_SESSION_TYPE=x11
export XDG_CURRENT_DESKTOP=KDE
startplasma-x11 &
重要: 给 xstartup 文件添加可执行权限!
chmod +x ~/.vnc/xstartup
第三部分:启动 VNC 服务并设置开机自启
现在我们来启动 VNC 服务器。VNC 的显示端口号从 :1 开始,对应 TCP 端口 5901。:2 对应 5902,以此类推。
3.1 手动启动 VNC 服务器(用于测试)
我们先手动启动一次,看看有没有错误。
# 语法: vncserver <display_number> -geometry <分辨率> -depth <色深>
# 例如,启动显示号为 :1 的会话,分辨率为 1920x1080,色深 24位
vncserver :1 -geometry 1920x1080 -depth 24
如果一切正常,你会看到类似下面的输出:
New 'myhostname:1 (myvncuser)' desktop is myhostname:1
Starting applications specified in /home/myvncuser/.vnc/xstartup
Log file is /home/myvncuser/.vnc/myhostname:1.log
现在,VNC 服务器已经在 5901 端口上运行了。
注意: 如果启动失败,查看日志文件 ~/.vnc/myhostname:1.log 来排查错误(例如,桌面环境未正确安装或 xstartup 脚本有误)。
3.2 (推荐)配置 systemd 服务以实现开机自启
手动启动的 VNC 在系统重启后会失效。我们需要为它创建一个 systemd 服务单元文件。
首先,停止刚才手动启动的 VNC 会话:
vncserver -kill :1
然后,复制 VNC 服务模板文件:
大多数系统自带了针对不同用户的 VNC 服务模板。
# 复制模板文件,文件名格式通常为 vncserver@.service
# @符号后面的数字就是显示号,我们会用这个作为变量
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
编辑服务文件:
sudo vim /etc/systemd/system/vncserver@:1.service
找到以 ExecStart 开头的行,并进行修改。默认的模板可能比较复杂,我们把它简化。核心是让它用我们的 myvncuser 用户去启动显示号 :1 的 VNC 服务器。
修改后的 ExecStart 和 ExecStop 行通常如下:
[Unit]
Description=TigerVNC Server for user %u on display :%i
After=syslog.target network.target
[Service]
Type=forking
User=myvncuser # <--- !!!修改为你自己的用户名!!!
PAMName=login
PIDFile=/home/%u/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24 -localhost no
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
关键修改说明:
User=myvncuser: 指定运行此服务的用户。ExecStart=/usr/bin/vncserver :%i ...:%i会被 systemd 替换为@后面的数字(这里是1)。我们添加了-geometry和-depth参数来确保启动时使用正确的分辨率和色深。-localhost no允许非本地连接(如果只想本地连接则用yes并通过 SSH 隧道)。
重新加载 systemd 并启用服务:
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启用服务,使其在系统启动时自动运行
# 这里启用的是我们创建的 vncserver@:1.service 文件
sudo systemctl enable vncserver@:1.service
# 立即启动 VNC 服务
sudo systemctl start vncserver@:1.service
# 检查服务状态,确保它是 running 状态
sudo systemctl status vncserver@:1.service
如果状态显示为 active (running),恭喜你,VNC 服务已经成功配置为开机自启!
第四部分:使用 VNC 客户端进行远程连接
现在,你可以在你的 Windows、macOS 或另一台 Linux 电脑上使用 VNC 客户端进行连接了。
4.1 查找服务器 IP 地址
在你的 Linux VNC 服务器上,使用 ip addr 或 ifconfig 命令找到它的 IP 地址。
ip addr show
假设服务器的 IP 地址是 192.168.1.100。
4.2 配置防火墙(如果启用)
VNC 使用的是 5900 + 显示号 的端口。对于显示号 :1,端口是 5901。你需要在防火墙中开放这个端口。
在 RHEL/CentOS/Fedora (firewalld) 上:
sudo firewall-cmd --permanent --add-port=5901/tcp
sudo firewall-cmd --reload
在 Debian/Ubuntu (ufw) 上:
sudo ufw allow 5901/tcp
4.3 使用 VNC 客户端连接
- 下载并安装一个 VNC 客户端,如:
- RealVNC: https://www.realvnc.com/en/connect/download/viewer/ (跨平台,很好用)
- TightVNC: https://www.tightvnc.com/ (Windows)
- GNOME Connections (Linux)
- 打开 VNC 客户端,在地址栏中输入:
<server_ip_address>:1或者<server_ip_address>::5901例如:192.168.1.100:1 - 点击“连接”,客户端会提示你输入之前用
vncpasswd设置的密码。 - 成功验证后,你将看到 Linux 系统的远程桌面!
安全建议:使用 SSH 隧道
直接通过 5901 端口暴露 VNC 流量是不安全的,因为 VNC 协议本身不加密。最佳实践是通过 SSH 隧道转发 VNC 端口。
操作方法(在客户端电脑上执行):
# -L 参数将本地的 5901 端口转发到远程服务器的 5901 端口
# user@remote_host 是你的 Linux 服务器的用户名和 IP
ssh -L 5901:localhost:5901 user@192.168.1.100
然后,在你的 VNC 客户端中,不再连接 192.168.1.100:1,而是连接 **localhost:1 或 127.0.0.1:1**。SSH 会自动将加密后的流量转发到服务器。

























暂无评论内容