blob: 841288a683ae2a2e87b7c7b8b6052a0ed39d1ba8 [file] [log] [blame] [view]
andybons222c4ee2015-08-25 16:51:031# Chromoting Build Instructions
andybons3322f762015-08-24 21:37:092
andybons222c4ee2015-08-25 16:51:033Chromoting, also known as
4[Chrome Remote Desktop](https://support.google.com/chrome/answer/1649523),
5allows one to remotely control a distant machine, all from within the Chromium
6browser. Its source code is located in the `remoting/` folder in the Chromium
7codebase. For the sake of brevity, we'll assume that you already have a
8pre-built copy of Chromium (or Chrome) installed on your development computer.
andybons3322f762015-08-24 21:37:099
andybons222c4ee2015-08-25 16:51:0310[TOC]
andybons3322f762015-08-24 21:37:0911
andybons222c4ee2015-08-25 16:51:0312## Obtain API keys
andybons3322f762015-08-24 21:37:0913
andybons222c4ee2015-08-25 16:51:0314Before you can compile the code, you must obtain an API key to allow it to
kelvinp0e8254a2015-10-16 18:04:4715access the federated Chrome Remote Desktop API.
andybons222c4ee2015-08-25 16:51:0316
171. Join the chromium-dev list, which can be found at
18 https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev. (This
19 step is required in order to gain access to the Chromoting API.)
201. Visit the Google APIs console at https://code.google.com/apis/console.
21 1. Use the `API Project` dropdown to create a new project with a name of
22 your choice.
kelvinp0e8254a2015-10-16 18:04:4723 1. Click on `APIs & Auth > APIs`.
24 1. Search for `Chrome Remote Desktop API`.
25 1. Click on the `Chrome Remote Desktop API` search result.
26 1. Click on `Enable API`.
27 1. Click on `APIs & Auth > Credentials`.
28 1. Click on `Add Credentials`.
29 1. Choose `OAuth 2.0 client ID`.
30 1. Choose `Chrome App`.
31 1. Under application id, enter `ljacajndfccfgnfohlgkdphmbnpkjflk`.
andybons3322f762015-08-24 21:37:0932
andybons222c4ee2015-08-25 16:51:0333## Obtain Chromium code
andybons3322f762015-08-24 21:37:0934
andybons222c4ee2015-08-25 16:51:0335If you've already checked out a copy of the browser's codebase, you can skip
36this section, although you'll still need to run `gclient runhooks` to ensure you
37build using the API keys you just generated.
andybons3322f762015-08-24 21:37:0938
sbc9f033f82015-11-26 00:50:52391. [Install the build dependencies](linux_build_instructions_prerequisites.md).
andybons222c4ee2015-08-25 16:51:03401. Install the depot\_tools utilities, a process that is documented at
xiaoyin.l1003c0b2016-12-06 02:51:1741 https://dev.chromium.org/developers/how-tos/install-depot-tools.
andybons222c4ee2015-08-25 16:51:03421. Download the Chromium source code by running:
43 `$ fetch chromium --nosvn=True`
andybons3322f762015-08-24 21:37:0944
andybons222c4ee2015-08-25 16:51:0345## Build and install the Linux host service
andybons3322f762015-08-24 21:37:0946
andybons222c4ee2015-08-25 16:51:0347If you want to remote into a (Debian-based) GNU/Linux host, follow these steps
48to compile and install the host service on that system. As of the time of
49writing, you must compile from source because no official binary package is
50being distributed.
andybons3322f762015-08-24 21:37:0951
andybons222c4ee2015-08-25 16:51:03521. Start in the `src/` directory that contains your checkout of the Chromium
53 code.
541. Build the Chromoting host binaries:
andybons3322f762015-08-24 21:37:0955
andybons222c4ee2015-08-25 16:51:0356 ```shell
Dirk Pranke8bd55f22018-10-24 21:22:1057 $ autoninja -C out/Release remoting_me2me_host remoting_start_host \
andybons222c4ee2015-08-25 16:51:0358 remoting_native_messaging_host remoting_native_messaging_manifests
59 ```
andybons3322f762015-08-24 21:37:0960
Dirk Pranke8bd55f22018-10-24 21:22:1061 (`autoninja` is a wrapper that automatically provides optimal values for the
62 arguments passed to `ninja`.)
63
andybons222c4ee2015-08-25 16:51:03641. When the build finishes, move into the installer directory:
65 `$ cd remoting/host/installer/`
661. Generate a DEB package for your system's package manager:
67 `$ linux/build-deb.sh`
681. Install the package on your system: `$ sudo dpkg -i *.deb`
691. The next time you use the Chromoting extension from your browser, it should
70 detect the presence of the host service and offer you the option to
71 `Enable remote connections`.
72 1. If the Web app doesn't properly detect the host process, you may need to
73 create a symlink to help the plugin find the native messaging host:
74 `$ sudo ln -s /etc/opt/chrome /etc/chromium`
andybons3322f762015-08-24 21:37:0975
andybons222c4ee2015-08-25 16:51:0376(NB: If you compile the host service from source and expect to configure it
77using the browser extension, you must also compile the latter from source.
78Otherwise, the package signing keys will not match and the Web app's OAuth2
79token will not be valid within the host process.)
andybons3322f762015-08-24 21:37:0980
kelvinp0e8254a2015-10-16 18:04:4781## Build and install the Chrome packaged app
andybons3322f762015-08-24 21:37:0982
andybons222c4ee2015-08-25 16:51:0383The Web app is the Chromoting system's main user interface, and allows you to
84connect to existing hosts as well as set up the host process on the machine
85you're currently sitting at. Once built, it must be installed into your browser
86as an extension.
andybons3322f762015-08-24 21:37:0987
andybons222c4ee2015-08-25 16:51:03881. Start in the `src/` directory that contains your checkout of the Chromium
89 code.
901. Build the browser extension (Be sure to replace the substitutions denoted by
91 angled braces.):
andybons3322f762015-08-24 21:37:0992
andybons222c4ee2015-08-25 16:51:0393 ```shell
kelvinp0e8254a2015-10-16 18:04:4794 $ GOOGLE_CLIENT_ID_REMOTING_IDENTITY_API=<client id> \
Dirk Pranke8bd55f22018-10-24 21:22:1095 autoninja -C out/Release remoting_webapp
kelvinp0e8254a2015-10-16 18:04:4796 ```
andybons3322f762015-08-24 21:37:0997
andybons222c4ee2015-08-25 16:51:03981. Install the extension into your Chromium (or Chrome) browser:
99 1. Visit the settings page [chrome://extensions].
100 1. If it is unchecked, tick the `Developer mode` box.
101 1. Click `Load unpacked extension...`, then navigate to
kelvinp0e8254a2015-10-16 18:04:47102 `out/Release/remoting/remoting.webapp.v2/` within your code checkout.
andybons222c4ee2015-08-25 16:51:03103 1. Confirm the installation, open a new tab, and click the new app's
104 Chromoting icon.
105 1. Complete the account authorization step, signing into your Google
106 account if you weren't already.
107
108## Build and install the Android client
109
110If you want to use your Android device to connect to your Chromoting hosts,
111follow these steps to install the client app on it. Note that this is in the
112very early stages of development. At the time of writing, you must compile from
113source because no official version is being distributed.
114
1151. Follow all the instructions under the `Getting the code` and
sbc9f033f82015-11-26 00:50:52116 `Install prerequisites` sections of:
117 https://www.chromium.org/developers/how-tos/android-build-instructions
andybons222c4ee2015-08-25 16:51:031181. Move into the `src/` directory that contains your checkout of the Chromium
119 code.
Dirk Pranke8bd55f22018-10-24 21:22:101201. Build the Android app: `$ autoninja -C out/Release remoting_apk`
andybons222c4ee2015-08-25 16:51:031211. Connect your device and set up USB debugging:
122 1. Plug your device in via USB.
123 1. Open the Settings app and look for the `Developer options` choice.
124 1. If there is no such entry, open `About phone`, tap `Build number`
125 7 times, and look again.
126 1. Under `Developer options`, toggle the main switch to `ON` and enable
127 `USB debugging`.
1281. On your machine and still in the `src/` directory, run:
129 `$ build/android/adb_install_apk.py --apk=out/Release/apks/Chromoting.apk`
1301. If your Android device prompts you to accept the host's key, do so.
1311. The app should now be listed as Chromoting in your app drawer.
132
133See the [chromoting_android_hacking.md] guide for instructions on viewing the
134Android app's log and attaching a debugger.