Virtual Network Computing

Raspberry PiにRaspbianのSDメモリを装着して、HDMIモニタを接続して起動すれば何の問題もなくデスクトップ画面が表示されるが、見た目はWindowsと同じようでも中身はだいぶ違う。
Linuxのデスクトップ(X-Window)は内部的にクライアントサーバ構成になっていて、クライアントとサーバ間はXプロトコルによって通信が行われるので、ネットワークにXプロトコルを通せばリモートデスクトップとして使用できる。

Raspberry Piのリモートデスクトップでよく使われているVNC(Virtual Network Computing)はそれとは異なる仕組みで、独自のVNCプロトコルによって通信が行われている。これは画面イメージを細分化されたピクセルデータとして送信する仕組みで、負荷が大きくなってしまうがWindowsからでも利用可能となるため、Raspberry Piではこちらの使用例が多い。

よく使用されているTightVNCは、コマンドラインで以下のようにインストールする。

$ sudo apt-get install tightvncserver

画面解像度等を変更したい場合は、起動時のオプションで指定する。初回起動時のみ接続パスワードの設定が要求される。

$ vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

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

VNCで接続するためにはVNCクライアントソフトを用意する必要があるが、WebブラウザにChromeを使用しているのであれば、ChromeにVNC Viewerアプリを追加して使う事もできる。vnc1Raspberry PiのIPアドレスを入力して[Connect]をクリックすると、 暗号化されていない接続という警告が出る。
vnc2[Connect]をクリックして次へ進み、vncserver起動時に設定した接続パスワードを入力する。 vnc3正常に接続されればブラウザにRaspberry Piのデスクトップが表示されるはずだ。
vnc4

注意点がひとつ。
VNCでリモート接続している状態で、ウィンドウを表示するアプリをsudoを付けて実行すると、以下のようなエラーが出る場合がある。

Invalid MIT-MAGIC-COOKIE-1 key

Raspberry PiのGPIOをRPi.GPIOで操作する場合、RPi.GPIOは特権レベルを必要とするのでこれでは困る。Xの認証がらみでこのへんは色々とややこしく、色々と試してみた結果xhostコマンドで以下のように権限を与えてしまうのが最も簡単なようだ。

$ xhost +local:user

VNCでRaspberry Piのデスクトップに接続した時、VNCクライアントを終了させてもVNCサーバ側は終了せずに動き続けているので、再び接続すると終了時の画面が表示される。VNCサーバ側を終了する場合は、以下のように指定する。

$ vncserver -kill :1

最後の1はディスプレイ番号で、vncserverで複数のディスプレイを作成した場合は、終了させたいディスプレイ番号を入力する必要がある。

表示速度はかなり遅いが、HDMIモニタを接続しなくてもデスクトップが使用できるので、ゲームは無理でもGUIを持つアプリのデバッグ等では役に立つと思う。

広告