Setting up Chrome Remote Desktop on Compute Engine

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.

This tutorial assumes that you are familiar with the Linux command line and with installing Debian packages.

Objectives

  • Create a headless Compute Engine VM instance to run Chrome Remote Desktop on.
  • Install and configure the Chrome Remote Desktop service on the VM instance.
  • Set up an X Window System desktop environment in the VM instance.
  • Install and configure the Chrome Remote Desktop client on your local computer.
  • Connect from your local computer to the desktop environment on the VM instance.

Costs

This tutorial uses billable components of Google Cloud Platform (GCP), including:

  • Compute Engine

Use the Pricing Calculator to generate a cost estimate based on your projected usage.

Before you begin

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a GCP project.

    Go to the Project selector page

  3. Make sure that billing is enabled for your Google Cloud Platform project.

    Learn how to enable billing

This tutorial requires that you use the Google Chrome browser on your local computer. If you don't have it already, you can install it from the Google Chrome home page.

Creating a Compute Engine instance

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.

  1. In the GCP Console, go to the VM Instances page:

    Go to the VM Instances page

  2. Click Create.

  3. Set the instance name to crdhost.

  4. Optionally, select a region and zone that's close to you.

  5. Click Create.

    It takes a few moments to create your instance.

  6. After the instance has been created, connect to your new instance by clicking the SSH button in the instance list:

    Creating an SSH connection to the VM instance

Installing Chrome Remote Desktop on the VM instance

The next step is to install Chrome Remote Desktop on the VM instance.

  1. In the SSH window connected to your VM instance, download the Debian Linux Chrome Remote Desktop installation package:

    wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
    
  2. Update the package manager data:

    sudo apt update
    
  3. Install the package and its dependencies:

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

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. This is a simple, lightweight desktop environment that works well with remote connections over slower networks.
  • Cinnamon. This is a more full-featured traditional desktop environment that will be more familiar to desktop PC users. However, it uses more graphical elements and needs a fast network to run smoothly.

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.

Xfce

  1. 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
    

    The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to configure a layout for a keyboard that would be directly connected to the VM instance.

  2. Configure Chrome Remote Desktop to use Xfce by default:

    echo "exec /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session
    
  3. Xfce's default screen locker is Light Locker, which doesn't work with Chrome Remote Desktop. (The screen locker displays a blank screen and cannot be unlocked). Therefore, install XScreenSaver as an alternative:

    sudo apt install --assume-yes xscreensaver
    
  4. 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
    

Cinnamon

  1. 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
    

    The DEBIAN_FRONTEND=noninteractive parameter suppresses a prompt to configure a layout for a keyboard that would be directly connected to the VM instance.

  2. Set your Chrome Remote Desktop session to use Cinnamon in 2D mode (which does not use 3D graphics acceleration) by default:

    echo "exec /usr/bin/cinnamon-session-cinnamon2d" > /etc/chrome-remote-desktop-session
    
  3. 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
    

Regardless of which desktop environment you've installed, complete the installation process by following these steps:

  1. 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
    
  2. Optionally, install the Chrome browser on your instance:

    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
    

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.

  1. On your local computer, using the Chrome browser, go to the Chrome Remote Desktop command line setup page:

    https://remotedesktop.google.com/headless

  2. 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.

  3. On the Set up another computer page, click Begin.

  4. On the Download and install Chrome Remote Desktop page, click Next.

  5. 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=
    

    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.

  6. Copy the command to the SSH window that's connected to your instance, and then run the command.

  7. When you're prompted for a name for the computer, enter the instance name (crdhost).

  8. When you're prompted, enter a 6-digit PIN. This number will be used for additional authorization when you connect later.

Connecting to the VM instance

You can connect to the VM instance using the Chrome Remote Desktop web application.

  1. On your local computer, go to the Chrome Remote Desktop web site.

  2. Click Remote Access

  3. 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 in the Remote Devices list. List of remote devices available to connect to

  4. Click the name of the remote desktop instance.

  5. 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.

xfce desktop showing the taskbar and quick launch panel

Improving the remote desktop experience

This section provides instructions for changing settings in order to improve the remote desktop experience.

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:

  1. In the Cinnamon desktop, select Menu > Preferences > Effects.

    Setting desktop preferences in Cinnamon

  2. Disable each of the effects:

    Disabling animation effects in Cinnamon

Disable screensavers, lock screens, and passwords

Because you're accessing your desktop from a remote computer, it's normally not necessary to use a screensaver or screen locker.

Xfce

  1. In the Applications menu, select Settings > Screensaver.
  2. Set Mode to Disable Screen Saver.

    Disabling the screensaver in Xfce

Cinnamon

  1. In the desktop, select Menu > Preferences > Screensaver.
  2. In the Settings tab, set Delay to Never and disable the two lock settings:

    Effects settings dialog in Cinnamon

The user account created by Compute Engine doesn't have a password, and most screen-locking apps can't unlock screens for users that don't have a password. However, even when screensavers are disabled, it's still possible to lock the screen from the Applications menu.

To avoid getting locked out of the remote desktop, you can set a password for your user:

  1. Connect to the instance using SSH, as you did when you first set up the instance.
  2. Create a password for the user:

    sudo passwd $(whoami)
    

    This password is required only in order to unlock the screen.

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.

  1. Use SSH to connect to the instance.
  2. 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
    
  3. Restart the service:

    sudo systemctl restart chrome-remote-desktop
    

Choose a different desktop environment

In the preceding section, you set a default desktop environment in the /etc/chrome-remote-desktop-session 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:

Xfce

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

Cinnamon

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

After you make this change, restart the service so the change takes effect:

sudo systemctl restart chrome-remote-desktop

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:

  1. In the GCP Console, go to the VM Instances page:

    Go to the VM Instances page

  2. Click Create Instance.

  3. Set the instance name to crdhost-autoinstall.

  4. Optionally, select a region and zone that's close to you.

  5. Expand the Management, security, disks, networking, sole tenancy section.

  6. 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"
    
      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 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 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"
    
    ! 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.
  7. 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.

  8. To monitor progress, connect to the VM instance using SSH, and in the terminal of the instance, run the following command:

    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 GCP 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 gcloud command line tool.
  • Storing it in a Cloud Storage bucket and specifying the URL to the object—either in the console or in the gcloud tool.

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

If the service is running, you see output that includes the state 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

To restart the service, use the following command in the SSH window:

sudo systemctl restart chrome-remote-desktop

Get log and error information

Chrome Remote Desktop writes log information to files whose names match the following pattern:

/tmp/chrome_remote_desktop_DATE_TIME_*

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.

Cleaning up

To avoid incurring charges to your Google Cloud Platform account for the resources used in this tutorial:

Deleting the project

The easiest way to eliminate billing is to delete the project that you created for the tutorial.

To delete the project:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete .
  3. 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:

  1. In the GCP Console, go to the VM Instances page:

    Go to the VM Instances page

  2. Select the checkbox next to the instance name you created earlier (crdhost).

  3. Click the Delete button at the top of the page:

    Deleting the VM instance

    It takes a few moments to delete your instance.

Deauthorize Chrome Remote Desktop for the 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.

  1. On your local computer, go to the Chrome Remote Desktop Remote Device list (Beta) web site.

  2. Click delete next to the instance name:

    Disabling the remote device in Chrome

  3. Click OK to confirm that the remote device connection should be disabled.

What's next

Was this page helpful? Let us know how we did:

Send feedback about...