如何在 Ubuntu 上设置远程桌面 – wiki基地


在 Ubuntu 上设置远程桌面:一篇详尽的指南

远程桌面技术允许用户从一台计算机连接并控制另一台计算机的桌面环境,仿佛就坐在那台远程机器前一样。这对于远程工作、技术支持、访问家中电脑、或管理无显示器的服务器(尽管更常见的是通过 SSH)等场景都极为有用。对于 Ubuntu 用户来说,有多种方法可以实现远程桌面访问,每种方法都有其优缺点和适用的场景。

本文将深入探讨在 Ubuntu 系统上设置远程桌面的各种流行方法,包括内置的 VNC 共享、使用 VNC 服务器(如 TightVNC 或 X11VNC)、设置 RDP 服务器(使用 xrdp),以及简要提及通过 SSH 进行图形转发或使用第三方解决方案。我们将详细介绍每种方法的设置步骤、注意事项以及安全性方面的考量。

为什么需要远程桌面?

在深入技术细节之前,先明确为何需要远程桌面:

  1. 远程访问文件和应用: 无论身处何地,只要有网络连接,就可以访问 Ubuntu 电脑上的文件和运行特定应用。
  2. 技术支持: 方便地帮助家人或朋友解决他们 Ubuntu 电脑上的问题,无需亲临现场。
  3. 无头服务器管理: 虽然命令行是管理服务器的主要方式,但在某些情况下,图形界面仍然是必要的,尤其是在配置某些特定软件或进行可视化操作时。
  4. 跨平台操作: 从 Windows、macOS 或其他 Linux 系统访问您的 Ubuntu 桌面。
  5. 利用资源: 使用远程性能更强的机器运行资源密集型任务,并在本地机器上查看结果。

理解了这些需求,我们就可以选择最适合的远程桌面解决方案。

前提条件

在开始设置之前,请确保满足以下条件:

  • 一台安装了 Ubuntu 桌面环境的计算机(作为服务器端)。
  • 拥有该 Ubuntu 计算机的管理员权限(通常需要使用 sudo 命令)。
  • 两台计算机(服务器和客户端)都需要有网络连接。
  • 了解 Ubuntu 的基本命令行操作。
  • 一个用于连接的客户端设备,安装有相应的远程桌面客户端软件。

方法一:使用 Ubuntu 内置的桌面共享 (Vino)

Ubuntu 桌面环境(特别是基于 GNOME 的版本,如 Ubuntu 20.04 LTS 及更高版本)通常内置了 VNC(Virtual Network Computing)服务器功能,通过名为 Vino 的程序提供。这是最简单直接的方式,适合局域网内的快速共享。

工作原理: Vino 作为一个 VNC 服务器运行,允许 VNC 客户端连接并控制当前的桌面会话。

优点:

  • 内置,无需额外安装。
  • 设置简单快捷。
  • 共享当前正在运行的桌面会话。

缺点:

  • 功能相对基础,自定义选项少。
  • 性能可能不如其他 VNC 服务器。
  • 默认安全性较低(尤其是在没有强制密码或通过 SSH 隧道连接时)。
  • 在某些较新的 Ubuntu 版本或桌面环境下(如 Wayland),可能存在兼容性问题或需要额外配置。

设置步骤:

  1. 打开设置: 点击右上角的系统菜单,选择“设置”图标,或在应用菜单中搜索“设置”。
  2. 找到共享选项: 在“设置”窗口中,向下滚动并点击左侧的“共享”选项。
  3. 启用共享: 在“共享”窗口顶部,将开关拨动到“开启”。
  4. 进入屏幕共享设置: 确保“屏幕共享”选项已经出现,点击它进入详细设置。
  5. 配置屏幕共享:
    • 允许远程连接: 将“允许远程连接”开关拨动到“开启”。
    • 要求连接加密: 建议开启此选项以提高安全性,但请注意,并非所有 VNC 客户端都支持加密。如果遇到连接问题,可以尝试关闭此选项,但请务必通过 SSH 隧道连接(后面会介绍)。
    • 需要密码: 强烈建议启用此选项并设置一个强密码。这样只有知道密码的用户才能连接。如果您关闭此选项,则任何尝试连接的用户都将收到一个在服务器屏幕上显示的提示,需要手动接受连接。这在无人值守的情况下不实用且不安全。
    • 显示连接图标: 可选,可以在顶部栏显示一个图标,指示当前是否有远程连接。
    • 网络: 显示当前可以通过哪个网络接口进行连接。
  6. 防火墙设置(重要): 如果您的 Ubuntu 开启了防火墙(例如 UFW),需要允许 VNC 流量通过。Vino 默认使用端口 5900。
    bash
    sudo ufw allow 5900/tcp

    如果您不确定,也可以直接允许“VNC”应用程序(前提是 UFW 知道这个应用):
    bash
    sudo ufw allow from any to any port 5900 proto tcp
    # 或者更安全地限制来源IP
    # sudo ufw allow from <客户端IP地址> to any port 5900 proto tcp

    检查防火墙状态:
    bash
    sudo ufw status

    确保 5900 端口是允许的。
  7. 查找服务器 IP 地址: 在服务器端,打开终端或查看网络设置,获取其在网络中的 IP 地址。例如,使用 ip a 命令。
  8. 在客户端连接: 在另一台计算机上,安装并打开一个 VNC 客户端(如 Remmina, Vinagre, TightVNC Viewer, RealVNC Viewer 等)。输入 Ubuntu 服务器的 IP 地址和端口号(通常是 服务器IP::5900服务器IP )。如果设置了密码,客户端会提示输入密码。

使用 SSH 隧道增强安全性:

直接将 VNC 端口暴露在网络中是不安全的,尤其是在互联网上。通过 SSH 隧道连接 VNC 可以显著提高安全性,因为它通过加密的 SSH 连接传输 VNC 数据。

  1. 确保 SSH 服务器已安装并运行: 在 Ubuntu 服务器上安装 OpenSSH 服务器:
    bash
    sudo apt update
    sudo apt install openssh-server

    检查状态:
    bash
    sudo systemctl status ssh

    如果开启了防火墙,需要允许 SSH 端口(默认 22):
    bash
    sudo ufw allow 22/tcp
    # 或者更安全地限制来源
    # sudo ufw allow from <客户端IP> to any port 22 proto tcp
  2. 在客户端创建 SSH 隧道:
    • Linux / macOS 客户端: 打开终端,执行以下命令:
      bash
      ssh -L 5900:localhost:5900 user@server_ip_address

      其中 5900:localhost:5900 表示将客户端本地的 5900 端口映射到服务器端的 localhost:5900 端口。user 是您在 Ubuntu 服务器上的用户名,server_ip_address 是服务器的 IP 地址。输入服务器用户的密码。
    • Windows 客户端 (使用 PuTTY):
      • 打开 PuTTY。
      • 在 Session -> Host Name (or IP address) 输入服务器 IP。
      • 在 Connection -> SSH -> Auth 中加载您的 SSH 密钥(如果使用密钥认证)或准备输入密码。
      • 在 Connection -> SSH -> Tunnels 中进行端口转发设置:
        • Source port: 5900 (或客户端本地未占用的其他端口)
        • Destination: localhost:5900
        • 点击 Add。
      • 回到 Session,给这个连接命名并 Save,然后点击 Open 连接。
  3. 通过隧道连接 VNC: 保持 SSH 隧道开启,然后在客户端打开 VNC 客户端。连接地址输入 localhost::5900 (如果您在 SSH 隧道中使用了其他的本地端口,则输入相应的端口号)。现在 VNC 连接是通过加密的 SSH 隧道传输的。

使用 SSH 隧道时,即使 VNC 共享本身没有启用加密或需要密码,SSH 隧道也提供了加密和认证(SSH 用户名/密码或密钥)。这是在不信任网络环境中连接 VNC 的推荐方法。

Wayland 环境下的 Vino 问题:

较新的 Ubuntu 版本可能默认使用 Wayland 作为显示服务器而不是 X11。在 Wayland 下,桌面共享的方式有所不同,Vino 可能无法正常工作或需要通过特定的 API 进行访问。如果您遇到桌面共享黑屏或其他问题,一个临时的解决方案是登出并选择使用 Xorg 会话登录。在登录界面,点击您的用户名,然后在右下角的小齿轮图标中选择 “Ubuntu on Xorg” 或类似的选项。

方法二:安装独立的 VNC 服务器 (TightVNC / X11VNC)

Ubuntu 内置的 Vino 易于使用,但功能有限。对于需要更稳定、性能更好或更多配置选项的用户,安装独立的 VNC 服务器是更好的选择。两个常见的选择是 TightVNC 和 X11VNC。

TightVNC

工作原理: TightVNC 创建一个新的虚拟桌面会话,而不是共享当前的物理显示器。这意味着您连接时会看到一个全新的桌面环境,与服务器当前用户看到的可能不同。

优点:

  • 独立于当前的物理会话,即使服务器没有登录用户或没有显示器也能工作。
  • 性能通常优于 Vino。
  • 可以为不同的用户或目的创建多个 VNC 会话。

缺点:

  • 不是共享当前桌面,有时用户希望看到并控制当前屏幕上显示的内容。
  • 需要额外安装和配置桌面环境(如 XFCE, LXDE 等)来作为虚拟会话的桌面。GNOME/KDE 等重量级桌面环境在 TightVNC 虚拟会话中可能表现不佳或需要大量配置。

设置步骤:

  1. 安装 TightVNC 服务器:
    bash
    sudo apt update
    sudo apt install tightvncserver
  2. 首次运行 TightVNC 服务器并设置密码:
    bash
    tightvncserver

    这会提示您设置 VNC 连接密码。还会询问是否设置一个“View-only password”,如果您只希望远程查看而不能控制,可以设置。完成后,它会启动一个新的 VNC 服务器实例,例如在 :1 显示器上。
    输出会类似这样:
    “`
    New ‘X’ desktop is your_hostname:1

    Starting applications specified in /home/your_user/.vnc/xstartup
    Log file is /home/your_user/.vnc/your_hostname:1.log
    `:1` 表示这个 VNC 会话运行在显示器 1 上,对应的端口是 5901 (5900 + 显示器号)。`:2` 对应 5902,以此类推。
    3. **配置 VNC 启动脚本 (`xstartup`):** TightVNC 第一次运行时会在您的家目录下创建 `.vnc` 文件夹,其中包含 `xstartup` 文件。这个文件定义了 VNC 会话启动时运行的命令(即启动什么桌面环境)。默认的 `xstartup` 可能只启动一个基本的终端。您需要编辑它来启动一个完整的桌面环境。
    bash
    nano ~/.vnc/xstartup
    注释掉或删除原有内容,添加以下内容来启动一个轻量级桌面环境(例如 XFCE):bash

    !/bin/bash

    xrdb $HOME/.Xresources
    startxfce4 &
    * `#!/bin/bash`: 指定使用 bash 脚本。
    * `xrdb $HOME/.Xresources`: 加载 X resources,用于设置字体、颜色等。
    * `startxfce4 &`: 启动 XFCE 桌面环境。后面的 `&` 让它在后台运行。
    如果您想使用其他桌面环境,替换 `startxfce4` 为相应的启动命令,例如 `mate-session &` 或 `lxsession &`。
    **注意:** GNOME 或 KDE 等桌面环境在 TightVNC 虚拟会话中可能需要更复杂的配置才能正常工作,有时不如轻量级桌面环境稳定高效。如果您还没有安装 XFCE 或其他桌面环境,请先安装:
    bash
    sudo apt update
    sudo apt install xfce4 xfce4-goodies # 安装 XFCE

    或者

    sudo apt install mate-core mate-desktop-environment mate-notification-daemon # 安装 MATE

    保存并关闭 `xstartup` 文件。
    4. **赋予 `xstartup` 执行权限:**
    bash
    chmod +x ~/.vnc/xstartup
    5. **停止并重新启动 TightVNC 服务器:** 需要先停止以应用 `xstartup` 的改动。bash
    tightvncserver -kill :1 # 如果你的会话号是 1

    等待几秒钟直到进程被终止

    tightvncserver # 重新启动,这次会使用新的 xstartup 配置
    6. **防火墙设置:** 允许 TightVNC 使用的端口。对于 `:1` 会话,端口是 5901。bash
    sudo ufw allow 5901/tcp

    或根据你启动的会话号调整端口

    ``
    7. **在客户端连接:** 使用 VNC 客户端连接到
    服务器IP::5901` (或其他端口号),输入您之前设置的 VNC 密码。您应该会看到一个新的桌面会话。

管理 TightVNC 服务器:

  • 启动: tightvncserver :<display_number> (例如 tightvncserver :2 会启动在端口 5902)
  • 停止: tightvncserver -kill :<display_number> (例如 tightvncserver -kill :1)
  • 查看运行的会话: pgrep Xtightvnc 可以查看 VNC 进程。

安全性: 同样强烈建议通过 SSH 隧道连接 TightVNC,方法与 Vino 相同,只需将隧道的 Destination 端口更改为 TightVNC 使用的端口(例如 5901)。
bash
ssh -L 5901:localhost:5901 user@server_ip_address

然后在客户端连接 localhost::5901

X11VNC

工作原理: X11VNC 的主要目的是共享 当前 正在物理显示器上运行的 X 会话。这意味着远程用户看到的内容与本地用户在屏幕上看到的内容完全相同,并可以与本地用户协作或接管控制。

优点:

  • 共享当前活动的桌面会话。
  • 配置相对简单。
  • 性能通常比 Vino 好。

缺点:

  • 依赖于一个活动的 X 会话(在 Wayland 环境下需要额外配置或切换到 Xorg)。
  • 在无人值守的服务器上可能不适用(除非你保持一个用户登录且有活动的 X 会话)。

设置步骤:

  1. 安装 X11VNC 服务器:
    bash
    sudo apt update
    sudo apt install x11vnc
  2. 设置 VNC 连接密码: 运行以下命令设置一个密码文件。
    bash
    x11vnc -storepasswd

    它会提示你输入并确认 VNC 密码,然后保存在 ~/.vnc/passwd 文件中。
  3. 启动 X11VNC 服务器:
    启动服务器来共享当前的 :0 显示器。
    bash
    x11vnc -display :0 -usepw -forever -o ~/.vnc/x11vnc.log -bg

    • -display :0: 指定要共享的显示器(:0 通常是当前物理显示的会话)。
    • -usepw: 使用之前设置的密码文件 (~/.vnc/passwd) 进行认证。
    • -forever: 服务器断开连接后不退出,等待新的连接。
    • -o ~/.vnc/x11vnc.log: 将日志输出到指定文件。
    • -bg: 在后台运行服务器。
      注意: 如果您使用 GDM (GNOME Display Manager) 或 LightDM 等登录管理器,直接运行 x11vnc -display :0 可能因为权限问题而失败。一种常见的方法是在登录 由用户启动 x11vnc,或者配置显示管理器允许 x11vnc 访问显示器。更可靠的无人值守访问通常涉及创建 systemd 服务。
      替代启动命令(包含处理权限问题):
      “`bash
      x11vnc -display :0 -auth $(sudo find /var/lib/gdm3/ -name authorization -print -quit) -usepw -forever -o ~/.vnc/x11vnc.log -bg

    或对于 LightDM

    x11vnc -display :0 -auth $(sudo find /var/lib/lightdm/ -name *.seat -print -quit) -usepw -forever -o ~/.vnc/x11vnc.log -bg

    ``
    这里的
    -auth参数尝试找到并使用显示管理器的认证文件来获得访问显示器的权限。请注意find` 命令中的路径可能因 Ubuntu 版本和显示管理器而异。

  4. 创建 Systemd 服务(可选,用于自动启动): 为了让 X11VNC 在系统启动后自动运行(在用户登录后),可以创建一个 systemd 服务。
    bash
    sudo nano /etc/systemd/system/x11vnc.service

    粘贴以下内容(根据您的用户和环境调整):
    “`ini
    [Unit]
    Description=X11VNC Server
    After=display-manager.service network.target systemd-user-sessions.service

    [Service]
    Type=simple
    ExecStart=/usr/bin/x11vnc -display :0 -auth $(sudo find /var/lib/gdm3/ -name authorization -print -quit) -usepw -forever -o /var/log/x11vnc.log -bg -rfbport 5900

    注意:-auth 参数可能需要调整,如上面所述。请先在命令行测试启动命令是否有效。

    使用 /var/log/x11vnc.log 需要确保 x11vnc 用户有写权限,或者使用用户主目录下的日志文件。

    如果希望服务器在前台运行以便调试,可以移除 -bg 选项。

    也可以直接指定认证文件路径而不是用 find 命令,例如:

    ExecStart=/usr/bin/x11vnc -display :0 -auth /var/run/lightdm/root/:0 -usepw -forever -o /var/log/x11vnc.log -bg -rfbport 5900

    [Install]
    WantedBy=graphical.target
    保存并关闭文件。然后重新加载 systemd 配置,启用并启动服务:bash
    sudo systemctl daemon-reload
    sudo systemctl enable x11vnc.service
    sudo systemctl start x11vnc.service
    检查服务状态: `sudo systemctl status x11vnc.service`
    5. **防火墙设置:** 允许 X11VNC 使用的端口(默认 5900)。
    bash
    sudo ufw allow 5900/tcp

    或根据你服务文件中指定的端口调整

    ``
    6. **在客户端连接:** 使用 VNC 客户端连接到
    服务器IP::5900`,输入之前设置的 VNC 密码。您应该会看到并可以控制服务器当前的桌面会话。

安全性: 同样强烈建议通过 SSH 隧道连接 X11VNC,方法与 Vino 相同,使用 5900 端口作为隧道目标。
bash
ssh -L 5900:localhost:5900 user@server_ip_address

然后在客户端连接 localhost::5900

方法三:设置 RDP 服务器 (xrdp)

RDP (Remote Desktop Protocol) 是微软开发的远程桌面协议,它是 Windows 远程桌面的基础。通过安装 xrdp 软件包,可以让 Ubuntu 扮演 RDP 服务器的角色,允许使用 Windows 远程桌面客户端(或其他支持 RDP 的客户端,如 Remmina)进行连接。

工作原理: xrdp 并不是一个完整的 RDP 服务器实现,它更像一个“中间人”。它接受 RDP 连接,然后将 RDP 协议转换为 VNC 或 X11 协议,再连接到本地运行的 VNC 或 X11 会话,并将结果通过 RDP 发送回客户端。默认配置下,xrdp 通常会尝试启动一个新的 Xvnc 会话。

优点:

  • 可以使用原生的 Windows 远程桌面客户端连接,这对于 Windows 用户来说非常方便。
  • 性能在某些情况下可能优于 VNC(尤其是在有网络延迟时)。
  • 通常会启动一个新的会话(类似 TightVNC 的虚拟会话)。

缺点:

  • 设置相对于简单的 VNC 共享稍微复杂,尤其是在桌面环境兼容性方面。
  • 默认配置下通常启动一个新的独立会话,而不是共享当前正在使用的桌面。
  • 与不同的桌面环境(尤其是 GNOME)兼容性问题较多,可能需要额外配置或使用轻量级桌面环境。

设置步骤:

  1. 安装 xrdp:
    bash
    sudo apt update
    sudo apt install xrdp

    安装过程中,xrdp 服务会自动启动。
  2. 检查 xrdp 服务状态:
    bash
    sudo systemctl status xrdp

    确保服务正在运行。
  3. 将 xrdp 用户添加到 ssl-cert 组(可选但推荐): 这可以允许 xrdp 读取 /etc/ssl/certs/ssl-cert-snakeoil.pem 文件,一些客户端可能需要这个进行 TLS 连接。
    bash
    sudo adduser xrdp ssl-cert
  4. 配置防火墙: 允许默认的 RDP 端口 3389。
    bash
    sudo ufw allow 3389/tcp
    # 或更安全地限制来源IP
    # sudo ufw allow from <客户端IP> to any port 3389 proto tcp
  5. 配置桌面环境 (处理 Gnome 兼容性问题): 默认情况下,xrdp 可能会尝试启动一个像 Xvnc 这样的后端,然后在这个 VNC 会话中启动桌面环境。但对于 Gnome 等桌面环境,直接启动可能导致黑屏、循环登录或缺少桌面元素。一个常见的解决方法是告诉 xrdp 启动时执行一个简单的脚本来启动桌面。

    为 xrdp 会话指定桌面环境 (通常解决 Gnome 问题):
    “`bash
    echo “gnome-session” > ~/.xsession

    如果你想使用 XFCE,可以安装 xfce4 并执行:

    echo “xfce4-session” > ~/.xsession

    ``
    这个
    .xsession文件在您使用 RDP 连接时,会被xrdpsesman` 组件用来启动桌面会话。将您想要使用的桌面环境的启动命令写入此文件即可。注意: 这个文件需要位于 连接用户的家目录 下。

    重要: 在某些较新的 Ubuntu 版本中,xrdp 可能已经内置了对 Gnome 的更好支持,或者需要更复杂的配置(例如修改 /etc/xrdp/startwm.sh 或安装 xrdp-sesman 的特定配置)。如果在设置 .xsession 后仍然遇到问题,请查阅针对您具体 Ubuntu 和 Gnome 版本的 xrdp 配置指南。有时安装一个轻量级桌面环境(如 XFCE 或 MATE)并将其设置为 xrdp 的默认会话(通过修改 /etc/xrdp/sesman.ini 中的 DefaultDesktop 或使用 .xsession)是更可靠的解决方案。

    修改 /etc/xrdp/sesman.ini (高级配置): 您可以编辑此文件来调整 sesman 的行为,例如默认的桌面环境、允许的最大会话数等。
    bash
    sudo nano /etc/xrdp/sesman.ini

    [Sessions] 段落,您可以修改 DefaultDesktop= 行。例如,改为 DefaultDesktop=xfce 来默认启动 XFCE 会话(前提是你已经安装了 XFCE)。

  6. 在客户端连接:

    • Windows 客户端: 打开“远程桌面连接”应用(搜索“mstsc”或“远程桌面连接”)。输入 Ubuntu 服务器的 IP 地址或主机名,点击连接。输入您在 Ubuntu 服务器上的用户名和密码进行认证。
    • Linux / macOS 客户端: 安装一个支持 RDP 的客户端,如 Remmina (Linux) 或 Microsoft Remote Desktop (macOS)。打开客户端,创建一个新的 RDP 连接,输入服务器 IP、用户名和密码进行连接。

重要注意事项:

  • 防火墙: 确保 RDP 端口 3389 在防火墙中是开放的。
  • 认证: 使用您的 Ubuntu 用户名和密码进行 RDP 认证。
  • 安全性: 将 RDP 端口直接暴露在互联网上非常危险。强烈建议通过 VPN 连接到您的网络后再使用 RDP,或者仅允许特定可信任 IP 地址连接。避免在互联网上直接开放 3389 端口。
  • 新的会话 vs. 当前会话: 默认情况下,xrdp 通常会启动一个新的虚拟会话。如果您需要连接到当前物理桌面会话,可能需要更复杂的配置,或者考虑使用 X11VNC。xrdp 也可以配置为连接到现有的 VNC 会话,但这需要 VNC 服务器(如 X11VNC)已经在运行。

方法四:通过 SSH 进行图形转发 (X11 Forwarding)

这种方法与上述方法略有不同,它不是提供一个完整的远程桌面会话,而是允许你在本地机器上运行远程 Ubuntu 机器上的单个图形应用程序。应用程序的窗口会显示在你的本地桌面上。

工作原理: 通过 SSH 连接,X11 Forwarding 将远程应用程序的 X 协议数据转发到本地机器上的 X Server,从而在本地渲染和显示图形界面。

优点:

  • 安全,因为数据通过加密的 SSH 隧道传输。
  • 无需额外的 VNC/RDP 服务器软件(只需要 SSH 服务器)。
  • 只需运行单个应用程序,而不是整个桌面。

缺点:

  • 性能通常不高,对于图形复杂的应用可能会很慢。
  • 每个应用都需要单独启动。
  • 需要客户端机器运行一个 X Server (Linux/macOS 自带,Windows 需要安装如 Xming 或 VcXsrv)。

设置步骤:

  1. 确保 SSH 服务器已安装并运行: 同 VNC 部分所述,安装并启动 openssh-server
  2. 在服务器端启用 X11 Forwarding: 编辑 SSH 服务器配置文件 /etc/ssh/sshd_config
    bash
    sudo nano /etc/ssh/sshd_config

    找到并确保以下两行未被注释掉 (#) 并且值是 yes:
    X11Forwarding yes
    X11DisplayOffset 10
    # X11UseLocalhost yes # 这一行可以保持 yes,除非你需要从非本地地址访问 X11

    保存并关闭文件。
  3. 重启 SSH 服务:
    bash
    sudo systemctl restart ssh
  4. 客户端要求:
    • Linux / macOS: 通常自带 X Server,无需额外安装。
    • Windows: 需要安装一个 X Server,例如 Xming 或 VcXsrv。下载并安装其中一个。安装后启动 X Server 程序(它通常会在系统托盘区运行)。
  5. 在客户端通过 SSH 连接并启用 X11 Forwarding:
    • Linux / macOS 客户端: 打开终端,使用 -X-Y 选项连接:
      bash
      ssh -X user@server_ip_address # 普通 X11 Forwarding
      # 或使用 -Y 启用信任的 X11 Forwarding (可能更快但安全性略低)
      # ssh -Y user@server_ip_address
    • Windows 客户端 (使用 PuTTY):
      • 打开 PuTTY。
      • 在 Session -> Host Name (or IP address) 输入服务器 IP。
      • 在 Connection -> SSH -> X11 中,勾选 “Enable X11 forwarding”。
      • 确保 “X display location” 留空或设置为 “localhost:0.0” (取决于你的 X Server 设置)。
      • 连接并输入密码。
  6. 运行图形应用程序: SSH 连接建立后,在 SSH 会话的命令行中直接输入你想运行的图形应用程序的名称,例如:
    bash
    firefox
    # 或者
    # gedit

    该应用程序的窗口应该会出现在你的本地桌面上。

这种方法非常适合于偶尔需要运行远程机器上的某个图形工具或查看图形输出的场景。

方法五:使用第三方远程桌面解决方案

除了开源和内置的选项,还有许多商业或个人免费的第三方远程桌面软件,它们通常提供更易用的图形界面、更好的穿透内网能力(无需手动设置端口转发)、以及额外的功能(如文件传输、远程打印等)。

一些流行的第三方解决方案包括:

  • AnyDesk: 跨平台,易于设置,性能好,免费供个人使用。
  • TeamViewer: 非常流行,功能强大,免费供个人使用,但商业使用需要付费且对免费用户有会话时长限制。
  • NoMachine: 基于 NX 技术,以高性能著称,尤其适合在较差的网络条件下访问媒体内容。个人使用免费。
  • Chrome Remote Desktop: Google 提供的基于 Chrome 浏览器的远程访问工具,易于设置和使用,完全免费,但功能相对基础。

优点:

  • 通常设置非常简单,特别是穿透内网方面。
  • 性能可能优于某些开源 VNC 方案。
  • 提供额外的便利功能。
  • 客户端广泛可用。

缺点:

  • 通常是闭源软件,代码不公开,可能存在潜在的安全或隐私风险。
  • 个人免费版本可能有功能或使用限制,商业使用需要付费。
  • 依赖于第三方服务器进行连接协调。

安装和设置: 安装第三方解决方案通常是通过下载其官方网站提供的适用于 Ubuntu 的 DEB 包或运行其提供的安装脚本。安装完成后,通常需要运行程序,按照指引设置访问密码或生成连接 ID,然后在客户端输入 ID 和密码进行连接。具体步骤请参考各个软件的官方文档。

安全性考量和最佳实践

无论选择哪种方法,安全性都是远程桌面设置中最重要的部分。以下是一些通用的安全建议:

  1. 使用强密码: 为 VNC、RDP 或 SSH 连接设置复杂且不易猜测的密码。
  2. 通过 SSH 隧道连接 VNC: 如果使用 VNC,强烈建议通过加密的 SSH 连接来传输 VNC 数据,而不是直接暴露 VNC 端口。
  3. 限制访问 IP 地址: 在防火墙(如 UFW)中配置规则,只允许特定可信任的 IP 地址或 IP 范围连接到您的远程桌面服务端口 (5900/5901+, 3389)。
    bash
    sudo ufw allow from <可信任IP> to any port <远程桌面端口> proto tcp
    # 例如: sudo ufw allow from 192.168.1.100 to any port 3389 proto tcp
  4. 避免将远程桌面端口直接暴露在互联网上: 这是最危险的做法。攻击者会持续扫描常见端口。如果必须从互联网访问,考虑使用 VPN 连接到您的网络,或者只允许来自你当前动态 IP 的连接(不推荐,因为 IP 会变动)。
  5. 使用密钥认证(SSH): 如果使用 SSH 隧道或 SSH X11 Forwarding,优先使用更安全的 SSH 密钥认证而不是密码认证。
  6. 保持系统和软件更新: 定期更新 Ubuntu 系统和所有安装的软件(包括远程桌面服务器和客户端),以修补已知的安全漏洞。
    bash
    sudo apt update && sudo apt upgrade
  7. 启用防火墙 (UFW): 确保您的 Ubuntu 机器上开启了防火墙,并且只打开了必需的端口。
    bash
    sudo ufw enable
  8. 审计日志: 定期检查远程桌面服务的日志文件,查找异常的连接尝试。
  9. 使用非标准端口: 虽然不是绝对的安全措施,但将远程桌面服务配置在非标准端口(例如将 RDP 从 3389 改为其他端口)可以减少被自动化扫描工具发现的可能性。但这不能替代防火墙和强认证。
  10. 禁用不必要的服务: 如果您不使用某种远程桌面方法,请确保相应的服务已停止且不会自动启动。

选择哪种方法?

选择哪种方法取决于您的具体需求:

  • 最简单、最快(局域网): Ubuntu 内置桌面共享 (Vino)。
  • 需要共享当前活动的物理桌面: X11VNC 或 Ubuntu 内置共享 (Vino)。
  • 需要独立的虚拟桌面会话(无需物理屏幕): TightVNC 或 xrdp (默认配置下)。
  • 客户端主要是 Windows 用户,喜欢原生客户端: xrdp。
  • 只需要远程运行少量图形应用程序: SSH X11 Forwarding。
  • 需要穿透内网、易于使用、额外功能或无需手动配置端口转发: 第三方解决方案 (AnyDesk, TeamViewer, NoMachine, Chrome Remote Desktop)。
  • 对安全性要求较高,且愿意进行一些配置: 通过 SSH 隧道连接 VNC。

故障排除常见问题

  • 连接被拒绝或超时: 检查服务器的 IP 地址是否正确;检查服务器防火墙是否允许客户端 IP 连接到远程桌面端口;检查远程桌面服务是否正在运行。
  • 连接后黑屏或只看到终端: 如果使用 VNC 服务器(如 TightVNC)或 xrdp,检查 .xstartup 文件或 xrdp 配置 (~/.xsession/etc/xrdp/sesman.ini) 是否正确配置了桌面环境,并且所需的桌面环境已安装。如果使用 X11VNC 或 Vino 在 Wayland 环境下遇到问题,尝试切换到 Xorg 会话。
  • 认证失败: 检查输入的用户名和密码是否正确(区分大小写);检查 VNC 密码文件或系统用户密码是否正确。
  • 性能差: 尝试在客户端降低分辨率、颜色深度;检查网络连接速度和延迟;尝试使用性能更好的 VNC 服务器(如 TightVNC)或 NoMachine 等优化协议。
  • Wayland 问题: 如果您的 Ubuntu 使用 Wayland,并且遇到 VNC/X11VNC 问题,尝试在登录界面切换到 “Ubuntu on Xorg” 会话。目前大多数远程桌面服务器对 Xorg 的支持比 Wayland 更成熟。

总结

在 Ubuntu 上设置远程桌面是一个非常实用的技能,可以极大地提高工作效率和便利性。本文详细介绍了从简单的内置共享到功能强大的 xrdp 和独立的 VNC 服务器的多种方法。每种方法都有其适用的场景和优缺点。

选择最适合您需求的方法后,务必仔细按照步骤进行安装和配置。更重要的是,请务必重视安全性,采取强密码、限制访问、使用 SSH 隧道或 VPN 等措施,避免将您的机器暴露在风险之中。

通过本文的指导,您应该能够成功地在 Ubuntu 上设置远程桌面,享受远程访问带来的便利。如果您在设置过程中遇到问题,可以根据错误信息搜索在线资源,Ubuntu 社区提供了丰富的文档和论坛支持。


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部