ラズベリーパイにリモートデスクトップ接続する方法【Windows/Ubuntu】

スポンサーリンク
ラズパイ
スポンサーリンク

こんにちは!こー(@910zKoh)です。

スポンサーリンク

今回の目的

Raspberry Piにリモート接続しGUIで操作可能にする。

本記事の執筆時に使用したラズベリーパイは、Raspberry Pi 2 Model Bですが、Raspberry Pi 3 Model BやB+でも同様の手順でできるはずです。

経緯

今、仕事でラズベリーパイを使ったデモアプリケーションの開発を行っています。普段はSSHでリモート接続してコマンドラインで操作をしていましたが、現在開発しているデモアプリはGUIを持つため、テスト等のためにラズベリーパイのデスクトップ画面を確認する必要がありました。

機材が限られており、ラズベリーパイを操作するために開発マシンで使っているキーボード、マウス、ディスプレイを毎回繋ぎ直していましたが非常に面倒だったので、ラズベリーパイにリモートデスクトップ接続してホストマシンからラズベリーパイのGUIを操作できるようにしました。

前提条件

リモートデスクトップ接続するラズベリーパイと接続元のホストマシンが同じネットワーク上に存在していることを前提としています。本記事ではインターネット経由での接続は想定していません。

動作環境

環境の確認です。

ラズベリーパイ側

ラズベリーパイ側のOSはRaspbian 9.4(Stretch)です。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.4 (stretch)
Release:	9.4
Codename:	stretch

ホスト側

Ubuntuの場合

今回、ホストマシンのOSはUbuntu 18.04を使います。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.1 LTS
Release:	18.04
Codename:	bionic

Windowsの場合

Windowsのバージョン

リモート接続の方式

先人たちが残した記事等を見るとラズベリーパイにリモートデスクトップ接続するには、VNCかRDPというソフトウェア/プロトコルを使っているケースが多いです。このあたりの知識があまりなかったので、それぞれ軽く調べてみました。

Compare RDP vs VNC in Simple Language | Xton Technologies

VNCとは

VNC(Virtual Network Computing)は、ネットワーク上のコンピュータにリモート接続してGUI操作するためのクロスプラットフォームなソフトウェア。オリジナルのVNCはオープンソースで開発され、現在は様々な派生ソフトウェアが存在する。

RDPとは

RDP(Remote Desktop Protocolは、Microsoftが開発したプロトコル。主にWindows同士のリモートデスクトップ接続が目的だが、Linuxサーバーなどでも動作するxrdpなども存在している。

このあたりの歴史的な経緯などは私も詳しくわからないので興味がある方は調べてみてください。
また、VNCもRDPもデフォルトでは通信が暗号化されていない?らしいので、インターネットを介する場合はそれなりの対策が必要となりそうです。

ラズベリーパイ側の準備

さて、VNCとRDPどちらを使用するかという話ですが、今回はVNCを使ってみたいと思います。理由はクロスプラットフォームであることと、ラズベリーパイにはVNCサーバーがあらかじめインストールされているからです。

VNCサーバーのインストール

直前にVNCサーバーがあらかじめインストールされていると言っておきながら・・・、 ラズベリーパイにVNCサーバーがインストールされていないか確認してみます。以下のコマンドを実行したところ、RealVNCというソフトウェアがインストールされていることがわかります。

pi@raspberrypi:~ $ dpkg -l | grep vnc
ii realvnc-vnc-server  6.2.0.29523      armhf        VNC® Server
ii realvnc-vnc-viewer  6.17.731.29523   armhf        VNC® Viewer

Real VNCの公式ドキュメント(英語)は以下のとおりです。

https://www.realvnc.com/en/connect/docs/raspberry-pi.html

VNCサーバーの有効化

VNCサーバーはデフォルトで無効になっているので有効にしてあげる必要があります。VNCサーバーを有効にするにはコマンドラインでraspi-configを行う方法とGUIから行う方法があります。

コマンドライン版

raspi-configで設定します。

SSH等でリモートログインするか、ラズベリーパイに直接ログイン後、ターミナルで以下のコマンドを実行します。

pi@raspberrypi:~ $ sudo raspi-config

「Interfacing Options」を選択。

「VNC」を選択。

「Yes」を選択。

VNCサーバーが有効になりました。

これでVNCサーバーはラズベリーパイを起動するたびに自動的に起動するようになります。

【参考】コマンドラインでVNCサーバーを操作する
今すぐVNCサーバーを起動する
$ sudo systemctl start vncserver-x11-serviced.service
次の起動時(およびそれ以降の起動時)にVNCサーバーを起動する
$ sudo systemctl enable vncserver-x11-serviced.service
VNCサーバーを停止する
$ sudo systemctl stop vncserver-x11-serviced.service
起動時にVNCサーバーが起動しないようにする
$ sudo systemctl disable vncserver-x11-serviced.service

GUI版

また後ほど。

ホスト側の準備

Ubuntu 18.04の場合

Ubuntu 18.04にはデフォルトで『Remmina』というリモートデスクトップクライアントがインストールされています。今回はこれをそのまま使います。

プログラムの一覧から『Remmina』を起動します。

Remminaの設定

画面左上の+ボタンをクリックします。

設定画面が開くので各項目を入力します。

項目 内容
名前 “接続の名前”を付けます。わかりやすい名前にしておきます。
グループ 空欄でOK
プロトコル “VNC – 仮想ネットワークコンピューティング”を選択します。
Pre Command 空欄でOK
Post Command 空欄でOK
サーバー リモートデスクトップ接続するラズベリーパイのIPアドレスを入力します。
リピーター 空欄でOK
ユーザー名 ラズベリーパイにログインするユーザー名を入力します。
User password 後述します。
色数 お好みで。”True Color(32bpp)”あたりを選んでおけばOK
品質 お好みで。”最高(最低速)”あたりを選んでおけばOK
キーボードマッピング 空欄でOK

最初、”ユーザー名”と”User password”をラズベリーパイにログインするためのもの(デフォルトではpi/raspberry)を使っていましたが、それだとエラーになってしまいうまく接続できませんでした。

原因を調べてみたところ、Remmina側がRealVNCサーバーのデフォルトの認証方式に対応していないようです。

http://www.llul.info/entry/2017/03/19/rasbian_%E3%81%A7VNC%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%81%9F%E3%81%AE%E3%81%AB%E3%80%81%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84

Remmina側の認証方式の変更方法がわからないので、RealVNCサーバー側の認証方式の変更を試みます。

RealVNCサーバー側の認証方式変更

コマンドラインで変更する

コチラを参考にしてVNCサーバー側の認証方式を変更して(セキュリティ的にはどうなんだろ?)、VNCサーバーに固有のパスワードを設定します。

以下のコマンドを実行し設定ファイルを開きます。

$ sudo nano /root/.vnc/config.d/vncserver-x11

設定ファイルに以下の行を追加します。”Authentication”の設定がすでに存在する場合は値を書き換えます。

Authentication=VncAuth

以下のコマンドを実行しVNCサーバーのパスワードを設定します。

$ sudo vncpasswd -service

以下のメッセージが表示されれば成功です。

Successfully set "Password" VNC parameter in /root/.vnc/config.d/vncserver-x11
Please note users of third party VNC Viewer projects will be able to connect by
entering the first 8 characters of this password only.

VNCサーバーを再起動します。

$ sudo systemctl restart vncserver-x11-serviced.service
GUIで変更する

デスクトップ環境がない想定でリモートデスクトップ接続をしようとしているのに、その設定にデスクトップが必要とか・・・。

また後ほど。

再度接続

さきほど設定したVNCパスワードを使用して接続設定を行ったところ、無事リモートデスクトップ接続することができました。

とおもったら解像度ががが。

解像度の調整

デフォルトの状態だと解像度がかなり低いので、適当な解像度になるように調整します。

画面サイズの変更はラズベリーパイにログインし、/boot/config.txtを編集します。

VNCで接続するためにRaspberryPiの解像度を修正する

ラズベリーパイにSSHなどでログインし以下のコマンドを実行します。

$ sudo nano /boot/config.txt

開いたファイルの先頭に以下の記述がありますので、指示のとおりhttp://rpf.io/configtxtを見に行きます。

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

画面の解像度を変更するにはhdmi_groupとhdmi_modeを適切な値に設定してあげればいいそうなので、VIDEO OPTIONS IN CONFIG.TXTを参考に、値を調整していきます。

私の環境では以下の設定がベストでした。

hdmi_group=2
hdmi_mode=47

これで解像度の問題も解決。

Windows 10の場合

Windowsの場合は、基本的にお好みのVNCクライアントを使えば良いです。今回は、マルチプラットフォーム(macOSやLinuxでも)で動作するRealVNCというクライアントを使います。

ダウンロードページ

インストーラー形式のもののとかにインストールせずに使えるスタンドアローン版のexeファイルもあります。お好みのものをダウンロード(場合によってはインストール)してください。

VNC Viewerの設定

VNC Viewerを起動して、[File]-[New connection]を選択します。

必要事項を入力します。

接続先のIPアドレスと接続の名前だけ入力すればとりあえずはOKです。

さきほど作成したプロパティをダブルクリックします。

認証画面が表示されるのでパスワードを入力します。

無事接続できました。

参考

コメント