WindowsでVSCode・CursorからGUIアプリケーションを起動する方法
WindowsでVSCodeやCursorを使用している際に、SSH経由でリモートサーバのGUIアプリケーションを起動する方法について説明します。
発生する問題
リモートサーバでGUIアプリケーションを実行しようとすると、以下のようなエラーが発生します:
xeyesの場合
Error: Can't open display:
geeqieの場合
Can't initialize clutter-gtk.
Start Geeqie with the option "geeqie --disable-clutter"
手っ取り早い解決方法
お急ぎの方は以下の2つの手順で解決できます:
1. SSH設定の追加
Windows側のSSH configファイルに以下を追加:
ForwardX11 yes
ForwardX11Trusted yes
2. VcXsrvのインストール
VcXsrv公式サイトからダウンロードして起動
これでGUIアプリケーションが使用できるようになります。
導入
メインPCがWindowsの私は研究作業は基本的にWSLを使っています。内容はssh等がメインですが…
この記事はデュアルブートにするほどのスペックがない、mac買うお金がない、2台持ちにするお金がない学生である著者が、同士に向けて書いています。powerpointの作業も手元にしたいし、Virtualboxでwindows作業は遅いし…で何かと迷うとこではありますね。
wslからsshでリモートサーバにつないだ際にはssh に -Xをつけることでx11-sererが起動しDISPLAYを手元に表示してくれる機能があります。(WSLは若干動画怪しいですが…)
しかし、powershellやコマンドプロンプトではそこがうまくいきません(ssh -XYだといいとかあるけど筆者はうまくいかなかった)
それだけであれば、だからなんだ、powershellなんて普段はほとんど使わんからええよ、と思うかもしれません。
しかしVScodeやcursorは基本的にwindows側にインストールされます。故にこうしたエディタにremote-sshの拡張機能を入れている場合、エディタでsshする際に参照されるのはpowershell側のsshの設定になります。(configもwindows側を参照する)
そのためこうしたエディタでsshするとGUI機能が使えない!となるわけです。
私が調べたサイトでは別途powershllでsshしつつDISPLAY環境変数をexportすればいい!とか書いてたけどこれは面倒すぎるので解決策が見つかったので書いておきます。(個人的にはエディタにターミナルがあるのでそこで完結するべきという思想があります。逆に編集作業を伴わないならwslからsshでいいし簡単な編集なら直接vimでいいよねという思想。)
詳細な解決手順
1. SSH設定ファイルの編集
Windows側のSSH configファイル(通常は ~/.ssh/config
)に以下の設定を追加:
Host {接続名}
User {ユーザー名}
HostName {ホスト名}
ProxyCommand ssh.exe server -W %h:%p
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
ForwardX11Timeout 1h
ServerAliveInterval 300
ServerAliveCountMax 5
2. VcXsrvのインストールと設定
ダウンロード
VcXsrv公式サイトからダウンロード
インストール後の起動
デスクトップに「XLaunch」アイコンが作成されます:
設定手順
以下の画面で設定を進めます:
3. (おすすめ)windowsのスタートアップに入れておく
毎回つながなくてもPC起動時に起動してくれます(常駐アプリ)
4. cursorでsshし、リモートサーバでコードを編集しつつターミナルでxeyesを出してみた
かわいい。