SSH接続先のRaspberryPi(リモートサーバも可能)で実行したGUIをローカルPCに表示させたい!
SSH接続先のでMatplotlibにより表示される図をローカルPCに表示させたい!
これらの方法をMac用 X Window Systemである XQuartzを用いて、わかりやすく紹介します!
ローカルPC(Mac)からRaspberry Piをリモート操作させたい方はご参考ください!!
- ローカルPC:Macbook Air (M1 2020)
- SSH接続先(リモートサーバ側):RaspberryPi 4 Model B
- GUI 構築ライブラリ:tkinter
- 図示ライブラリ:matplotlib
今回生じたエラー
RaspberryPi内に作成した tkinterライブラリを用いてGUIアプリを起動するプログラムを ローカルPCからSSH接続で実行すると、下記のエラーが出てしまします。
_tkinter.TclError: no display name and no $DISPLAY environment variable
DISPLAY環境設定でRaspberryPIのIPアドレスを設定しましたが、上手くいきませんでした。
XQuartz のインストール(Mac側)
SSH接続先で起動したGUIアプリ(以下matplotlibの図示も含む)をローカルPCで表示するためには、X Window System(X11とも呼ばれる)を立ち上げることで解決します。
Mac用のX Window System がXQuartz です。Apple公式サイトでも説明されています。
本記事ではMacターミナルからのインストール方法を説明します。
はじめにHomebrewのインストールが必要です。Homebrewのインストールがまだの方はこちらの記事にそって、インストールお願いします。
Homebrewインストール後は下記の通りにXQuartzをインストールします。
brew cask install 〜 は現在現在無効の為、brew install –cask 〜を使ってください。
brew install --cask xquartz
一度、Macをログアウトし、ログインする。下記の実行でDISPLAY環境変数が設定されていれば成功です。
echo $DISPLAY
/private/tmp/com.apple.launchd.SqGOYkY1R8/org.xquartz:0
SSH接続先(sshd)の設定 RaspberryPi側
RaspberryPi に SSH接続し、configファイル設定変更します。
sudo vim /etc/ssh/sshd_config
コメントアウトになっているので、#は消します。
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
sshdを再起動
sudo systemctl restart sshd
設定変更は以上になります。
MacからRaspberryPiにssh接続
MacからSSH接続する際に、以下のように -XY を追記する必要があります。その後は、RaspberryPi内のプログラムを普段通り実行するのみです。
ssh -XY raspi
筆者がRaspberryPi内に作成していた手書き数字を認識するプログラムをMacで実行してみます。
無事Mac上でGUIアプリが開き、書いた数字を認識して結果を表示してくれました。
matplotlibを用いた図示表示もXQuartzで無事表示できました。
コメント