2015年02月13日

Cloud Pi を経由して自宅にある Raspberry Pi のデスクトップにアクセスする方法

突然ですが、Amazon Answers(answers@amazon.com)から届いた「CloudPiで接続しているPasPiでXwindowを起動し、VNCで接続する、ようなことは無理ですよね」という質問について考えてみます。

shitsumon

Cloud Pi、Raspberry Pi のリモート・デスクトップ環境構築方法


昨日の夕方頃だったでしょうか「CloudPiで接続しているPasPiでXwindowを起動し、VNCで接続する、ようなことは無理ですよね」という質問が僕の Amazon アカウント(メール・アドレス)へ届いたのです。

amazon answers


殆どデスクトップを使わない僕は「知らんがな・・・(しかも Amazon が喜ぶだけじゃないの?)」と思いつつ、スルーしていたのですが、質問されてしまうと実現可否がすごく気になる(しかも、相談者さんは不安な状況)・・・、テキスト・ベースのフォームで答えられるほど簡単では無さそうなのでブログで回答してみますよ!

まずは Cloud Pi のセットアップ(日経 Linux 3月号に記事を書いたばかりで詳しくは・・・書けない)。

OS は Rapbian、最低限のセットアップと SSH 接続環境が用意できたらプラネックスのサイト(http://www.planex.co.jp/support/download/cloudpi/)からダウンロードした p2ptunnel_v100.tar.gz を Raspberry Pi にコピーします。 僕は Ubuntu を使っているので scp で。

ubuntu $ scp p2ptunnel_v100.tar.gz pi@[Raspberry Pi Address or Host]:/home/pi


こいつをホームディレクトリの下に作った cloudpi の下に解凍して、

pi@raspberrypi ~ $ mkdir ~/cloudpi
pi@raspberrypi ~ $ tar xvzf p2ptunnel_v100.tar.gz -C /home/pi/cloudpi


cloudpi.conf をエディタで開き、1年間有効な P2P ネットワーク・ライセンスキー(UID)を設定します(クライアントの接続パスワードも自由に変更)。

pi@raspberrypi ~ $  vi /home/pi/cloudpi/p2ptunnel/cloudpi.conf
uid=UID(20char)
password=1234567890


Cloud Pi 起動スクリプトは /etc/init.d 以下にコピー。

pi@raspberrypi ~ $ sudo cp ~/cloudpi/p2ptunnel/cloudpi /etc/init.d
pi@raspberrypi ~ $ sudo chmod 775 /etc/init.d/cloudpi


さあ、Cloud Pi を起動(P2P ネットワークに接続)してみましょう。

$ sudo service cloudpi start
Starting cloudpi... Done.
uid = {your UID}
password={your Password}
username={Planex.co.jp}
Tunnel Version[1040400]
     Calling IOTC_Device_Login() ret = 0, UID[GS8FCY3HZUXBGJHX111A]
P2PTunnelServer_Start Success, I can connected by Internet.
Call P2PTunnelServer_GetSessionInfo ret[0]


お、うまく動いたみたい。 今後自動起動するなら inserv します。

pi@raspberrypi ~ $ sudo insserv cloudpi


次はリモートデスクトップ環境。 ただここで1つ問題があります。 多分、相談者さんは Windows PC を使ってリモード・デスクトップ接続するようなのですが、僕は Ubuntu PC しか無く、対応した Cloud Pi のクライアントがありません(現時点で Cloud Pi 用のクライアントは Windows、Android 版のみ)。

プラットフォーム(OS)に依存せず相談者さんに自信を持って動くことを推奨できる方法・・・であれば、Android を使ってブラウザという共通のランタイム(アプリケーション実行環境)を経由してデスクトップにアクセスする必要がありそうですね!

tightvncserver、screen を Raspberry Pi にインストールしましょう。

pi@raspberrypi ~ $ sudo apt-get install tightvncserver screen


ここで一度、tightvncserver を実行し、ログイン・パスワードを設定しておきます(view-only password は、多分見るだけの権限しかないパスワード)。

pi@raspberrypi ~ $ tightvncserver
You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
xauth:  file /home/pi/.Xauthority does not exist

New 'X' desktop is raspberrypi:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log


ブラウザ経由でデスクトップへアクセスするのには noVNC を使います。 noVNC は WebSocket を使って Xサーバー/クライアント間を仲介する Web アプリケーションみたいですよ。

pi@raspberrypi ~ $ sudo git clone git://github.com/kanaka/noVNC /usr/local/share/noVNC
pi@raspberrypi ~ $ sudo cp /usr/local/share/noVNC/vnc_auto.html /usr/local/share/noVNC/index.html


noVNC サービスを自動起動するなら Dropbox で公開されている vncboot スクリプトを /etc/init.d 以下にインストールしましょう。

pi@raspberrypi ~ $ wget https://dl.dropboxusercontent.com/u/14125489/RaspberryPi/vncboot --no-check-certificate -O - | sudo tee /etc/init.d/vncboot
pi@raspberrypi ~ $ sudo chmod 775 /etc/init.d/vncboot
# enable auto-start.
pi@raspberrypi ~ $ sudo update-rc.d vncboot defaults


とりあえず手動で起動するならこう。

pi@raspberrypi ~ $ sudo service vncboot start
Starting VNC for pi...
A VNC server is already running as :1
...done (VNC)


ちなみに、この vncboot 内で仮想デスプレイの解像度が定義されています(デフォルトで -geometry 1280x800)。

さあ、もう少し。 最後に VNC サーバーと僕らのブラウザを仲介する を noVNC Web プロキシの起動スクリプトをインストール、起動しましょう。

pi@raspberrypi ~ $ wget https://dl.dropboxusercontent.com/u/14125489/RaspberryPi/vncproxy --no-check-certificate -O - | sudo tee /etc/init.d/vncproxy
pi@raspberrypi ~ $ sudo chmod 775 /etc/init.d/vncproxy
pi@raspberrypi ~ $ sudo service vncproxy start
Starting VNC Proxy...
...done (VNC Proxy)
# enable auto-start.
pi@raspberrypi ~ $ sudo update-rc.d vncproxy defaults 98


このスクリプトの中で Web サービスで利用するポート(デフォルトで 80 番)を指定しており、もし、Apache Web サーバーで 80 番ポートが利用済みであれば --listen 値を変更しておく必要があります。

screen -S noVNC -dms noVNC /usr/local/share/noVNC/utils/launch.sh --vnc localhost:5901 --listen 80


これで準備はおしまい。 PC ブラウザから http://raspberry pi アドレス にアクセスしてパスワードを入力するとデスクトップが表示されるはず。

noVNC via Firefox


Cloud Pi を経由して Raspberry Pi へリモート・デスクトップ接続してみる


今僕が使っているスマートフォンは ZenFone 5(+BIG SIM)。 つまり、Android から docomo の LTE 回線を使って Raspberry Pi に接続してみます。

まずは Cloud Pi アプリを起動して、UIDを登録。 スマートフォンのポート 8080 番へのアクセスを noVNC が動いている Raspberry Pi の 80 番へプロキシします。

cloud pi android settings



接続ボタンをタップした後、ブラウザ(ここでは Chrome)の URL へ http://127.0.0.1:8080 と入力してみましょう。

cloud pi android noVNC auth


noVNC の認証ページが表示されましたね!

デスクトップ表示も問題無し。

cloud pi android desktop



タッチ操作でデスクトップの操作も出来ますよ!

cloud pi android desktop wide


英語になりますが、より詳しい説明はこちらをどうぞ(VNC remote desktop via web browser)。

ふー、スッキリした。

kaitou

それでは、また今度。


PLANEX Raspberry Pi対応 IoTスタートアップキットCloud Pi
プラネックス (2014-12-26)
売り上げランキング: 17,220

日経Linux 2015年 03 月号
日経Linux 2015年 03 月号
posted with amazlet at 15.02.13

日経BP社 (2015-02-06)

Posted by netbuffalo at 22:30│Comments(0)TrackBack(0)Raspberry Pi | ネットワーク


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4966910

コメントする

名前
URL
 
  絵文字