Ubuntu へ Chrome Remote Desktop を使ってMacからリモート接続

# Ubuntu へ Chrome Remote Desktop を使ってMacからリモート接続

## 概要

リモートのLinux機にアクセスするのに、通常のSSH接続でもよいが、
画像を確認したい場合や、IPアドレスが変わり、トンネルを通すのが大変な場合でもリモート接続が可能で便利である。

▼Macからの接続画面
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/3c533cab-01a9-0451-b88f-e3f1f6385671.png)


## インストール
[公式説明](https://support.google.com/chrome/answer/1649523?hl=ja)より抜粋

Chromeのインストール後に公式ページよりChrome リモートデスクトップをインストール。
[Chrome リモートデスクトップ](https://chrome.google.com/webstore/detail/chrome-remote-desktop/gbchcmhmhahfdphkhkmpfmihenigjmpp/related?hl=ja)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/7eef765c-136f-a711-59be-056bb6d930ef.png)

### 64bit Debian パッケージのインストール
64bit Debian パッケージを[こちら](https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb)からダウンロード

### .chrome-remote-desktop-session　の作成

1. ```/usr/share/xsessions/``` で、ご使用のデスクトップ環境の .desktop ファイルを探します。
たとえば Cinnamon の場合は、「cinnamon.desktop」という名前のファイルがあり、次のコマンドが指定されています: ```gnome-session --session=cinnamon```
2. ホーム ディレクトリに .chrome-remote-desktop-session というファイルを作成し、次の内容を指定します。
```exec /usr/sbin/lightdm-session "<YOUR_EXEC_COMMAND>"```
3. ```<YOUR_EXEC_COMMAND>``` の部分を、.desktop ファイルの末尾にあるコマンドに置き換えます。
Cinnamon の場合、正しいコマンドは次のようになります: ```exec /usr/sbin/lightdm-session 'gnome-session --session=cinnamon'```
統一デスクトップの場合は追加のコードが必要です。コマンド全体は次のとおりです: ```DESKTOP_SESSION=ubuntu XDG_CURRENT_DESKTOP=Unity XDG_RUNTIME_DIR=/run/user/$(id -u) exec /usr/sbin/lightdm-session 'gnome-session --session=ubuntu'```
5. 「.chrome-remote-desktop-session」というファイルを保存します。
```

Ubuntu 16.04では以下のようになっている。

```
$ cd /usr/share/xsessions
$ ls
ubuntu.desktop
$ cat ubuntu.desktop
[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
DesktopNames=Unity
X-Ubuntu-Gettext-Domain=gnome-session-3.0
```

ホームディレクトリに```.chrome-remote-desktop-session```を作成する

```
$ vi ~/.chrome-remote-desktop-session
[以下の内容を記載]
exec /usr/sbin/lightdm-session 
DESKTOP_SESSION=ubuntu XDG_CURRENT_DESKTOP=Unity XDG_RUNTIME_DIR=/run/user/$(id -u) exec /usr/sbin/lightdm-session 'X-Ubuntu-Gettext-Domain=gnome-session-3.0'
```


### リモート接続の許可
1. パソコンで Chrome を開きます。
2. 上部のアドレスバーに「chrome://apps」と入力し、Enter キーを押します。
3. Chrome リモート デスクトップ Chrome リモート デスクトップ アプリ をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/65a0c66e-7e56-5598-a590-a3a254c9b539.png)

4. [マイ コンピュータ] の [利用を開始] をクリックします。
5. [リモート接続を有効にする] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/417e4d51-ebae-11bf-7119-b89170fa236a.png)
6. PIN を入力し、同じ PIN を再入力して [OK] をクリックします。
7. 確認ダイアログを閉じます。


## トラブルシューティング
### 壁紙だけが表示される場合
⇢　desktop立ち上げ時の環境設定を変更することでうまく行きます。

### 他のパソコンから見た時にオフライン状態でリモート接続が選択できない。
⇢　別な方法で設定を行い回避します。



```
# システムを停止し、立ち上げ時のスクリプトを編集します。
$ sudo systemctl stop chrome-remote-desktop.service

# 立ち上げスクリプトのバックアップを取ります。
$ sudo cp /opt/google/chrome-remote-desktop/chrome-remote-desktop /opt/google/chrome-remote-desktop/chrome-remote-desktop.org

# 環境変数の確認をします
$ echo $DISPLAY
[値を覚えておく]
```

立ち上げスクリプトを編集していきます。

```
$ sudo vi /opt/google/chrome-remote-desktop/chrome-remote-desktop
```


``` python
FIRST_X_DISPLAY_NUMBER = 20
```

↓ ここに、`echo $DISPLAY`の結果を入れて、現在のディスプレイがリモート接続で見れるようにします。

``` python
FIRST_X_DISPLAY_NUMBER = 0 # 先ほど覚えた値
```



``` python
  @staticmethod
  def get_unused_display_number():
    """Return a candidate display number for which there is currently no
    X Server lock file"""
    display = FIRST_X_DISPLAY_NUMBER
    while os.path.exists(X_LOCK_FILE_TEMPLATE % display):
      display += 1
    return display
```
↓

``` python
  @staticmethod
  def get_unused_display_number():
    """Return a candidate display number for which there is currently no
    X Server lock file"""
    display = FIRST_X_DISPLAY_NUMBER
    # while os.path.exists(X_LOCK_FILE_TEMPLATE % display):
    #   display += 1
    return display
```


``` python
  def launch_session(self, x_args):
    self._init_child_env()
    self._setup_pulseaudio()
    self._setup_gnubby()
    self._launch_x_server(x_args)
    self._launch_x_session()
```

↓　新しくＸセッションを立ち上げる代わりに、すでに立ち上がっているホスト側の画面を利用。

```  python
  def launch_session(self, x_args):
    self._init_child_env()
    self._setup_pulseaudio()
    self._setup_gnubby()
    # self._launch_x_server(x_args)
    # self._launch_x_session()
    display = self.get_unused_display_number()
    self.child_env["DISPLAY"] = ":%d" % display
```

変更し終わったら再起動しましょう

```
$ sudo systemctl restart chrome-remote-desktop.service
```


以下のように接続ができれば成功です。
画面サイズなどは、先ほど編集したスクリプトを触ることで変更が可能です。
▼Macからの接続画面
![image.png](https://qiita-image-store.s3.amazonaws.com/0/69701/3c533cab-01a9-0451-b88f-e3f1f6385671.png)


## 参考
[How to Install Chrome Remote Desktop on Ubuntu 18.04](https://medium.com/@vsimon/how-to-install-chrome-remote-desktop-on-ubuntu-18-04-52d99980d83e)