やりたいこと

自宅にある機械学習用PCのJupyter Notebookに外出先からアクセスしたい。

実現方法

実現の為に検討した手段は以下の3案。

(案1)VPNを構築しProxy経由でアクセスする(却下)
特定のサービスに依存しないので、スキル的に可能ならこれが一番良いと思うんですが、VPNとか証明書とかわからないし、学習の時間も掛けたくない。無知のままサイトを見ながら手順通りやってもいいけど意味を理解してないと再現性が低そう。環境を壊すリスクもあり。というわけで却下。

(参考サイト)
GlobalなIPを持ってないけど自宅サーバを公開したい!(構成編)

(案2)Chromeリモートデスクトップでアクセスする(却下)
サービスに依存するけど、Googleならかなりマシ、と思ったらRaspberry piで使えない説が有力なため却下。

(参考サイト)
Chrome リモート デスクトップ
Chrome Remote Desktop is not working
※最終的にVNC cloud accessで実現している。。。

(案3)TeamViewerでアクセスする(採用)
TeamViewerがRaspberry piで使えることも調査済みでしたが、仕方なくこれで実現することにしました。気は進みませんが、背に腹は変えられないし、時間も掛けられないので仕方ありません。個人利用なら無償というのは嬉しい。採用です。

(参考サイト)
TeamViewer for Raspberry Pi(Raspbian, Jessie)
How do I install TeamViewer on my Linux distribution?

作業ステップ

詳細は上記Qiitaの記事に譲りますが、下記ステップで実現できました。※時間があれば追記します。

  1. Raspberry pi 3にPIXEL Desktopをインストール
  2. TeamViewerのアカウント作成
  3. Raspberry pi 3にTeamViewerHostをインストール
  4. クライアントにTeamViewerのChrome拡張をインストール
  5. TeamViewerのWEBサイトにログイン
  6. クライアントをTrustedDeviceとして登録

TIPS

起動ディスクはUSBメモリにする
Raspberry piの起動ディスクにはマイクロSDカードがよく使われますが、常時稼働を考えると心許ないので、USBメモリを選択しました。以前は、マイクロSDカードにインストールした後にUSBメモリに内容をコピーして、設定ファイルを書き換えて、など面倒な作業が必要でしたが、最新のディスクイメージだと直接USBメモリを作成できます。

HOW TO BOOT FROM A USB MASS STORAGE DEVICE ON A RASPBERRY PI 3
Prepare the USB mass storage device
Starting with the 2017-04-10 release of Raspbian you can install a working Raspbian system to a USB mass storage device by copying the operating system image directly onto your USB device, in the same way that you would for an SD card. To perform this step, follow the instructions here, remembering to select the drive that corresponds to your USB mass storage device.

OSイメージをUSBメモリにコピーする方法はいくつかありますが、GUIで簡単にできるEtcherというソフトを使ってUSBメモリを使って起動ディスクを作成しました。

TeamViewerアカウントは事前に取得しておく
インストールした直後にteamviewer initというコマンドを実行するのですが、その際にTeamViewerアカウントを聞かれます。TeamViewerアカウントはTeamViewerのサイトで無料で取得できますので、インストール前に取得しておくことをおすすめします。
TeamViewerアカウントのサインアップ

Raspberry piの解像度はクライアントよりも低めにする
クライアントであるThinkPad X240の解像度が1366x768なのでそれよりも低い解像度にしないと、文字がギザギザになり、読みづらくなります。コーディングする上では、ちょっとつらいかもしれません。クライアントと全く同じ解像度にすると良いのかもしれませんが、ピッタリ同じ解像度が設定になかったので1280x720にしました。

さいごに

外出先からアクセスできないことにかなりストレスを感じていましたが、今回Raspberry pi 3にTeamViewerHostを導入することで自宅のPCにアクセスできる環境が構築できました。