有什么用
• 远程运维:在只有 SSH 的 VPS/云主机上获得图形界面,方便跑 GUI 程序、浏览器、IDE 等。
• 教学/演示:通过浏览器即可给学生/同事展示 Linux 桌面,无需安装 VNC 客户端。
• 轻量级云桌面:比 RDP 省资源,比纯 CLI 友好。
- 主要安装的软件
• XFCE4 桌面环境 + xfce4-goodies(窗口管理器、面板、主题等)
• TightVNC Server(vncserver 命令)
• noVNC + websockify(浏览器里直接访问 VNC)
• Python3-pip、numpy(noVNC 可选加速)
• Firefox(PPA 非 snap 版) - 达到的效果
• 在 Ubuntu 服务器/最小系统上“一键”获得完整的图形桌面。
• 提供两种访问方式:
– 传统 VNC 客户端 → IP:5901
– 任意现代浏览器 → https://IP:8443/vnc.html
• 可选 systemd 服务,开机自启 VNC。
• 附带 ~/start_vnc.sh 脚本,一条命令即可同时启动 VNC + noVNC。 - 让桌面在 noVNC 网页关闭后仍继续运行
noVNC 只是 VNC 的一个 Web 前端,真正跑桌面的是 vncserver。
因此只要 vncserver 进程没被杀,桌面就一直存在。做法: 方法 A:分离启动
# 先启动 VNC(桌面会话)
vncserver :1
# 再单独启动 noVNC 代理(可多次开/关)
~/noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 8443
关闭浏览器或 Ctrl-C 结束 novnc_proxy 时,VNC 会话 :1 仍在后台。
方法 B:使用 systemd 服务
脚本已帮你把 vncserver 做成系统服务。
sudo systemctl enable --now vncserver # 开机自启
这样无论 noVNC 是否启动,桌面始终运行;需要时再手动执行
即可再次通过浏览器访问。
~/noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 8443
#!/bin/bash
# 自动安装XFCE桌面和VNC服务器脚本
# 适用于Ubuntu系统
# 显示彩色输出
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}开始安装XFCE桌面和VNC服务器...${NC}"
# 更新系统
echo -e "${GREEN}[1/7] 更新系统包...${NC}"
sudo apt-get update
sudo apt-get -y upgrade
# 安装XFCE桌面环境
echo -e "${GREEN}[2/7] 安装XFCE桌面环境...${NC}"
sudo apt-get install -y xfce4 xfce4-goodies git
# 安装VNC服务器
echo -e "${GREEN}[3/7] 安装TightVNC服务器...${NC}"
sudo apt-get install -y tightvncserver
# 首次启动VNC服务器设置密码
echo -e "${GREEN}[4/7] 设置VNC密码...${NC}"
echo -e "${BLUE}请为VNC设置密码 (最多8位)${NC}"
vncserver
# 停止VNC服务器以配置启动文件
echo -e "${GREEN}[5/7] 配置VNC启动文件...${NC}"
vncserver -kill :1
# 备份原始xstartup文件
mkdir -p ~/.vnc/backup
if [ -f ~/.vnc/xstartup ]; then
cp ~/.vnc/xstartup ~/.vnc/backup/xstartup.bak.$(date +%Y%m%d%H%M%S)
fi
# 创建新的xstartup文件
cat > ~/.vnc/xstartup << 'EOF'
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
EOF
# 设置执行权限
chmod +x ~/.vnc/xstartup
# 安装noVNC(可选,用于通过浏览器访问VNC)
echo -e "${GREEN}[6/7] 安装noVNC(通过浏览器访问VNC)...${NC}"
cd ~/
git clone https://github.com/novnc/noVNC.git
cd noVNC
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem -subj "/C=CN/ST=State/L=City/O=Organization/CN=localhost"
# 创建启动脚本
echo -e "${GREEN}[7/7] 创建启动脚本...${NC}"
cat > ~/start_vnc.sh << 'EOF'
#!/bin/bash
# 获取系统IP
IP=$(hostname -I | cut -d' ' -f1)
echo "VNC服务器已启动"
echo "使用VNC客户端连接: $IP:5901"
echo "或者通过浏览器访问: https://$IP:8443/vnc.html?host=$IP&port=8443"
# 启动VNC服务器
vncserver :1
# 启动noVNC代理
~/noVNC/utils/novnc_proxy --vnc localhost:5901 --listen 8443
# 捕获Ctrl+C信号,优雅地关闭VNC服务器
trap 'vncserver -kill :1; echo "VNC服务器已关闭"; exit 0' INT
# 保持脚本运行
while true; do
sleep 1
done
EOF
chmod +x ~/start_vnc.sh
# 创建系统服务(可选)
echo -e "${BLUE}是否要设置VNC服务器为系统服务,开机自启动? (y/n)${NC}"
read setup_service
if [ "$setup_service" = "y" ] || [ "$setup_service" = "Y" ]; then
echo -e "${GREEN}设置VNC服务器为系统服务...${NC}"
# 创建服务文件
cat > /tmp/vncserver.service << EOF
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=$USER
Group=$USER
WorkingDirectory=$HOME
ExecStartPre=-/usr/bin/vncserver -kill :1 > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :1
ExecStop=/usr/bin/vncserver -kill :1
[Install]
WantedBy=multi-user.target
EOF
sudo mv /tmp/vncserver.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable vncserver.service
sudo systemctl start vncserver.service
echo -e "${GREEN}VNC服务器已设置为系统服务,将在开机时自动启动。${NC}"
fi
# 安装Python依赖,用于加速noVNC
echo -e "${GREEN}安装Python依赖,用于加速noVNC...${NC}"
sudo apt-get install -y python3-pip
pip3 install numpy
# 安装Firefox浏览器(非snap版本)
echo -e "${GREEN}安装Firefox浏览器...${NC}"
sudo add-apt-repository -y ppa:mozillateam/ppa
# 确保PPA版本优先于snap版本
echo '
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
' | sudo tee /etc/apt/preferences.d/mozilla-firefox
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
sudo apt-get update
sudo apt-get install -y --allow-downgrades firefox
# 完成安装
echo -e "${BLUE}===========================================${NC}"
echo -e "${BLUE}XFCE桌面和VNC服务器安装完成!${NC}"
echo -e "${BLUE}使用方法:${NC}"
echo -e "${GREEN}1. 运行 ~/start_vnc.sh 启动VNC服务器${NC}"
echo -e "${GREEN}2. 使用VNC客户端连接到 您的IP:5901${NC}"
echo -e "${GREEN}3. 或通过浏览器访问 https://您的IP:8443/vnc.html${NC}"
echo -e "${GREEN}4. 登录密码是您之前设置的VNC密码${NC}"
echo -e "${BLUE}===========================================${NC}"