こんにちは!こー(@910zKoh)です。
Contents
今回の目的
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の場合
リモート接続の方式
先人たちが残した記事等を見るとラズベリーパイにリモートデスクトップ接続するには、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の公式ドキュメント(英語)は以下のとおりです。
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サーバーのデフォルトの認証方式に対応していないようです。
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です。
さきほど作成したプロパティをダブルクリックします。
認証画面が表示されるのでパスワードを入力します。
無事接続できました。
コメント