在 Compute Engine 上设置适用于 Linux 的 Chrome 远程桌面

本教程介绍了如何在 Compute Engine 中的 Debian Linux 虚拟机 (VM) 实例上设置 Chrome 远程桌面服务。Chrome 远程桌面可让您从本地计算机或移动设备使用图形界面远程访问应用。对于此方法,您无需打开防火墙端口,而是使用 Google 帐号进行身份验证和授权。

本教程假定您熟悉 Linux 命令行,知道如何安装 Debian 软件包。

如需了解创建虚拟工作站的其他选项,请参阅创建虚拟工作站

目标

  • 创建无头 Compute Engine 虚拟机实例,以在其上运行 Chrome 远程桌面。
  • 在虚拟机实例上安装和配置 Chrome 远程桌面服务。
  • 在虚拟机实例中设置 X Window System 桌面环境。
  • 从本地计算机连接到虚拟机实例上的桌面环境。

费用

本教程使用 Google Cloud 的以下收费组件:

  • Compute Engine

请使用价格计算器根据您的预计使用情况来估算费用。

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

本教程要求您使用本地计算机上的 Google Chrome 浏览器。如果您没有该浏览器,可以从 Google Chrome 主页安装。

创建 Compute Engine 实例

在本教程中,默认的 1 个 vCPU (n1-standard-1)、带有 Debian Linux 启动磁盘的机器类型可正常运行,因此您无需更改默认设置。

  1. 在 Cloud Console 中,转到虚拟机实例页面:

    转到“虚拟机实例”页面

  2. 点击创建

  3. 将实例名称设置为 crdhost

  4. (可选)选择一个靠近您的区域和地区。

  5. 点击创建

    创建实例需要一些时间。

  6. 创建实例后,通过点击实例列表中的 SSH 按钮连接到您的新实例:

    创建连到虚拟机实例的 SSH 连接。

在虚拟机实例上安装 Chrome 远程桌面

下一步是在虚拟机实例上安装 Chrome 远程桌面。

  1. 在连接到虚拟机实例的 SSH 窗口中,更新软件包管理器数据并安装 wget

    sudo apt update
    sudo apt-get install --assume-yes wget
    
  2. 下载 Debian Linux Chrome 远程桌面安装软件包:

    wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
    
  3. 安装软件包及其依赖项:

    sudo dpkg --install chrome-remote-desktop_current_amd64.deb
    sudo apt install --assume-yes --fix-broken
    

安装 X Windows System 桌面环境

您需要安装 X Window System 桌面环境和窗口管理器才能使用 Chrome 远程桌面。常见的选项是:

  • Xfce。这是一个简单的轻量级桌面环境,能较好地适用通过较慢网络创建的远程连接。
  • Cinnamon。这是一个桌上型个人计算机用户更为熟悉、功能更全面的传统桌面环境。但是,该桌面环境使用的图形元素较多,需要快速网络才能顺畅运行。

您可以使用其他桌面环境,但 Chrome 远程桌面不支持 3D 图形加速。如果选择使用 3D 图形加速的桌面环境,则需要停用该功能,否则将无法启动远程桌面服务。

Xfce

  1. 在连接到虚拟机实例的 SSH 窗口中,安装 Xfce 桌面环境和基本桌面组件:

    sudo DEBIAN_FRONTEND=noninteractive \
        apt install --assume-yes xfce4 desktop-base
    

    DEBIAN_FRONTEND=noninteractive 参数会隐藏配置直接连接虚拟机实例的键盘布局的提示。

  2. 将 Chrome 远程桌面配置为默认使用 Xfce:

    sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'
    
  3. Xfce 的默认屏幕锁定器是 Light Locker,该锁定器不适用于 Chrome 远程桌面。(该屏幕锁定器显示空白屏幕,无法解锁)。因此,作为替代方案,请安装 XScreenSaver

    sudo apt install --assume-yes xscreensaver
    
  4. (可选)安装全套 Linux 桌面应用,包括 Firefox 浏览器、LibreOffice 办公应用套件和 Evince PDF 查看器:

    sudo apt install --assume-yes task-xfce-desktop
    

Cinnamon

  1. 在连接到虚拟机实例的 SSH 窗口中,安装 Cinnamon 桌面环境和基本桌面组件:

    sudo DEBIAN_FRONTEND=noninteractive \
        apt install --assume-yes cinnamon-core desktop-base
    

    DEBIAN_FRONTEND=noninteractive 参数会隐藏配置直接连接虚拟机实例的键盘布局的提示。

  2. 将 Chrome 远程桌面会话设置为默认使用 2D 模式下的 Cinnamon(不使用 3D 图形加速):

    sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/cinnamon-session-cinnamon2d" > /etc/chrome-remote-desktop-session'
    
  3. (可选)安装全套 Linux 桌面应用,包括 Firefox 浏览器、LibreOffice 办公应用套件和 Evince PDF 查看器:

    sudo apt install --assume-yes task-cinnamon-desktop
    

无论您安装的是哪种桌面环境,请按照以下步骤完成安装过程:

  1. 停用实例上的显示管理器服务。没有显示器连接到您的实例,因此显示管理器服务无法启动。

    sudo systemctl disable lightdm.service
    
  2. (可选)在您的实例上安装 Chrome 浏览器:

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
    
    sudo dpkg --install google-chrome-stable_current_amd64.deb
    sudo apt install --assume-yes --fix-broken
    

配置和启动 Chrome 远程桌面服务

要启动远程桌面服务器,您需要拥有要用来连接到该服务器的 Google 帐号的授权密钥:

  1. 在连接到虚拟机实例的 SSH 窗口中,将您的用户帐号添加到 chrome-remote-desktop Linux 组并退出。

    sudo usermod -a -G chrome-remote-desktop $USER
    logout
    
  2. 在 Cloud Console 中,点击 SSH 按钮以重新连接到您的实例。

  3. 在本地计算机上,使用 Chrome 浏览器,转到 Chrome 远程桌面命令行设置页面:

    https://remotedesktop.google.com/headless

  4. 如果您尚未登录,请使用 Google 帐号登录。这是将用于授权远程访问的帐号。

  5. 再设置一台计算机页面上,点击开始

  6. 下载并安装 Chrome 远程桌面 (Download and install Chrome Remote Desktop) 页面上,点击下一步

  7. 点击授权

    您需要允许 Chrome 远程桌面访问您的帐号。当您批准访问后,该页面会显示如下命令行(对于 Debian Linux):

    DISPLAY= /opt/google/chrome-remote-desktop/start-host \
        --code="4/xxxxxxxxxxxxxxxxxxxxxxxx" \
        --redirect-url="https://remotedesktop.google.com/_/oauthredirect" \
        --name=
    

    您可以使用此命令在您的虚拟机实例上设置和启动 Chrome 远程桌面服务,并使用授权代码将其与您的 Google 帐号相关联。

  8. 将命令复制到与您的实例连接的 SSH 窗口,然后运行该命令。

  9. 当系统提示您输入计算机的名称时,请输入实例名称 (crdhost)。

  10. 出现提示时,输入一个 6 位数的 PIN 码。稍后连接时使用此号码进行额外的授权。

连接到虚拟机实例

您可以使用 Chrome 远程桌面 Web 应用连接到虚拟机实例。

  1. 在本地计算机上,转到 Chrome 远程桌面网站。

  2. 点击远程访问

  3. 如果您尚未登录 Google,请使用您用于设置 Chrome 远程桌面服务的同一 Google 帐号进行登录。

    您可以在远程设备列表中看到此新虚拟机实例。 可供连接的远程设备列表。

  4. 点击远程桌面实例的名称。

  5. 收到系统提示时,请输入您之前创建的 PIN 码,然后点击箭头按钮进行连接。

    现在,您已连接到远程 Compute Engine 实例上的桌面环境。

如果您安装的是 Xfce 桌面,则首次连接时,系统会提示您设置桌面面板。点击使用默认配置 (Use Default Config),以在顶部显示标准任务栏并在底部显示快速启动面板。

显示任务栏和快速启动面板的 xfce 桌面。

改善远程桌面体验

本部分介绍如何更改设置,以改善远程桌面体验。

启用剪贴板同步功能

借助剪贴板同步功能,您可在本地机器和远程机器之间共享剪贴板的内容。如果尚未启用此功能,请执行以下操作:

  1. 使用窗口一侧的按钮 打开会话选项面板。
  2. 启用剪贴板同步功能部分,点击开始
  3. 点击允许

安装远程桌面 Chrome 应用

远程桌面 Chrome 应用提供了单独的基于窗口的体验,允许在远程系统上使用更多的键盘快捷键。如果未安装此应用,请执行以下操作:

  1. 使用窗口一侧的按钮 打开会话选项面板。
  2. 安装应用部分,点击开始
  3. 点击安装

    远程桌面会话将在单独的窗口中重新打开。

点击网址栏中的打开方式 图标,可以将任何远程桌面会话从 Chrome 标签页移至应用窗口。

停用 Cinnamon 中的动画和效果

Cinnamon 桌面使用多种图形功能和动画,例如半透明窗口和淡入淡出式菜单。因为这些动画通过远程连接进行渲染需要较长时间,所以会让您感觉用户界面操作缓慢。

要停用这些效果,请执行以下步骤:

  1. 在 Cinnamon 桌面中,选择菜单 (Menu) > 偏好设置 (Preferences) > 效果 (Effects)。

    在 Cinnamon 中设置桌面偏好设置。

  2. 停用各个效果:

    在 Cinnamon 中停用动画效果。

停用屏保、锁定屏幕和密码

因为您是从远程计算机访问桌面,所以通常不需要使用屏保或屏幕锁定器。

Xfce

  1. 应用 (Applications) 菜单中,选择设置 (Settings) > 屏保 (Screensaver)。
  2. 模式 (Mode) 设置为停用屏保 (Disable Screen Saver)。

    在 Xfce 中停用屏保。

Cinnamon

  1. 在桌面上,选择菜单 (Menu) > 偏好设置 (Preferences) > 屏保 (Screensaver)。
  2. 设置 (Settings) 标签页中,将延迟 (Delay) 设置为从不 (Never),并停用两项锁定设置。

    Cinnamon 中的效果设置对话框。

Compute Engine 创建的用户帐号没有密码,大多数锁屏应用无法为没有密码的用户解锁屏幕。但是,即使屏保被停用,仍然可以从应用 (Applications) 菜单锁定屏幕。

为避免被锁定而无法使用远程桌面,您可以为用户设置密码:

  1. 使用 SSH 连接到实例,方法与第一次设置实例时相同。
  2. 为用户创建密码:

    sudo passwd $(whoami)
    

    此密码仅在解锁屏幕时需要。

提高桌面分辨率

如果您使用的是超高分辨率监视器,您可能会发现 1600 x 1200 的默认最大远程桌面尺寸太小。如果是这样,您可以将其提高到您的显示器的分辨率大小。

  1. 使用 SSH 连接到实例。
  2. CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES 环境变量设置为包含您的显示器的分辨率大小:

    echo "export CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES=1600x1200,3840x2560" \
        >> ~/.profile
    
  3. 重启服务:

    sudo systemctl restart chrome-remote-desktop
    

选择其他桌面环境

在上一部分中,您在 /etc/chrome-remote-desktop-session 文件中设置了默认桌面环境。您还可以通过在主目录的 .chrome-remote-desktop-session 配置文件中指定其他桌面环境(如果已安装)来选择其他桌面环境:

Xfce

echo "exec /usr/bin/xfce4-session" > ~/.chrome-remote-desktop-session

Cinnamon

echo "exec /usr/bin/cinnamon-session-cinnamon2d" > ~/.chrome-remote-desktop-session

完成此更改后,重启服务以使更改生效:

sudo systemctl restart chrome-remote-desktop

如前所述,Chrome 远程桌面不支持 3D 图形加速。因此,对于使用这些功能的任何桌面环境,您需要停用 3D 图形,否则将无法启动会话。

自动执行安装过程

当您需要使用 Chrome 远程桌面设置多台机器时,手动安装步骤可能会变得重复。您可以按照以下过程使用自定义启动脚本来自动执行此过程:

  1. 在 Cloud Console 中,转到虚拟机实例页面:

    转到“虚拟机实例”页面

  2. 点击创建实例

  3. 将实例名称设置为 crdhost-autoinstall

  4. (可选)选择一个靠近您的区域和地区。

  5. 复制以下 Shell 脚本并将其粘贴到自动化/启动脚本文本框中:

    #!/bin/bash -x
    #
    # Startup script to install Chrome remote desktop and a desktop environment.
    #
    # See environmental variables at then end of the script for configuration
    #
    
    function install_desktop_env {
      PACKAGES="desktop-base xscreensaver"
    
      if [[ "$INSTALL_XFCE" != "yes" && "$INSTALL_CINNAMON" != "yes" ]] ; then
        # neither XFCE nor cinnamon specified; install both
        INSTALL_XFCE=yes
        INSTALL_CINNAMON=yes
      fi
    
      if [[ "$INSTALL_XFCE" = "yes" ]] ; then
        PACKAGES="$PACKAGES xfce4"
        echo "exec xfce4-session" > /etc/chrome-remote-desktop-session
        [[ "$INSTALL_FULL_DESKTOP" = "yes" ]] && \
          PACKAGES="$PACKAGES task-xfce-desktop"
      fi
    
      if [[ "$INSTALL_CINNAMON" = "yes" ]] ; then
        PACKAGES="$PACKAGES cinnamon-core"
        echo "exec cinnamon-session-cinnamon2d" > /etc/chrome-remote-desktop-session
        [[ "$INSTALL_FULL_DESKTOP" = "yes" ]] && \
          PACKAGES="$PACKAGES task-cinnamon-desktop"
      fi
    
      DEBIAN_FRONTEND=noninteractive \
        apt-get install --assume-yes $PACKAGES $EXTRA_PACKAGES
    
      systemctl disable lightdm.service
    }
    
    function download_and_install { # args URL FILENAME
      curl -L -o "$2" "$1"
      dpkg --install "$2"
      apt-get install --assume-yes --fix-broken
    }
    
    function is_installed {  # args PACKAGE_NAME
      dpkg-query --list "$1" | grep -q "^ii" 2>/dev/null
      return $?
    }
    
    # Configure the following environmental variables as required:
    INSTALL_XFCE=yes
    INSTALL_CINNAMON=yes
    INSTALL_CHROME=yes
    INSTALL_FULL_DESKTOP=yes
    
    # Any additional packages that should be installed on startup can be added here
    EXTRA_PACKAGES="less bzip2 zip unzip"
    
    apt-get update
    
    ! is_installed chrome-remote-desktop && \
      download_and_install \
        https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb \
        /tmp/chrome-remote-desktop_current_amd64.deb
    
    install_desktop_env
    
    [[ "$INSTALL_CHROME" = "yes" ]] && \
      ! is_installed google-chrome-stable && \
      download_and_install \
        https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
        /tmp/google-chrome-stable_current_amd64.deb
    
    echo "Chrome remote desktop installation completed"
    

    每次重新启动机器时,此脚本都将执行以下任务:

    • 如果未安装远程桌面软件包:
      • 下载并安装 Chrome 远程桌面软件包。
      • 安装必需的软件包。
    • 安装 Xfce 或 Cinnamon 桌面环境(具体取决于脚本设置)。
    • 如果已启用完整桌面环境选项,请安装必要的软件包。
    • 如果已启用但未安装 Chrome 浏览器选项,请执行以下操作:
      • 下载并安装 Chrome 远程桌面软件包。
      • 安装必需的软件包。
  6. 点击创建

    创建实例需要一些时间,在启用所有选项的情况下首次运行时,脚本可能需要多达 10 分钟的时间才能完成安装。

  7. 如需监控进度,请使用 SSH 连接到虚拟机实例,并在实例的终端中运行以下命令:

    sudo journalctl -o cat -f _SYSTEMD_UNIT=google-startup-scripts.service
    

    此命令显示启动脚本的输出。脚本完成后,您将看到以下内容:

    INFO startup-script: Chrome remote desktop installation completed
    INFO startup-script: Return code 0.
    INFO Finished running startup scripts.
    

此脚本仅安装必需的软件包;如所述,您仍需为您的用户配置远程桌面服务。

在创建新的虚拟机实例时,可以通过多种方式指定启动脚本:

  • 将其粘贴到 Cloud Console 中(如前所述)。
  • 将其作为文件存储在本地机器上,并在使用 gcloud 命令行工具创建实例时使用 --metadata-from-file 标志。
  • 将其存储在 Cloud Storage 存储分区中,并在控制台或 gcloud 工具中指定该对象的网址。

如需详细了解配置启动脚本的替代方法,请参阅 Compute Engine 文档中的运行启动脚本

问题排查

检查 Chrome 远程桌面服务的状态

如果在任何时候 Chrome 远程桌面服务没有响应,您可以使用 SSH 连接到实例并运行以下命令来检查其状态:

sudo systemctl status chrome-remote-desktop

如果服务正在运行,您会看到包含 active 状态的输出:

chrome-remote-desktop.service - LSB: Chrome Remote Desktop service
    Loaded: loaded (/etc/init.d/chrome-remote-desktop; generated; vendor preset: enabled)
    Active: active (exited) since DATE_TIME, ELAPSED_TIME

要重启服务,请在 SSH 窗口中使用以下命令:

sudo systemctl restart chrome-remote-desktop

获取日志和错误信息

Chrome 远程桌面将日志信息写入文件,文件名称符合以下模式:

/tmp/chrome_remote_desktop_DATE_TIME_*

您可以检查这些日志文件,以获取错误消息。

重新启用服务

如果您在客户端应用中错误地停用了与远程实例的连接,您可以按照配置和启动 Chrome 远程桌面服务中的说明重新配置并重新启用服务。

清理

为避免因本教程中使用的资源而导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

要删除项目,请执行以下操作:

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 Compute Engine 实例

作为删除整个项目的替代方法,您可以删除为本教程创建的虚拟机实例:

  1. 在 Cloud Console 中,转到虚拟机实例页面:

    转到“虚拟机实例”页面

  2. 选中您先前创建的实例名称 (crdhost) 旁边的复选框。

  3. 点击页面顶部的删除按钮:

    删除虚拟机实例。

    删除实例需要一些时间。

取消对实例的 Chrome 远程桌面授权

如果您不想再连接到该虚拟机实例,可以将其停用并从远程设备列表中移除。

  1. 在本地计算机上,转到 Chrome 远程桌面远程设备列表(Beta 版)网站。

  2. 点击实例名称旁边的

    在 Chrome 中停用远程设备。

  3. 点击确定以确认停用远程设备连接。

后续步骤

  • 尝试从手机使用 AndroidiOS Chrome 远程桌面应用访问远程桌面环境。
  • 了解创建虚拟工作站的其他选项。
  • 试用其他 Google Cloud 功能。查阅我们的教程