This tutorial shows you how to set up the
Chrome Remote Desktop service on a Debian Linux virtual machine (VM) instance on
Compute Engine. Chrome Remote Desktop allows you to remotely access
applications with a graphical user interface from a local computer or mobile
device. For this approach, you don't need to open firewall ports, and you use
your Google Account for authentication and authorization.
Note: This solution is not suitable for graphically intensive applications,
including playing videos, because those typically require hardware graphics
acceleration as well as a network that has high bandwidth and low latency.
If you want to run graphically intense applications remotely, see the
Creating a virtual GPU-accelerated Linux workstation tutorial for an alternative solution.
This tutorial assumes that you are familiar with the Linux command line and
with installing Debian packages. For information about other options for creating virtual workstations,
see
Creating a virtual workstation. For the purposes of this tutorial, the default 1 vCPU (n1-standard-1) machine
type with Debian Linux boot disk works fine, so you don't need to change the
default settings.
In the Cloud Console, go to the VM Instances page: Go to the VM Instances page
Click Create.
Set the instance name to crdhost.
Optionally, select a region and zone that's close to you.
Click Create. It takes a few moments to create your instance.
After the instance has been created, connect to your new instance by
clicking the SSH button in the instance list:
Installing Chrome Remote Desktop on the VM instance The next step is to install Chrome Remote Desktop on the VM instance.
In the SSH window connected to your VM instance, update the package manager
data and install wget:
sudo apt update
sudo apt install --assume-yes wget tasksel
On Debian 9 (stretch), install libgbm1 from the backports repository:
[[ $(/usr/bin/lsb_release --codename --short) == "stretch" ]] && \
sudo apt install --assume-yes libgbm1/stretch-backports
Download and install the Debian Linux Chrome Remote Desktop installation
package:
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
sudo apt-get install --assume-yes ./chrome-remote-desktop_current_amd64.deb
Installing an X Windows System desktop environment You need to install an X Window System desktop environment and window manager
for Chrome Remote Desktop to use. Common options are:
- Xfce
- Cinnamon
- Gnome
- Gnome-Classic
- KDE Plasma
You can use other desktop environments, but Chrome Remote Desktop does not
support 3D graphics acceleration. If you do choose a desktop environment that
uses 3D graphics acceleration, you need to disable that feature, or the remote
desktop service won't start. For remote connections over slower networks we recommended Xfce because it has
minimal graphical elements and few animations.
In the SSH window connected to your VM instance, install the Xfce
desktop environment and basic desktop components:
sudo DEBIAN_FRONTEND=noninteractive \
apt install --assume-yes xfce4 desktop-base dbus-x11 xscreensaver
The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to
configure a layout for a keyboard that would be directly connected to
the VM instance. XScreenSaver is required because the Xfce default screen locker (Light Locker) doesn't
work with Chrome Remote Desktop (Light Locker displays a blank screen
that cannot be unlocked).
Note: You might see a Permission Denied error for the
update-initramfs process during installation. This is normal, and
you can ignore the error.
Configure Chrome Remote Desktop to use Xfce by default:
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'
Optionally, install the full suite of Linux desktop applications,
including the Firefox browser, LibreOffice office application
suite, and the Evince PDF viewer:
sudo apt install --assume-yes task-xfce-desktop
In the SSH window connected to your VM instance, install the
Cinnamon desktop environment and basic desktop components:
sudo DEBIAN_FRONTEND=noninteractive \
apt install --assume-yes cinnamon-core desktop-base dbus-x11
The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to
configure a layout for a keyboard that would be directly connected to
the VM instance.
Note: You might see a Permission Denied error for the
update-initramfs process during the installation process. This is
normal and you can ignore the error.
Set your Chrome Remote Desktop session to use Cinnamon in 2D mode
(which does not use 3D graphics acceleration) by default:
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/cinnamon-session-cinnamon2d" > /etc/chrome-remote-desktop-session'
Optionally, install the full suite of Linux desktop applications,
including the Firefox browser, the LibreOffice office application
suite, and the Evince PDF viewer:
sudo apt install --assume-yes task-cinnamon-desktop
In the SSH window connected to your VM instance, install the
full Gnome desktop environment, including the Firefox browser, the
LibreOffice office application suite, and the Evince PDF viewer:
sudo DEBIAN_FRONTEND=noninteractive \
apt install --assume-yes task-gnome-desktop
The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to
configure a layout for a keyboard that would be directly connected to
the VM instance.
Note: You might see a Permission Denied error for the
update-initramfs process during the installation process. This is
normal and you can ignore the error.
Set your Chrome Remote Desktop session to use Gnome
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/gnome-session" > /etc/chrome-remote-desktop-session'
In the SSH window connected to your VM instance, install the
full Gnome desktop environment, including the Firefox browser, the
LibreOffice office application suite, and the Evince PDF viewer:
sudo DEBIAN_FRONTEND=noninteractive \
apt install --assume-yes task-gnome-desktop
The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to
configure a layout for a keyboard that would be directly connected to
the VM instance.
Note: You might see a Permission Denied error for the
update-initramfs process during the installation process. This is
normal and you can ignore the error.
Set your Chrome Remote Desktop session to use the Gnome-Classic desktop:
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/gnome-session-classic" > /etc/chrome-remote-desktop-session'
In the SSH window connected to your VM instance, install the
full Gnome desktop environment, including the Firefox browser, the
LibreOffice office application suite, and the Evince PDF viewer:
sudo DEBIAN_FRONTEND=noninteractive \
apt install --assume-yes task-kde-desktop
The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to
configure a layout for a keyboard that would be directly connected to
the VM instance.
Note: You might see a Permission Denied error for the
update-initramfs process during the installation process. This is
normal and you can ignore the error.
Set your Chrome Remote Desktop session to use KDE Plasma
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/startkde" > /etc/chrome-remote-desktop-session'
Regardless of which desktop environment you've installed, complete the
installation process by following these steps:
Disable the display manager service on your instance. There is no
display connected to your instance, so the display manager service won't
start.
sudo systemctl disable lightdm.service
Optionally, install the Chrome browser on your instance:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install --assume-yes ./google-chrome-stable_current_amd64.deb
Configuring and starting the Chrome Remote Desktop service To start the remote desktop server, you need to have an authorization key for
the Google account that you want to use to connect to it:
In the Cloud Console, go to the VM Instances page: Go to the VM Instances page
Connect to your instance by clicking the SSH button.
On your local computer, using the Chrome browser, go to the Chrome
Remote Desktop command line setup page: https://remotedesktop.google.com/headless
If you're not already signed in, sign in with a Google Account. This is
the account that will be used for authorizing remote access.
On the Set up another computer page, click Begin.
On the Download and install Chrome Remote Desktop page, click
Next.
Click Authorize. You need to allow Chrome Remote Desktop to access your
account. If you approve, the page displays a command line for Debian
Linux that looks like the following: DISPLAY= /opt/google/chrome-remote-desktop/start-host \
--code="4/xxxxxxxxxxxxxxxxxxxxxxxx" \
--redirect-url="https://remotedesktop.google.com/_/oauthredirect" \
--name=$(hostname)
You use this command to set up and start the Chrome Remote Desktop
service on your VM instance, linking it with your Google Account using the
authorization code.
Note: The authorization code in the command line is valid for only a few
minutes, and you can use it only once.
Copy the command to the SSH window that's connected to your instance,
and then run the command.
When you're prompted, enter a 6-digit PIN. This number will be used for
additional authorization when you connect later. You might see errors like No net_fetcher or Failed to read. You can
ignore these errors.
Verify that the service is running using the following command.
sudo systemctl status chrome-remote-desktop@$USER
If the service is running, you see output that includes the state active: chrome-remote-desktop.service - LSB: Chrome Remote Desktop service Loaded: loaded (/lib/systemd/system/; enabled; vendor preset: enabled) Active: active (running) since DATE_TIME; ELAPSED_TIME
Connecting to the VM instance You can connect to the VM instance using the Chrome Remote Desktop web
application.
On your local computer, go to the
Chrome Remote Desktop web site.
Click Access my computer.
If you're not already signed in to Google, sign in with the same Google
Account that you used to set up the Chrome Remote Desktop service. You see your new VM instance crdhost in the Remote Devices list.
Click the name of the remote desktop instance.
When you're prompted, enter the PIN that you created earlier, and then
click the arrow button to connect. You are now connected to the desktop environment on your remote
Compute Engine instance.
If you installed the Xfce desktop, the first time you connect, you are prompted
to set up the desktop panels. Click Use Default Config to get the standard
taskbar at the top and the quick launch panel at the bottom. Improving the remote desktop experience This section provides instructions for changing settings in order
to improve the remote desktop experience. Enable Clipboard Synchronization Clipboard Synchronization allows the contents of the clipboard to be
shared between the local and remote machines. If this feature is not already enabled, do the following:
- Open the Session Options panel using the button
chevron_left
that appears when you move the mouse to the side of the window.
- In the Enable Clipboard Synchronization section, click Begin (this
section will only be shown if clipboard synchronization is not yet enabled).
- Click Allow.
Install the Remote Desktop Chrome app The Remote Desktop Chrome app gives a separate windowed experience and allows
keyboard shortcuts that would normally be intercepted by Chrome to be used on
the remote system. If this app is not installed, do the following:
- Open the Session Options panel using the button
chevron_left
that appears when you move the mouse to the side of the window.
- In the Install App section, click Begin.
- Click Install.
The remote desktop session reopens in its own application window. You can move any remote desktop sessions from a Chrome tab to
the app window by clicking the Open With
open_in_new
icon in the URL bar. Disable animations and effects in Cinnamon The Cinnamon desktop uses several graphical features and animations, such as
semi-transparent windows and menus that fade in and out. Because these
animations take more time to render over a remote connection, it can make the
user interface feel slow. To disable these effects:
In the Cinnamon desktop, select Menu > Preferences > Effects.
Disable each of the effects:
Set a user password The user account created by Compute Engine doesn't have a password.
However, several desktop environments require one for unlocking screensavers
and authorizing administrative actions. It is therefore important to set a
password for your user:
- Connect to the instance using SSH, as you did when you first set up the
instance.
Create a password for the user:
sudo passwd $(whoami)
Disable screensavers and lock screens Because you're accessing your desktop from a remote computer, it's normally not
necessary to use a screensaver or screen locker, so you can disable these.
- In the Applications menu, select Settings > Screensaver.
- Set Mode to Disable Screen Saver.
- In the desktop, select Menu > Preferences > Screensaver.
- In the Settings tab, set Delay to Never and disable the
following two Lock settings to lock the screen automatically.
- In the desktop, click Activities and type Settings.
- Select the Settings application.
- In the Settings application, select Privacy >
Screen Lock.
- Disable Automatic Screen Lock and close the dialog.
- Select Devices > Keyboard.
- In the list of keyboard shortcuts, scroll down to the System section,
and then click Lock Screen.
- Press the Backspace key to disable the shortcut, and then click Set.
- Select Power and set Blank Screen to Never.
- In the desktop, select Applications > System Tools > Settings.
- In the Settings application, select Privacy >
Screen Lock.
- Disable Automatic Screen Lock and close the dialog.
- Select Devices > Keyboard.
- In the list of keyboard shortcuts, scroll down to the System section
and click Lock Screen.
- Press the Backspace key to disable the shortcut, and then click Set.
- Select Power and set Blank Screen to Never.
- In the desktop, click the KDE menu button, and then type
Screen Locking.
- Select the Screen Locking application.
- In the Configure Screen Locking application, disable Lock Screen
Automatically after and click the
backspace button to clear the
keyboard shortcut.
- Click OK.
Increase the desktop resolution If you have an ultra high-resolution monitor, you might find that the default
maximum remote desktop size of 1600 x 1200 is too small. If so, you can increase
it to the resolution of your monitor.
- Use SSH to connect to the instance.
Set the CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES environment
variable to include the resolution of your monitor:
echo "export CHROME_REMOTE_DESKTOP_DEFAULT_DESKTOP_SIZES=1600x1200,3840x2560" \
>> ~/.profile
Restart the service:
sudo systemctl restart chrome-remote-desktop@$USER
Choose a different desktop environment In the preceding section, you set a default desktop environment in the global
/etc/chrome-remote-desktop-session configuration file. You can also choose a
different desktop environment (if it's installed) by specifying it in the
.chrome-remote-desktop-session configuration file in your home directory:
echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > ~/.chrome-remote-desktop-session
echo "exec /etc/X11/Xsession /usr/bin/cinnamon-session-cinnamon2d" > ~/.chrome-remote-desktop-session
echo "exec /etc/X11/Xsession /usr/bin/gnome-session" > ~/.chrome-remote-desktop-session
echo "exec /etc/X11/Xsession /usr/bin/gnome-session-classic" > ~/.chrome-remote-desktop-session
echo "exec /etc/X11/Xsession /usr/bin/startkde" > ~/.chrome-remote-desktop-session
After you make this change, restart the service so the change takes effect:
sudo systemctl restart chrome-remote-desktop@$USER
As mentioned before, Chrome Remote Desktop does not support 3D graphics
acceleration. Therefore, for any desktop environments that uses these features,
you need disable 3D graphics, or the session will not start. Automating the installation process When you need to set up multiple machines with Chrome Remote Desktop, the manual
installation steps can become repetitive. You can use a
custom startup script to
automate this process, using the following procedure:
In the Cloud Console, go to the VM Instances page: Go to the VM Instances page
Click Create Instance.
Set the instance name to crdhost-autoinstall.
Optionally, select a region and zone that's close to you.
Copy the following shell script and paste it into the Automation/Startup
Script textbox:
#!/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 dbus-x11"
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 tasksel wget"
apt-get update
# Install backports version of libgbm1 on Debian 9/stretch
[[ $(/usr/bin/lsb_release --codename --short) == "stretch" ]] && \
apt-get install --assume-yes libgbm1/stretch-backports
! 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"
This script performs the following tasks each time the machine is rebooted:
- If the remote desktop package is not installed:
- Downloads and installs the Chrome Remote Desktop package.
- Installs the dependent packages.
- Installs the Xfce or Cinnamon desktop environments (depending on the script settings).
- If the full desktop environment option is enabled, installs the
necessary packages.
- If the Chrome browser option is enabled and is not installed:
- Downloads and installs the Chrome Remote Desktop package.
- Installs the dependent packages.
Note: You can choose which packages to install by using the variables
defined near the end of the script.
Click Create. It takes a few moments to create your instance, and on first run with all
the options enabled, the script can take up to 10 minutes to complete the
installation.
To monitor progress, connect to the VM instance using SSH,
and in the terminal of the instance, run the following command:
sudo journalctl -o cat -f _SYSTEMD_UNIT=google-startup-scripts.service
This command shows the output from the startup script. When the script has
finished, you see the following: INFO startup-script: Chrome remote desktop installation completed
INFO startup-script: Return code 0.
INFO Finished running startup scripts.
This script only installs the required packages; you still need to configure the
Remote Desktop Service for your user, as described
previously. There are various ways to specify a startup script when creating a new VM
instance:
- Pasting it into the Cloud Console (as shown earlier).
- Storing it as a file on a local machine, and using the
--metadata-from-file flag when you create the instance using the
Google Cloud CLI.
- Storing it in a Cloud Storage bucket and specifying the URL to the
object—either in the console or in the gcloud CLI.
For more information on the alternative methods of how to configure the startup
script, see
Running Startup scripts
in the Compute Engine documentation. Troubleshooting Check the status of the Chrome Remote Desktop service If at any point the Chrome Remote Desktop service is not responding, you can
check its status by using SSH to connect to the instance and running the
following command:
sudo systemctl status chrome-remote-desktop@$USER
If the service is running, you see output that includes the state active: chrome-remote-desktop.service - LSB: Chrome Remote Desktop service Loaded: loaded (/lib/systemd/system/; enabled; vendor preset: enabled) Active: active (running) since DATE_TIME; ELAPSED_TIME
To restart the service, use the following command in the SSH window:
sudo systemctl restart chrome-remote-desktop@$USER
Chrome Remote Desktop writes log information to the system journal:
journalctl SYSLOG_IDENTIFIER=chrome-remote-desktop # All logs
journalctl SYSLOG_IDENTIFIER=chrome-remote-desktop -e # Most recent logs
journalctl SYSLOG_IDENTIFIER=chrome-remote-desktop -b # Logs since reboot
You can check these log files for error messages. Re-enable the service If you have mistakenly disabled connections to the remote instance in the
client app, you can reconfigure the service and re-enable it by following the
instructions in
Configuring and starting the Chrome Remote Desktop service. Check the global and user-specific session configuration files. Check the contents of the global
/etc/chrome-remote-desktop-session configuration file and the
user-specific ~/.chrome-remote-desktop-session configuration file and confirm
that the specified desktop environments are installed. To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. Deleting the project The easiest way to eliminate billing is to delete the project that you created for the tutorial.
To delete the project: Caution: Deleting a project has the following effects: - Everything in the project is deleted. If you used an existing project for this tutorial, when you delete it, you also delete any other work you've done in the project.
- Custom project IDs are lost. When you created this project, you might have created a custom project ID that you want to use in the future. To preserve the URLs that use the project ID, such as an appspot.com URL, delete selected resources inside the project instead of deleting the whole project.
If you plan to explore multiple tutorials and quickstarts, reusing projects can help you avoid exceeding project quota limits. - In the Cloud Console, go to the Manage resources page.
Go to Manage resources - In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Delete the Compute Engine instance As an alternative to deleting the entire project, you can delete the VM
instance you created for this tutorial:
In the Cloud Console, go to the
VM Instances page: Go to the VM Instances page
Select the checkbox next to the instance name you created earlier
(crdhost).
Click the Delete button at the top of the page: It takes a few moments to delete your instance.
If you no longer want to connect to the VM instance, you can disable it
and remove the instance from the Remote Devices list.
- On your local computer, go to the
Chrome Remote Desktop Remote Device list web site.
- Click delete next to the instance
name crdhost.
- Click OK to confirm that the remote device connection should be
disabled.
|