はじめに
WSL2上で開発を進めるのにあたって、WindowsとWSL2をまたいだ開発環境、例えばIntelliJをWindows側で起動、ファイルはすべてUbuntu(WSL2)上にある場合、2つのファイルシステム間のファイルのやり取りが非常に遅いため、IntelliJ上のファイルのインデックスやコンパイルなど、許容しがたい遅延が発生してしまい、現実的に使い物にならない。
そのためJetBrains Gateway(2023/9時点ではBeta機能)を利用して、WSL2側にIntelliJをHeadlessとインストールし、Windows側のIntelliJからアクセス(WSL2側に対してVSCodeを使う場合の、VSCodeのアプローチと同等)する方法で問題ない応答速度で開発できていた。
しかし最近のWindows11のアップデートの影響でGateway (JetBrains製品全般)がWSL上の仮想インスタンスを認識しなくなってしまい、暫定的にWSL上から直接IntelliJを起動する方法を模索した。詳しくはこのチケットを参照。
この記事ではWSL2上から直接IntelliJを使う方法を説明する。
筆者環境
- Windows 11 Pro
- Linux 5.15.123.1-microsoft-standard-WSL2 (Ubuntu 22.04)
- Zshを利用
VcXsrvのインストール(Windows)
- SourceForgeから、実行ファイルをダウンロード
- 設定項目の選択ダイアログが出てくるが、すべてデフォルトのまま選択して次へ、でインストール (詳細はこの記事を参照)
- デスクトップに以下のコマンドを起動するショートカットを作成
"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -ac -terminate -lesspointer -multiwindow -clipboard -wgl -dpi auto
- このショートカットをクリックしてVcXsrvを起動。
Ubuntuの設定(WSL2)
- Ubuntuを最新にアップデート
sudo apt update sudo apt upgrade
- ディスプレイ設定
以下のコマンドを実行。自動的に起動したVcXsrvからディスプレイ情報を取得してくれる。export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0
- 試しにターミナルで以下のコマンドを実行して、
xeyes
が起動するか確認。xeyes
- xeyesが存在しない場合は以下のコマンドでインストール
sudo apt install x11-apps
ここまで正しく設定されていれば、xeyes
が起動するはず。
JetBrains Toolboxのインストール(WSL2)
-
JetBrainsのToolbox AppをUbuntuにインストールするだけの記事を参考にして、jetbrains-toolbox-installを利用して、JetBrains Toolboxをインストール
$ curl -fsSL https://raw.githubusercontent.com/nagygergo/jetbrains-toolbox-install/master/jetbrains-toolbox.sh | bash
- インストール後に出るプロンプトに従って、自分のシェルのPATHに以下を追加すること。
PATH="$PATH:$HOME/.local/bin"
起動
インストールした後は、以下の手順で起動できる。
- Windows上に作ったVcXsrvのショートカットを起動
- ターミナルで、このプロンプトを実行してDISPLAY変数を設定する。筆者は起動コマンドシェルを作って、コマンドとして実行できるようにした。
- 続いて
Ubuntu
のターミナルで以下をタイプするとXWindow内にjetbrains-toolbox
JetBrains Toolbox
が立ち上がる - JetBrains Toolbox内で、IntelliJを選択、起動すると自動的にインストールが始まり、IntelliJが起動される。
まとめ
上記の方法でうまく行くのだが、XWindowsを起動するタイミングによって正しくToolboxやIntelliJが立ち上がらない状況に遭遇している。その際に自分がやっているのは
- 再起動
- Ubuntuのターミナルがアクセスできるまで待つ。
- 立ち上がってからこのプロンプトを実行してDISPLAY変数をセット
- jetbrains-toolbox コマンドを実行
という手順で動かした。一度XServerを落とす(起動しているターミナルを落とす)と、ディスプレイへの接続などができずToolboxやIntelliJの画面が立ち上がってこなくなったりした。
ということで結論としては、
ベストなアプローチ
Windows側でJetbrain Gatewayを利用して、VSCodeと同等のWSL2側をHeadless、Windows側をアプリケーションのフロントとした開発方法を利用する。
緊急避難的にWSL2上でのJetbrain製品直接起動を利用
Jetbrain製品をWSL2上でGUIアプリとして直接起動は可能だが、いろいろな制約やGUIの縮退がみられるため、現場で利用するにはあくまで緊急避難的な用途と考えた方がよさそう。