Ubuntu 22.04 远程桌面环境安装
Ubuntu 22.04 远程桌面环境安装
Ubuntu 22.04 远程桌面环境安装与最佳实践全指南
适用版本:Ubuntu 22.04 LTS(其他 22.x 基本同理)
适用场景:云服务器图形化管理、图形开发、教学演示、远程办公、低带宽远控
直接上完整的一键安装 shell
#!/usr/bin/env bash
# 支持 root 会话的修复版 GNOME + xrdp + TigerVNC 安装脚本
# 模式: full|minimal|core (core 不依赖 snapd/firefox)
# 新增: ALLOW_ROOT=1 允许使用 root 作为 TARGET_USER
#
# 环境变量:
# DESKTOP_MODE=full|minimal|core (默认 full)
# SNAP_POLICY=install|switch-core|fail (默认 install)
# TARGET_USER=<用户名> (默认自动推断;若最终为 root 需 ALLOW_ROOT=1)
# ALLOW_ROOT=1 允许 root 作为图形用户
# VNC_PASS=xxx
# VNC_GEOMETRY=1920x1080
# VNC_DEPTH=24
# AUTO_DISABLE_ANIMATION=1|0 (root 下会自动跳过)
# HEALTH_CHECK=1|0
#
# 参数:
# --verify 同 HEALTH_CHECK=1
# --no-firefox 提示绕过 firefox (需改 core)
#
set -euo pipefail
NO_FIREFOX=0
RUN_VERIFY="${HEALTH_CHECK:-0}"
for a in "$@"; do
case "$a" in
--verify) RUN_VERIFY=1 ;;
--no-firefox) NO_FIREFOX=1 ;;
esac
done
log() { printf "%s %s\n" "$1" "$2"; }
die() { log "ERROR" "$1"; exit 1; }
if [[ $EUID -ne 0 ]]; then die "请用 root 或 sudo 运行"; fi
command -v apt-get >/dev/null 2>&1 || die "仅支持 apt 的 Ubuntu"
DESKTOP_MODE="${DESKTOP_MODE:-full}"
SNAP_POLICY="${SNAP_POLICY:-install}"
VNC_PASS="${VNC_PASS:-aa123123}"
VNC_GEOMETRY="${VNC_GEOMETRY:-1920x1080}"
VNC_DEPTH="${VNC_DEPTH:-24}"
AUTO_DISABLE_ANIMATION="${AUTO_DISABLE_ANIMATION:-1}"
ALLOW_ROOT="${ALLOW_ROOT:-1}"
# ---------- 用户解析 (支持 root) ----------
if [[ -n "${TARGET_USER:-}" ]]; then
if ! id "$TARGET_USER" &>/dev/null; then
die "指定的 TARGET_USER=$TARGET_USER 不存在"
fi
else
CAND="${SUDO_USER:-$(logname 2>/dev/null || true)}"
if [[ -n "$CAND" && "$CAND" != "root" ]] && id "$CAND" &>/dev/null; then
TARGET_USER="$CAND"
else
TARGET_USER="root"
fi
fi
if [[ "$TARGET_USER" == "root" && "$ALLOW_ROOT" != "1" ]]; then
die "将使用 root 作为桌面用户。请显式 ALLOW_ROOT=1 以确认: sudo ALLOW_ROOT=1 TARGET_USER=root $0"
fi
HOME_DIR="$(eval echo "~$TARGET_USER")"
[[ -d "$HOME_DIR" ]] || die "用户家目录不存在: $HOME_DIR"
export DEBIAN_FRONTEND=noninteractive
log INFO "================ 配置概要 ================"
log INFO "目标用户: $TARGET_USER"
log INFO "HOME: $HOME_DIR"
log INFO "桌面模式: $DESKTOP_MODE"
log INFO "SNAP 策略: $SNAP_POLICY"
log INFO "允许 root: $ALLOW_ROOT"
log INFO "RDP 端口: 3389"
log INFO "VNC 端口(:1): 5901"
log INFO "VNC 分辨率/深度: $VNC_GEOMETRY / $VNC_DEPTH"
log INFO "关闭动画: $AUTO_DISABLE_ANIMATION (root 会跳过)"
log INFO "健康检查: $RUN_VERIFY"
log INFO "no-firefox 标志: $NO_FIREFOX"
log INFO "==========================================="
sleep 1
# ---------- snapd 需求判定 ----------
need_snap=0
case "$DESKTOP_MODE" in
full|minimal) need_snap=1 ;;
core) need_snap=0 ;;
*) die "DESKTOP_MODE 无效: $DESKTOP_MODE" ;;
esac
snap_available=1
if ! dpkg -s snapd >/dev/null 2>&1; then
snap_available=0
elif ! systemctl is-active snapd.socket >/dev/null 2>&1 && ! systemctl is-active snapd >/dev/null 2>&1; then
snap_available=0
fi
snap_pinned_neg=0
if grep -Riq "Package: *snapd" /etc/apt/preferences /etc/apt/preferences.d 2>/dev/null; then
if grep -R "Package: *snapd" -n /etc/apt/preferences /etc/apt/preferences.d 2>/dev/null \
| while read -r f; do grep -A2 -i "Package: *snapd" "${f%%:*}"; done \
| grep -qi "Pin-Priority: *-\?1"; then
snap_pinned_neg=1
fi
fi
if [[ $need_snap -eq 1 && $snap_available -eq 0 ]]; then
case "$SNAP_POLICY" in
install)
if [[ $snap_pinned_neg -eq 1 ]]; then
log WARN "snapd 有负优先级 pin,改用 core 模式"
DESKTOP_MODE="core"; need_snap=0
else
log ACTION "安装 snapd..."
apt-get update -y
apt-get install -y snapd
systemctl enable --now snapd.socket || true
snap_available=1
fi
;;
switch-core)
log ACTION "SNAP_POLICY=switch-core -> 切换 core"
DESKTOP_MODE="core"; need_snap=0
;;
fail)
die "需要 snapd 但不可用。改 DESKTOP_MODE=core 或设置 SNAP_POLICY=install"
;;
*) die "SNAP_POLICY 无效: $SNAP_POLICY" ;;
esac
fi
if [[ $NO_FIREFOX -eq 1 && $DESKTOP_MODE != "core" ]]; then
log WARN "--no-firefox 仅提示。完整/最小桌面元包仍会拉 firefox;避免请用 core。"
fi
# ---------- 安装 ----------
log INFO "[1/9] apt 更新"
apt-get update -y
apt-get install -y software-properties-common curl wget locales gsettings-desktop-schemas dbus-x11
log INFO "[2/9] 安装桌面 ($DESKTOP_MODE)"
install_core() {
apt-get install -y --no-install-recommends \
gnome-shell gnome-session gdm3 gnome-terminal nautilus \
adwaita-icon-theme mesa-utils x11-xserver-utils policykit-1 fonts-dejavu-core
}
case "$DESKTOP_MODE" in
full) apt-get install -y ubuntu-desktop ;;
minimal) apt-get install -y ubuntu-desktop-minimal ;;
core) install_core ;;
esac
log INFO "[3/9] 禁用 Wayland"
if [[ -f /etc/gdm3/custom.conf ]]; then
sed -i 's/^#\?WaylandEnable=.*/WaylandEnable=false/' /etc/gdm3/custom.conf
else
echo -e "[daemon]\nWaylandEnable=false" >/etc/gdm3/custom.conf
fi
systemctl restart gdm3 || true
log INFO "[4/9] 安装 xrdp"
apt-get install -y xrdp
adduser "$TARGET_USER" ssl-cert || true
# 允许 root 登录 (sesman.ini)
if grep -q '^AllowRootLogin=' /etc/xrdp/sesman.ini; then
sed -i 's/^AllowRootLogin=.*/AllowRootLogin=1/' /etc/xrdp/sesman.ini
else
sed -i '/^\[Security\]/a AllowRootLogin=1' /etc/xrdp/sesman.ini
fi
XRDP_STARTWM="/etc/xrdp/startwm.sh"
if ! grep -q "CUSTOM_GNOME_SESSION" "$XRDP_STARTWM"; then
cp "$XRDP_STARTWM" "${XRDP_STARTWM}.bak.$(date +%s)"
sed -i '/test -x \/etc\/X11\/Xsession/,$d' "$XRDP_STARTWM"
cat >>"$XRDP_STARTWM" <<'EOF'
# CUSTOM_GNOME_SESSION
export GNOME_SHELL_SESSION_MODE=gnome
export XDG_CURRENT_DESKTOP=GNOME
export GNOME_DESKTOP_SESSION_ID=this-is-deprecated
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE LC_ALL
fi
if [ -f "$HOME/.xsession" ]; then
. "$HOME/.xsession"
fi
exec /usr/bin/gnome-session
EOF
fi
if [[ ! -f "$HOME_DIR/.xsession" ]]; then
echo "gnome-session" >"$HOME_DIR/.xsession"
chown "$TARGET_USER":"$TARGET_USER" "$HOME_DIR/.xsession" || true
fi
systemctl enable xrdp
systemctl restart xrdp
log INFO "[5/9] 安装 TigerVNC"
apt-get install -y tigervnc-standalone-server tigervnc-common
VNC_DIR="$HOME_DIR/.vnc"
install -d -m 700 -o "$TARGET_USER" -g "$TARGET_USER" "$VNC_DIR"
cat >"$VNC_DIR/xstartup" <<'EOF'
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export GNOME_SHELL_SESSION_MODE=gnome
export XDG_CURRENT_DESKTOP=GNOME
export GNOME_DESKTOP_SESSION_ID=this-is-deprecated
exec gnome-session &
EOF
chown "$TARGET_USER":"$TARGET_USER" "$VNC_DIR/xstartup" || true
chmod +x "$VNC_DIR/xstartup"
if [[ -z "$VNC_PASS" ]]; then
printf "输入 VNC 密码(6~8位, 回车跳过): "
read -r -s VNC_IN; echo
[[ -n "$VNC_IN" ]] && VNC_PASS="$VNC_IN"
fi
if [[ -n "$VNC_PASS" ]]; then
su - "$TARGET_USER" -c "mkdir -p ~/.vnc && echo '$VNC_PASS' | vncpasswd -f > ~/.vnc/passwd"
chown "$TARGET_USER":"$TARGET_USER" "$HOME_DIR/.vnc/passwd" || true
chmod 600 "$HOME_DIR/.vnc/passwd"
fi
log INFO "[6/9] 创建 VNC systemd 服务"
cat >/etc/systemd/system/vnc@.service <<EOF
[Unit]
Description=TigerVNC server for %i (:1)
After=network.target
[Service]
Type=forking
User=%i
PAMName=login
PIDFile=/home/%i/.vnc/%H:%i.pid
ExecStartPre=/bin/sh -c 'install -d -m 700 /home/%i/.vnc'
ExecStart=/usr/bin/vncserver -geometry ${VNC_GEOMETRY} -depth ${VNC_DEPTH} -localhost no :1
ExecStop=/usr/bin/vncserver -kill :1
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable vnc@"$TARGET_USER"
if [[ -f "$HOME_DIR/.vnc/passwd" ]]; then
systemctl start vnc@"$TARGET_USER" || log WARN "VNC 启动失败,查 ~/.vnc/*.log"
else
log WARN "未设置 VNC 密码,稍后: sudo -u $TARGET_USER vncpasswd && systemctl start vnc@$TARGET_USER"
fi
log INFO "[7/9] 性能优化"
if [[ "$AUTO_DISABLE_ANIMATION" == "1" && "$TARGET_USER" != "root" ]]; then
su - "$TARGET_USER" -c "gsettings set org.gnome.desktop.interface enable-animations false" || true
elif [[ "$AUTO_DISABLE_ANIMATION" == "1" && "$TARGET_USER" == "root" ]]; then
log WARN "跳过 root 动画关闭 (缺少普通 DBus 桌面会话)"
fi
log INFO "[8/9] 防火墙"
if command -v ufw >/dev/null 2>&1; then
ufw allow 3389/tcp || true
ufw allow 5901/tcp || true
fi
log INFO "[9/9] dpkg 自检"
dpkg --configure -a || true
apt-get -f install -y || true
health_check() {
echo
echo ">>> 健康检查"
local fail=0
CHK(){ if eval "$2"; then echo "[OK] $1"; else echo "[FAIL] $1"; fail=$((fail+1)); fi; }
for p in gnome-shell gnome-session gdm3 xrdp tigervnc-standalone-server; do
CHK "包安装: $p" "dpkg -s $p >/dev/null 2>&1"
done
CHK "gdm3 活跃" "systemctl is-active gdm3 >/dev/null 2>&1"
CHK "xrdp 活跃" "systemctl is-active xrdp >/dev/null 2>&1"
systemctl is-enabled vnc@"$TARGET_USER" >/dev/null 2>&1 && echo "[OK] VNC 服务启用" || echo "[WARN] VNC 服务未启用"
systemctl is-active vnc@"$TARGET_USER" >/dev/null 2>&1 && echo "[OK] VNC 运行中" || echo "[WARN] VNC 未运行"
CHK "RDP 3389 监听" "ss -tln | awk '{print \$4}' | grep -E '(:|\\.)3389\$' >/dev/null"
CHK "VNC 5901 监听" "ss -tln | awk '{print \$4}' | grep -E '(:|\\.)5901\$' >/dev/null"
CHK "Wayland 禁用" "grep -q '^WaylandEnable=false' /etc/gdm3/custom.conf"
[[ $fail -eq 0 ]] && echo "健康检查:全部通过" || echo "健康检查:$fail 项失败"
echo ">>> 结束"
}
echo
echo "================ 安装完成 ================="
echo "模式: $DESKTOP_MODE"
echo "用户: $TARGET_USER"
[[ "$TARGET_USER" == "root" ]] && echo "警告: 当前使用 root 图形会话,建议尽快创建普通用户。"
echo "RDP: 3389 (选择 Xorg 会话)"
echo "VNC: 5901 (:1 VNC 密码 "$VNC_PASS")"
[[ -z "$VNC_PASS" ]] && echo "未设 VNC 密码: sudo -u $TARGET_USER vncpasswd && systemctl start vnc@$TARGET_USER"
echo "=========================================="
[[ $RUN_VERIFY -eq 1 ]] && health_check
### 如果出现这个错误就运行两次安装脚本
Errors were encountered while processing: /tmp/apt-dpkg-install-OElkaL/0027-firefox_1%3a1snap1-0ubuntu2_amd64.deb needrestart is being skipped since dpkg has failed E: Sub-process /usr/bin/dpkg returned an error code (1)
目录
- 为什么需要远程桌面 & 方案对比
- 基础准备(更新、用户、主机名、时区、镜像源)
- 选择桌面环境(GNOME / XFCE / MATE / LXQt)
- 方案一:XRDP(RDP 协议,Windows 客户端友好)
- 方案二:VNC(TigerVNC 实战)
- 方案三:X2Go(高延迟/低带宽更流畅)
- 其他可选方案(NoMachine / Chrome Remote Desktop / RustDesk)
- 安全加固(防火墙、端口、加密、Fail2Ban、最小权限)
- 性能优化建议
- 常见故障排查
- 常见问答(FAQ)
- 快速命令清单(Cheat Sheet)
1. 为什么需要远程桌面 & 方案对比
需求 | 推荐方案 | 优点 | 注意点 |
---|---|---|---|
Windows 自带 mstsc 直接连 | XRDP | 无需额外客户端 | 默认 3389 需加固 |
高清 GUI + 多用户 + 稳定 | XRDP / X2Go | 会话隔离 | GNOME+XRDP 偶发黑屏 |
低带宽 / 高延迟 | X2Go | NX 压缩好 | 客户端需安装 |
临时调试 / 嵌入其他工具 | VNC over SSH | 简单通用 | 原生加密弱 |
穿透 / 自带中继 | RustDesk / Chrome | 简化 NAT | 依赖第三方服务 |
多媒体/3D | NoMachine | 图形加速更好 | 闭源免费版限制 |
2. 基础准备
# 更新系统
sudo apt update
sudo apt -y upgrade
# 安装常用工具
sudo apt install -y curl wget vim htop net-tools unzip tar git
# 设置时区(示例:Asia/Shanghai)
sudo timedatectl set-timezone Asia/Shanghai
# 确认当前用户(避免直接用 root)
whoami
如果是云服务器,建议先快照 / 备份,以便回滚。
3. 选择桌面环境
桌面 | 包名 | 内存占用(大致空闲) | 适合 |
---|---|---|---|
GNOME (默认) | ubuntu-desktop / ubuntu-desktop-minimal | 900MB~1.3GB | 完整体验 |
XFCE | xubuntu-core / xubuntu-desktop | 350~600MB | 轻量通用 |
MATE | ubuntu-mate-core | 500~800MB | 传统布局 |
LXQt | lxqt-core | 300~450MB | 极轻量 |
示例安装 XFCE(推荐在资源有限的 VPS):
sudo apt install -y xfce4 xfce4-goodies
GNOME 精简版:
sudo apt install -y ubuntu-desktop-minimal
4. 方案一:XRDP
4.1 安装 XRDP
sudo apt install -y xrdp
sudo systemctl enable --now xrdp
4.2 使用轻量桌面(可选)
若你装了 XFCE,并让 XRDP 默认加载 XFCE:
echo "xfce4-session" | sudo tee /etc/skel/.Xsession
echo "xfce4-session" > ~/.Xsession
或针对单用户:
echo "startxfce4" > ~/.xsession
chmod +x ~/.xsession
4.3 GNOME 与 XRDP
Ubuntu 22.04 默认启用 Wayland(登录物理机才常见);XRDP 依赖 Xorg。如果远程黑屏,可在 /etc/gdm3/custom.conf
取消注释:
#WaylandEnable=false
改成:
WaylandEnable=false
然后:
sudo systemctl restart gdm3
sudo systemctl restart xrdp
4.4 SSL 证书与权限
sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp
4.5 防火墙
sudo ufw allow from <你的办公出口IP>/32 to any port 3389
# 若没有固定 IP(不推荐),临时:
# sudo ufw allow 3389/tcp
sudo ufw status
4.6 连接
在 Windows:Win+R → mstsc → 输入服务器 IP → 用户名 + 密码。
如果黑屏:看日志 /var/log/xrdp.log
与 /var/log/xrdp-sesman.log
。
5. 方案二:VNC(TigerVNC)
5.1 安装
sudo apt install -y tigervnc-standalone-server tigervnc-common
5.2 创建 VNC 密码
vncpasswd
5.3 首次运行生成配置
vncserver :1
vncserver -kill :1
5.4 配置会话(XFCE 示例)
~/.vnc/xstartup
:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
chmod +x ~/.vnc/xstartup
5.5 Systemd 管理(可选)
sudo tee /etc/systemd/system/vnc@.service >/dev/null <<'EOF'
[Unit]
Description=VNC per-user instance
After=network.target
[Service]
Type=forking
User=%i
PAMName=login
PIDFile=/home/%i/.vnc/%H:1.pid
ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 || true
ExecStart=/usr/bin/vncserver :1 -localhost yes -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill :1
[Install]
WantedBy=multi-user.target
EOF
启用:
sudo systemctl daemon-reload
sudo systemctl enable --now vnc@$(whoami).service
注意:-localhost yes
只监听 127.0.0.1,需配合 SSH 隧道:
本地客户端:
ssh -L 5901:localhost:5901 user@server_ip
然后用 VNC Viewer 连接:localhost:5901
5.6 加密
原生 VNC 加密弱,推荐永远走 SSH 隧道或 stunnel。
6. 方案三:X2Go
优点:高压缩、会话可断点续连、比 VNC 流畅。缺点:客户端需安装。
6.1 安装
sudo apt install -y x2goserver x2goserver-xsession
桌面可选 XFCE/ MATE。安装完后直接用 X2Go Client(Windows/macOS/Linux)添加会话:
- Host:服务器 IP
- SSH Port:22
- Session type:XFCE / MATE / GNOME (需 Xorg)
- Compression:根据带宽调整(默认即可)
7. 其他方案(一行点评)
方案 | 说明 |
---|---|
NoMachine (nomachine.com) | 图形与多媒体表现好,私有协议 |
Chrome Remote Desktop | 穿透简单,需 Google 账号 |
RustDesk | 开源 + 自建中继选项,很适合内网穿透 |
Apache Guacamole | Web 端统一接入 RDP/VNC/SSH |
RDP over SSH | 不暴露 3389,安全性提升 |
8. 安全加固
- 不裸露 3389 / 5901:用 SSH 隧道 / WireGuard / VPN。
- 修改默认端口(XRDP):
/etc/xrdp/xrdp.ini
中port=3389
→ 改为自定义。 - 限制来源 IP:
ufw allow from 1.2.3.4 to any port 3389
。 - Fail2Ban 规则(XRDP):(需自建 filter:
sudo apt install -y fail2ban sudo tee /etc/fail2ban/jail.d/xrdp.local >/dev/null <<'EOF' [xrdp] enabled = true port = 3389 filter = xrdp logpath = /var/log/auth.log maxretry = 5 bantime = 3600 EOF sudo systemctl restart fail2ban
/etc/fail2ban/filter.d/xrdp.conf
) - 使用强密码 / SSH 公钥登录。
- 定期升级安全补丁:
sudo apt update && sudo apt -y upgrade
- 监控登录行为:
journalctl -u xrdp --since "1 hour ago"
/last
。 - 多用户隔离:不要共享同一账号;用最小 sudo 权限。
9. 性能优化
优化点 | 操作 |
---|---|
减少特效 | 在桌面设置中关闭动画/透明 |
使用轻量桌面 | 改用 XFCE / LXQt |
降分辨率、色深 | XRDP 客户端选择 16-bit 色深;VNC 降到 1280x720 |
压缩 | X2Go 默认已做;VNC 加 -quality 50 -depth 16 |
减少服务 | systemctl disable 不必要守护进程 |
IO 优化 | 使用 SSD,启用 zram(低内存 VPS) |
监控瓶颈 | htop , glances , iotop , nload |
10. 常见故障排查
| 症状 | 可能原因 | 解决 | | ------------------- | -------------------------- | --------------------------------------------------------- | ----------------------------- | | XRDP 黑屏 | Wayland / .Xauthority 权限 | 关 Wayland;sudo chown user:user ~/.Xauthority
| | 登录后立即断开 | 桌面未安装 / 进程崩溃 | 确认 startxfce4
可本地启动 | | VNC 连接拒绝 | 未启动 / 监听仅本地 | ss -tnlp | grep 5901
;检查 systemd 服务 | | 中文乱码 | 缺字体 | sudo apt install -y fonts-wqy-zenhei fonts-wqy-microhei
| | PulseAudio 远程无声 | XRDP 限制 / 模块缺 | 若需声音考虑 X2Go 或 NoMachine | | 端口被扫爆 | 直接暴露 | 改端口 + 防火墙 + Fail2Ban + 隧道 | | X2Go 只显示灰屏 | 桌面类型不匹配 | 在客户端会话选 XFCE / MATE |
查看日志命令参考:
journalctl -u xrdp -f
journalctl -u xrdp-sesman -f
tail -f /var/log/xrdp.log /var/log/xrdp-sesman.log
tail -f ~/.vnc/*.log
11. FAQ
Q: 必须装整个 ubuntu-desktop 吗?
A: 不必须。资源紧张选 xfce4
或 xubuntu-core
即可。
Q: 能否和 SSH 共用同一用户?
A: 可以。但建议不同人不同账号,日志更清晰。
Q: RDP 要不要换端口?
A: 不是必须,但能减少低质量扫描噪音;真正安全依赖访问控制和加密隧道。
Q: 需要 GPU 加速 / AI 可视化?
A: 考虑 NoMachine、Xpra 或在本地 Jupyter / VS Code Remote。
Q: 能否只传应用窗口?
A: X2Go / xpra 支持更细粒度;本文主要讨论整桌面会话。
12. 快速命令清单(Cheat Sheet)
# 更新
sudo apt update && sudo apt -y upgrade
# 安装轻量桌面 + XRDP
sudo apt install -y xfce4 xfce4-goodies xrdp
echo "startxfce4" > ~/.xsession
sudo adduser $USER ssl-cert
sudo systemctl enable --now xrdp
# 防火墙限制来源
sudo ufw allow from 1.2.3.4 to any port 3389
# VNC (TigerVNC) + SSH 隧道
sudo apt install -y tigervnc-standalone-server
vncpasswd
vncserver :1
vncserver -kill :1
# 编辑 ~/.vnc/xstartup -> startxfce4
vncserver :1 -localhost yes
ssh -L 5901:localhost:5901 user@server_ip # 本地连接 localhost:5901
# X2Go
sudo apt install -y x2goserver x2goserver-xsession xfce4
# 卸载 XRDP(可选)
sudo systemctl disable --now xrdp
sudo apt purge -y xrdp
结语
选择合适的远程桌面方案,关键看你的客户端环境、带宽、延迟与安全要求:
- Windows 原生:XRDP
- 低带宽 + 稳定性:X2Go
- 需要临时 GUI + 通用性:VNC over SSH
- 多媒体或穿透:NoMachine / RustDesk
部署后请务必落实:防火墙限制、强密码/公钥认证、日志监控及定期升级,避免远程桌面成为攻击入口。
如需:
- 仅最精简脚本
- 自动化一键安装脚本
- 为你当前服务器配置定制方案
继续留言即可。
祝你部署顺利!
- 直接上完整的一键安装 shell
- 目录
- 1. 为什么需要远程桌面 & 方案对比
- 2. 基础准备
- 3. 选择桌面环境
- 4. 方案一:XRDP
- 4.1 安装 XRDP
- 4.2 使用轻量桌面(可选)
- 4.3 GNOME 与 XRDP
- 4.4 SSL 证书与权限
- 4.5 防火墙
- 4.6 连接
- 5. 方案二:VNC(TigerVNC)
- 5.1 安装
- 5.2 创建 VNC 密码
- 5.3 首次运行生成配置
- 5.4 配置会话(XFCE 示例)
- 5.5 Systemd 管理(可选)
- 5.6 加密
- 6. 方案三:X2Go
- 6.1 安装
- 7. 其他方案(一行点评)
- 8. 安全加固
- 9. 性能优化
- 10. 常见故障排查
- 11. FAQ
- 12. 快速命令清单(Cheat Sheet)
- 结语