English translation below.
VS Code の Remote Development,便利ですね.
VS Code のターミナルで作業してて GUI が使いたくなったとき,通常の手順で使おうとしたら使えなかったので,なんとかした記録です.
1. 前提と環境
- Windows 10
- VS Code 1.38.1
- Remote Development 0.39.6
- Xming 6.9.0.31
- Ubuntu 18.04 (WSL)
- OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017 (WSL)
普段は WSL で DISPLAY 環境変数を設定して ssh すれば X Window が使えます.
$ export DISPLAY=localhost:0.0
$ ssh server -X
$ xclock
ですが VS Code の Remote Development 上では DISPLAY 環境変数が設定されていないので,X 転送できません.
$ xclock
Error: Can't open display:
2. x11 転送してくれる bat ファイルを作る
さて,なぜ VS Code のターミナルで X Window が使えないのかというと,VS Code はWSL 側では無く Windows 側の ssh コマンドを使って接続しているからです.なので Windows 側で DISPLAY を設定する必要があります.
しかし,Windows側の ssh コマンド(open ssh)では DISPLAY 環境変数を翻訳してくれる機能が無いので失敗してしまいます.今回は WSL の ssh コマンドを使って運用でカバーします.
WSL で DISPLAY 環境変数を設定して,ssh コマンドを叩くバッチファイルを作ります.
@wsl export DISPLAY=localhost:0.0; ssh %*
バッチファイルは実行するコマンドをそのまま echo する仕様なのですが,@から始まる行はされません.バグるのが怖いので付けます.
ここで一旦このバッチファイルで SSH, X11 転送ができるか確認してください.
> x11ssh server -X
$ xclock
例えば .ssh/config
を設定していて Remote Development に config を読み込ませている場合,Windows 側と WSL 側の config を揃えておく必要があります.例えば私は git で config を管理しているのでこのあたりの不整合は発生しません.
3. Remote Development の設定を変更
通常,Remote Development ではシステム標準の ssh コマンドを使いますが,このバッチファイルを変わりに使ってもらうようにします. Ctrl + ,
で設定を開き, Remote.SSH: Path
に先程のバッチファイルのパスを設定します.
An absolute path to the SSH executable. When empty, it will use "ssh" on the path or in common install locations.
このとき,他のオプションによってはうまくいかない場合があります.例えば Remote.SSH: Use Local Server
を有効にしたらうまくいきませんでした.私の環境では,デフォルト設定から Path
のみを変えた状態ならば成功しました.
この状態で X11 アプリを叩いて開ければ成功です.
$ xclock
#4. 最後に
うちではうまく行かなかったよ・更にこうしたらできたよとかあればコメントください.
あと役に立ったよ! という場合はぜひ いいね
して Twitter 等で広めていただけると嬉しいです.
#5. English TL;DR
Create a batch file for starting SSH using X11 and set it to Remote.SSH: Path
of Remote Development.