本教程介绍如何在 Compute Engine 中的 Debian Linux 虚拟机 (VM) 实例上设置 Chrome 远程桌面服务。Chrome 远程桌面可让您从本地计算机或移动设备使用图形界面远程访问应用。对于此方法,您无需打开防火墙端口,而是使用 Google 帐号进行身份验证和授权。
本教程假定您熟悉 Linux 命令行,知道如何安装 Debian 软件包。
如需了解创建虚拟工作站的其他选项,请参阅创建虚拟工作站。
目标
- 创建无外设 Compute Engine 虚拟机实例,以在其上运行 Chrome 远程桌面。
- 在虚拟机实例上安装和配置 Chrome 远程桌面服务。
- 在虚拟机实例中设置 X Window System 桌面环境。
- 从本地计算机连接到虚拟机实例上的桌面环境。
费用
本教程使用 Google Cloud 的以下收费组件:
- Compute Engine
请使用价格计算器根据您的预计使用情况来估算费用。
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
本教程要求您使用本地计算机上的 Google Chrome 浏览器。如果您没有该浏览器,可以从 Google Chrome 主页安装。
创建 Compute Engine 实例
在本教程中,默认的 1 个 vCPU (n1-standard-1
)、带有 Debian Linux 启动磁盘的机器类型可正常运行,因此您无需更改默认设置。
在 Cloud Console 中,转到虚拟机实例页面:
点击创建。
将实例名称设置为
crdhost
。(可选)选择一个靠近您的区域和地区。
点击创建。
创建实例需要一些时间。
创建实例后,通过点击实例列表中的 SSH 按钮连接到您的新实例:
在虚拟机实例上安装 Chrome 远程桌面
下一步是在虚拟机实例上安装 Chrome 远程桌面。
在连接到虚拟机实例的 SSH 窗口中,更新软件包管理器数据并安装
wget
:sudo apt update sudo apt-get install --assume-yes wget
下载 Debian Linux Chrome 远程桌面安装软件包:
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
安装软件包及其依赖项:
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
在连接到虚拟机实例的 SSH 窗口中,安装 Xfce 桌面环境和基本桌面组件:
sudo DEBIAN_FRONTEND=noninteractive \ apt install --assume-yes xfce4 desktop-base
DEBIAN_FRONTEND=noninteractive
参数会隐藏配置直接连接虚拟机实例的键盘布局的提示。将 Chrome 远程桌面配置为默认使用 Xfce:
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'
Xfce 的默认屏幕锁定器是 Light Locker,该锁定器不适用于 Chrome 远程桌面。(该屏幕锁定器显示空白屏幕,无法解锁)。因此,作为替代方案,请安装 XScreenSaver:
sudo apt install --assume-yes xscreensaver
(可选)安装全套 Linux 桌面应用,包括 Firefox 浏览器、LibreOffice 办公应用套件和 Evince PDF 查看器:
sudo apt install --assume-yes task-xfce-desktop
Cinnamon
在连接到虚拟机实例的 SSH 窗口中,安装 Cinnamon 桌面环境和基本桌面组件:
sudo DEBIAN_FRONTEND=noninteractive \ apt install --assume-yes cinnamon-core desktop-base
DEBIAN_FRONTEND=noninteractive
参数会隐藏配置直接连接虚拟机实例的键盘布局的提示。将 Chrome 远程桌面会话设置为默认使用 2D 模式下的 Cinnamon(不使用 3D 图形加速):
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/cinnamon-session-cinnamon2d" > /etc/chrome-remote-desktop-session'
(可选)安装全套 Linux 桌面应用,包括 Firefox 浏览器、LibreOffice 办公应用套件和 Evince PDF 查看器:
sudo apt install --assume-yes task-cinnamon-desktop
无论您安装的是哪种桌面环境,请按照以下步骤完成安装过程:
停用实例上的显示管理器服务。没有显示器连接到您的实例,因此显示管理器服务无法启动。
sudo systemctl disable lightdm.service
(可选)在您的实例上安装 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 帐号的授权密钥:
在连接到虚拟机实例的 SSH 窗口中,将您的用户帐号添加到
chrome-remote-desktop
Linux 组并退出。sudo usermod -a -G chrome-remote-desktop $USER logout
在 Cloud Console 中,点击 SSH 按钮以重新连接到您的实例。
在本地计算机上,使用 Chrome 浏览器,转到 Chrome 远程桌面命令行设置页面:
如果您尚未登录,请使用 Google 帐号登录。这是将用于授权远程访问的帐号。
在再设置一台计算机页面上,点击开始。
在下载并安装 Chrome 远程桌面 (Download and install Chrome Remote Desktop) 页面上,点击下一步。
点击授权。
您需要允许 Chrome 远程桌面访问您的帐号。当您批准访问后,该页面会显示如下命令行(对于 Debian Linux):
DISPLAY= /opt/google/chrome-remote-desktop/start-host \ --code="4/xxxxxxxxxxxxxxxxxxxxxxxx" \ --redirect-url="https://remotedesktop.google.com/_/oauthredirect" \ --name=
您可以使用此命令在您的虚拟机实例上设置和启动 Chrome 远程桌面服务,并使用授权代码将其与您的 Google 帐号相关联。
将命令复制到与您的实例连接的 SSH 窗口,然后运行该命令。
当系统提示您输入计算机的名称时,请输入实例名称 (
crdhost
)。出现提示时,输入一个 6 位数的 PIN 码。稍后连接时使用此号码进行额外的授权。
连接到虚拟机实例
您可以使用 Chrome 远程桌面 Web 应用连接到虚拟机实例。
在本地计算机上,转到 Chrome 远程桌面网站。
点击远程访问
如果您尚未登录 Google,请使用您用于设置 Chrome 远程桌面服务的同一 Google 帐号进行登录。
您可以在远程设备列表中看到此新虚拟机实例。
点击远程桌面实例的名称。
收到系统提示时,请输入您之前创建的 PIN 码,然后点击箭头按钮进行连接。
现在,您已连接到远程 Compute Engine 实例上的桌面环境。
如果您安装的是 Xfce 桌面,则首次连接时,系统会提示您设置桌面面板。点击使用默认配置 (Use Default Config),以在顶部显示标准任务栏并在底部显示快速启动面板。
改善远程桌面体验
本部分介绍如何更改设置,以改善远程桌面体验。
启用剪贴板同步功能
借助剪贴板同步功能,您可在本地机器和远程机器之间共享剪贴板的内容。如果尚未启用此功能,请执行以下操作:
- 使用窗口一侧的按钮 chevron_left 打开会话选项面板。
- 在启用剪贴板同步功能部分,点击开始。
- 点击允许。
安装远程桌面 Chrome 应用
远程桌面 Chrome 应用提供了单独的基于窗口的体验,允许在远程系统上使用更多的键盘快捷键。如果未安装此应用,请执行以下操作:
- 使用窗口一侧的按钮 chevron_left 打开会话选项面板。
- 在安装应用部分,点击开始。
点击安装。
远程桌面会话将在单独的窗口中重新打开。
点击网址栏中的打开方式 open_in_new 图标,可以将任何远程桌面会话从 Chrome 标签页移至应用窗口。
停用 Cinnamon 中的动画和效果
Cinnamon 桌面使用多种图形功能和动画,例如半透明窗口和淡入淡出式菜单。因为这些动画通过远程连接进行渲染需要较长时间,所以会让您感觉用户界面操作缓慢。
要停用这些效果,请执行以下步骤:
在 Cinnamon 桌面中,选择菜单 (Menu) > 偏好设置 (Preferences) > 效果 (Effects)。
停用各个效果:
停用屏保、锁定屏幕和密码
因为您是从远程计算机访问桌面,所以通常不需要使用屏保或屏幕锁定器。
Xfce
- 在应用 (Applications) 菜单中,选择设置 (Settings) > 屏保 (Screensaver)。
将模式 (Mode) 设置为停用屏保 (Disable Screen Saver)。
Cinnamon
- 在桌面上,选择菜单 (Menu) > 偏好设置 (Preferences) > 屏保 (Screensaver)。
在设置 (Settings) 标签页中,将延迟 (Delay) 设置为从不 (Never),并停用两项锁定设置。
Compute Engine 创建的用户帐号没有密码,大多数锁屏应用无法为没有密码的用户解锁屏幕。但是,即使屏保被停用,仍然可以从应用 (Applications) 菜单锁定屏幕。
为避免被锁定而无法使用远程桌面,您可以为用户设置密码:
- 使用 SSH 连接到实例,方法与第一次设置实例时相同。
为用户创建密码:
sudo passwd $(whoami)
此密码仅在解锁屏幕时需要。
提高桌面分辨率
如果您使用的是超高分辨率监视器,您可能会发现 1600 x 1200 的默认最大远程桌面尺寸太小。如果是这样,您可以将其提高到您的显示器的分辨率大小。
- 使用 SSH 连接到实例。
将
CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES
环境变量设置为包含您的显示器的分辨率大小:echo "export CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES=1600x1200,3840x2560" \ >> ~/.profile
重启服务:
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 远程桌面设置多台机器时,手动安装步骤可能会变得重复。您可以按照以下过程使用自定义启动脚本来自动执行此过程:
在 Cloud Console 中,转到虚拟机实例页面:
点击创建实例。
将实例名称设置为
crdhost-autoinstall
。(可选)选择一个靠近您的区域和地区。
复制以下 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 远程桌面软件包。
- 安装必需的软件包。
- 如果未安装远程桌面软件包:
点击创建。
创建实例需要一些时间,在启用所有选项的情况下首次运行时,脚本可能需要多达 10 分钟的时间才能完成安装。
如需监控进度,请使用 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 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除 Compute Engine 实例
作为删除整个项目的替代方法,您可以删除为本教程创建的虚拟机实例:
在 Cloud Console 中,转到虚拟机实例页面:
选中您先前创建的实例名称 (
crdhost
) 旁边的复选框。点击页面顶部的删除按钮:
删除实例需要一些时间。
取消对实例的 Chrome 远程桌面授权
如果您不想再连接到该虚拟机实例,可以将其停用并从远程设备列表中移除。
在本地计算机上,转到 Chrome 远程桌面远程设备列表(测试版)网站。
点击实例名称旁边的
:点击确定以确认停用远程设备连接。