Raspberry Piにリモートデスクトップで接続する

前回はRaspberry Pi 3 Model B+にリモート接続しました。これでRaspberry Piにディスプレイを接続せずに使えるようになりました。

前回はリモート接続にSSHとVNCを利用しましたが、今回はリモートデスクトップを使って接続してみたいと思います。

リモートデスクトップ

Windowsには他のPCの画面を表示するリモートデスクトップという機能があります。

リモートデスクトップの接続

この機能をつかってRaspberry Piに接続し、Linuxのデスクトップ画面を表示させようというわけです。

リモートデスクトップはWindowsの標準機能なのでWindowsにVNCビューワーのようなアプリを導入する必要がないのがメリットです。

xrdpのインストール

Raspberry Piを起動してxrdpをインストールします。

GUIが使える場合は、Raspberry Piのメニューで「設定」→「Add / Remove Software」を選択します。

表示されたウィンドウの左上に「xrdp」を入力してリターンキーを押すと「Remote Desktop Protocol (RDP) server」というのが表示されるはずです。

xrdpのインストール

「Remote Desktop Protocol (RDP) server」のチェックボックスをオンにしたら右下の「OK」を選択すればxrdpがインストールされます。

コマンドラインで操作する場合は

$ sudo apt-get install xrdp
$ sudo service xrdp restart

と入力すればOKです。

リモートデスクトップの接続

WSL側の準備ができたのでそれではリモートデスクトップで接続してみます。

Windowsのスタートメニューから「リモートデスクトップ接続」を探して実行します。

次のようなウィンドウが出るので「オプションの表示」を選択しましょう。

リモートデスクトップの接続でオプションを表示

これでリモートデスクトップのオプションが設定できるので「画面」タブを選択します。

画面サイズを調整

「画面の設定」のエリアでリモートデスクトップの画面サイズ(=WSLのデスクトップ画面のサイズ)を設定できます。

Windows画面全体をリモートデスクトップで覆われたくないときはここで画面サイズより小さい解像度を設定しておきます。

設定が終わったら「オプションの非表示」を選択してオプションの設定画面をクローズします。

次のようなウィンドウがでるのでRaspberry PiのIPアドレス(ここでは192.168.10.107としています)と入力して「接続」を選択します。

接続先の入力

Raspberry PiのIPアドレスについては、Raspberry Piのコマンドラインで

$ ifconfig

と入力して調べましょう。

すると次のような警告が出るので、チェックボックスを選択してから「はい」を選択します。

リモートデスクトップの警告

これでリモートデスクトップのログイン画面が表示されるはずです。

「Session」で「XVnc」を選択したあと、Raspberry Piのユーザ名とパスワードでログインします(デフォルトのユーザ名は「pi」です)。

ユーザ名とパスワードを入力

これでRaspberry Piのデスクトップが表示されればOKです。

リモートデスクトップの画面

リモートデスクトップの設定を保存する

動作確認がOKでリモートデスクトップのサイズなどが決まったら設定を保存しておきましょう。

リモートデスクトップの接続を起動して「オプションの表示」を選択したあと「全般」タブを選び、接続設定の「名前をつけて保存」を選択しましょう。

リモートデスクトップの接続を保存

私は「Raspberry Pi.rdp」として保存しました。

今後はこのアイコンをダブルクリックするだけでリモートデスクトップに接続することができます

リモートデスクトップのアイコン

GUIをリモートデスクトップのみにする

これまでの設定でWindowsからリモートデスクトップでRaspberry PiのGUI(デスクトップ画面)を利用できるようになりました。

しかしこの環境ではHDMIに出力するGUI(デスクトップ画面)も有効になっており、Raspberry Piで二つのデスクトップ画面が動いていることになります。

調べてみるとGUI描画を担当するXサーバが2つ実行していることがわかります。

$ ps ax | grep Xorg
  474 tty7     Ssl+   0:03 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
 2206 ?        Sl     0:01 /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp

Xサーバはメモリを食うプログラムなので、Raspberry PiにHDMIでディスプレイを使っていないユーザにはこれはメモリの無駄遣いです。

Raspberry Piにディスプレイを接続しない場合には、HDMI用のGUIは停止してしまいましょう。

Raspberry Piのメニューから「設定」→「Raspberry Piの設定」を選択し、ブートを「CLI」に変更してOKを選択します。

CLIを選択

実は「Raspberry Piの設定」はリモートデスクトップ画面では動作しません。

HDMIディスプレイに表示されているデスクトップか、VNCで表示されているディスプレイで「Raspberry Piの設定」を実行してください。

これでRaspberry Piを再起動するとRaspberry PiではデフォルトではGUIが起動しません。そのため、メモリの消費量がかなり少なくなります。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           927M         39M        805M         11M         82M        828M
Swap:           99M          0B         99M

この状態でリモートデスクトップで接続すると初めてGUIが起動するかたちになります。

基本はSSHでコマンドラインを使い、ときどきGUIを利用するという方にはこの設定の方が良いのではないでしょうか。

HDMIディスプレイのGUIを有効に戻すためには「sudo raspi-config」を実行して「3 Boot Options」→「B1 Desktop / CLI」→「B4 Desktop Autologin」を選択してください。

リモートデスクトップで起動しないアプリの対策

これでリモートデスクトップで必要に応じてGUIが使えるようになりました。

しかし実際に使ってみると「Raspberry Piの設定」などroot権限が必要なアプリが起動しないという問題があることがわかります。

これはアプリの起動時にリモートデスクトップのディスプレイ番号を正しく指定できていないためです。

アプリの起動コマンドを修正しておきましょう。Raspberry Piのメニューから「設定」を開き、「Raspberry Piの設定」を右クリックして「Properties」を選びます。

Propertiesの選択

これでメニューを選択したときに実行されるコマンドを修正することができます。

「デスクトップエントリ」のタブを選んだら、コマンドの欄で「sudo -A」のあとに「-E」を挿入します。

コマンドの編集

「-E」の前後にはスペースを入れることを忘れないようにしてください。

編集が終わったら「OK」を選択しておきます。

これでリモートデスクトップでも「Raspberry Piの設定」が実行できるようになるはずです。

そのほかにもリモートデスクトップでメニューから起動しないアプリがあれば同様に対処できると思います。

まとめ

今回はRaspberry Piにリモートデスクトップで接続できるようにしてみました。

リモートデスクトップで使えるようにすると必要なときだけGUIを有効にすることができ、メモリを効率的に使うことができます。

コンソール中心にRaspberry Piを操作する方は、GUIはデフォルトを無効にして、必要に応じてリモートデスクトップを利用すると良さそうです。