外出先から自宅のUbuntu18.04に接続する(Chromeリモートデスクトップ)

Google Chromeには『Chromeリモートデスクトップ』という外出先から自宅PCなどにリモート接続する拡張機能があります。

今回は外出先のWindowsノートPCから自宅のUbuntu PCに接続できるか試してみました。

f:id:xterm256color:20180720212553j:plain

目次

環境

手順

1. Google Chromeのインストール

とにもかくにもUbuntu 18.04 マシンにGoogle Chromeを入れるところから始めます。

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

インストールが完了したら、Chromeを立ち上げてGoogleアカウントでログインしましょう。

2. Chromeリモートデスクトップのインストール

いくつか手順を踏んでChromeリモートデスクトップをインストールしていきます。

  1. UbuntuにインストールしたChromeChromeのウェブストアを開きます
  2. 「+ CHROMEに追加」からインストールします。
  3. その画面から「アプリを起動」を押すとChromeリモートデスクトップが立ち上がります
  4. マイコンピュータの中にある「利用を開始」を押しましょう。
  5. 「リモート接続を有効にする」を押すとホストインストーラのダウンロードを促されるので、OKを押してダウンロードします。ここでは$HOME/Download/chrome-remote-desktop_current_amd64.debにインストールされたものとします。
  6. 以下のコマンドでインストールは完了です。
cd $HOME/Download
sudo dpkg -i chrome-remote-desktop_current_amd64.deb
sudo apt-get install -f

3. グループへの追加

つぎに、カレントユーザをchrome-remote-desktopグループに追加して再起動します。

sudo usermod -a -G chrome-remote-desktop $USER
sudo reboot

4. Chromeリモートデスクトップの修正

重要です。必ず実施してください。

Ubuntu 18.04で動作させるためにChromeリモートデスクトップを一部修正します。

まずChromeリモートデスクトップのサービスを止めます。

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

つづいてchrome-remote-desktopを開いて編集していきます。

sudo gedit /opt/google/chrome-remote-desktop/chrome-remote-desktop

まず、echo $DISPLAYを手元のマシンで実行してください。画面に:0と表示された場合、FIRST_X_DISPLAY_NUMBER = 20と記載してある場所を以下のように変更しましょう。

FIRST_X_DISPLAY_NUMBER = 0

※一部のUbuntuバージョンではecho $DISPLAY:1を返します。そのときはを FIRST_X_DISPLAY_NUMBER = 1 にしてください

つぎに関数get_unused_display_numberの中のwhile os.path.exists(X_LOCK_FILE_TEMPLATE % display):から始まる2行をコメントアウトします。

  @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

関数launch_sessionを以下のように書き換えます。こうすることで、新しいXセッションを立ち上げる代わりに、すでに立ち上がってるセッションを再利用できます(つまり、ホスト側のデスクトップと同じ画面をクライアント側で見ることが出来るようになります)。

  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

保存してエディタを終了したら、Chromeリモートデスクトップを再起動します。

sudo systemctl restart chrome-remote-desktop.service

5. Chromeリモートデスクトップの有効化

これがホスト側設定作業の最後です。Chromeリモートデスクトップを開いて「リモート接続を有効にする」をクリックします。

開いた画面で6桁以上のPINを設定してください。他のマシンから接続するときの認証に使うことになります。

マイコンピュータの枠内でUbuntuマシンがオンラインになっていたら成功です。

6. 接続確認

他のPCでChromeを立ち上げて、ホスト側と同じアカウントでログインします。

つぎにChromeリモートデスクトップを開いて、Ubuntuマシンに接続できれば成功です。

うまくいかなかった場合のリセット方法

上の手順でもうまくいかなかった場合はどこかで間違えているかもしれません。以下の手順でリセットして2からやり直しましょう。

ホストプログラムのアンインストールします

sudo systemctl stop chrome-remote-desktop.service
sudo apt-get purge chrome-remote-desktop

Chromeを開いてアドレスバーchrome://apps/を入れます。Chromeリモートデスクトップのアイコンを右クリックして「Chromeから削除」をクリックします。

参考情報

Google Chrome ヘルプを見るとホーム ディレクトリに.chrome-remote-desktop-sessionというファイルを作らないといけない。と書いてありますが今回の手順をとった場合は必要ありません

参考

superuser.com

medium.com