WSL2でX11が動くのを利用して、sshポートフォワーディングでラズパイのGUIをWindowsに持ってきてみた
はじめに
前から作ってたカメラのプログラムをいじるのにWindowsは環境の違いでキツくなってきたので、ラズパイに開発環境組んだ。 だけどラズパイにはモニタは付けてないのでそのままでは使えない。
RealVNCで画面転送しようとしたけど、スマホ用に解像度絞ってるのでそのままでは小さくて使いにくい。
そこで、WSL2を通せばWindowsに画面を転送できるんじゃないかと思って試してみた。
ラズパイ側の環境確認
ポートフォワーディングのためにはsshサーバーの設定が必要なので一旦ラズパイにsshで接続して
vim /etc/ssh/sshd_config
で確認。 X11Forwarding yes
があったので、そのままでできるようだ。
WSL2側の環境確認
WSL2でX11が動いてることを確認するためにgeditを起動してみる
$ gedit
Unable to init server: Could not connect: Connection refused
(gedit:29926): Gtk-WARNING **: 09:48:14.906: cannot open display: :0
どうも/tmp/.X11-unix
が正しくないらしく、このままだと画面が出せない。
$ ls -la /tmp
total 52
drwxrwxrwt 13 root root 4096 Dec 27 09:42 .
drwxr-xr-x 19 root root 4096 Dec 27 09:36 ..
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .ICE-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .Test-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .X11-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .XIM-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .font-unix
$ ls -la /tmp/.X11-unix
total 8
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .
drwxrwxrwt 13 root root 4096 Dec 27 09:42 ..
正直いつものことなので、/tmp/.X11-unix
を/mnt/wslg/.X11-unix
のシンボリックリンクに修正してX11が使えるように設定。
$ ls -la /tmp
total 48
drwxrwxrwt 12 root root 4096 Dec 27 09:55 .
drwxr-xr-x 19 root root 4096 Dec 27 09:36 ..
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .ICE-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .Test-unix
lrwxrwxrwx 1 root root 19 Dec 27 09:54 .X11-unix -> /mnt/wslg/.X11-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .XIM-unix
drwxrwxrwt 2 root root 4096 Dec 27 09:36 .font-unix
これでWSL2側の準備は完了。
画面転送
ssh -X pi@192.168.***.***
※WSL2からはラズパイのホスト名が見えなかったので、IPアドレス指定で接続。
-Xオプションを付けてX11ポートフォワーディングを有効にしてWSL2環境からsshで接続。
ssh越しにVSCodeやカメラのプログラムを起動したら、無事に画面がWindowsに出た。
ただ、VSCodeはかなり動作が遅いのでコーディングは辛いかもしれない……