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)

目录

  1. 为什么需要远程桌面 & 方案对比
  2. 基础准备(更新、用户、主机名、时区、镜像源)
  3. 选择桌面环境(GNOME / XFCE / MATE / LXQt)
  4. 方案一:XRDP(RDP 协议,Windows 客户端友好)
  5. 方案二:VNC(TigerVNC 实战)
  6. 方案三:X2Go(高延迟/低带宽更流畅)
  7. 其他可选方案(NoMachine / Chrome Remote Desktop / RustDesk)
  8. 安全加固(防火墙、端口、加密、Fail2Ban、最小权限)
  9. 性能优化建议
  10. 常见故障排查
  11. 常见问答(FAQ)
  12. 快速命令清单(Cheat Sheet)

1. 为什么需要远程桌面 & 方案对比

需求推荐方案优点注意点
Windows 自带 mstsc 直接连XRDP无需额外客户端默认 3389 需加固
高清 GUI + 多用户 + 稳定XRDP / X2Go会话隔离GNOME+XRDP 偶发黑屏
低带宽 / 高延迟X2GoNX 压缩好客户端需安装
临时调试 / 嵌入其他工具VNC over SSH简单通用原生加密弱
穿透 / 自带中继RustDesk / Chrome简化 NAT依赖第三方服务
多媒体/3DNoMachine图形加速更好闭源免费版限制

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-minimal900MB~1.3GB完整体验
XFCExubuntu-core / xubuntu-desktop350~600MB轻量通用
MATEubuntu-mate-core500~800MB传统布局
LXQtlxqt-core300~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 GuacamoleWeb 端统一接入 RDP/VNC/SSH
RDP over SSH不暴露 3389,安全性提升

8. 安全加固

  1. 不裸露 3389 / 5901:用 SSH 隧道 / WireGuard / VPN。
  2. 修改默认端口(XRDP):/etc/xrdp/xrdp.iniport=3389 → 改为自定义。
  3. 限制来源 IP:ufw allow from 1.2.3.4 to any port 3389
  4. Fail2Ban 规则(XRDP):
    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
    
    (需自建 filter:/etc/fail2ban/filter.d/xrdp.conf
  5. 使用强密码 / SSH 公钥登录。
  6. 定期升级安全补丁:sudo apt update && sudo apt -y upgrade
  7. 监控登录行为:journalctl -u xrdp --since "1 hour ago" / last
  8. 多用户隔离:不要共享同一账号;用最小 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: 不必须。资源紧张选 xfce4xubuntu-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

部署后请务必落实:防火墙限制、强密码/公钥认证、日志监控及定期升级,避免远程桌面成为攻击入口。

如需:

  • 仅最精简脚本
  • 自动化一键安装脚本
  • 为你当前服务器配置定制方案

继续留言即可。

祝你部署顺利!