カテゴリー: Tools

WSL2 / HiDPI環境でGoLand + 日本語入力を快適に使うまでの道のり

はじめに

皆さん、Windows使っていますか~? 私は最近、WindowsでWebアプリケーションの開発をしています。PC向けのWebアプリケーションでは、ほとんどのユーザがWindowsを使っているため、普段からWindowsでの動作が確認できるという安心感があるところが良いですね。また、様々な筐体があり、魅力的なマシンが多いのも良いところです。

WindowsでWeb関係の開発をするときは、WSLとVSCodeもしくはJetBrainsのIDEを組み合わせるのが定番だと思います。いずれのIDEもWSL対応は進んでいるのですが、実際に使ってみると次のような課題があります。

  • VSCodeの課題
    • WSL Remoteのレイテンシが気になる。(クライアント側とWSL側の通信が遅い模様)
    • 特に、TypeScriptでのパフォーマンスが悪くなってしまう。
  • JetBrains系IDEの課題
    • WSL側のプロジェクトを開くには\\wsl.localhost\経由でしか開くことが出来ず、I/Oが遅い。
      この問題はJetBrainsの問題ではなく、WSL側の問題であるため、WSL側での問題解決が待たれる状況。

そこで、私はWSL上でJetBrains系IDEを動作させて、上記の問題を回避したので、その方法を紹介します。
今回の環境はこちらです。

  • ホストマシン: Windows 11 Pro 21H2 Build 22000.651
  • WSL2上のマシン: Ubuntu 20.04 LTS

X Serverの設定

WSLと組み合わせるX Serverソフトとしては、VcXsrvもしくはWSLgが良くある組み合わせです。ただ今回私はVcXsrvを使いました。その理由としてはWSLgに次のような課題があり、今のところ回避策が無いためです。

  • 小数点スケーリング(175%など)に非対応
  • 複数のスケーリングを持つディスプレイを使用している場合に動作が不安定になってしまう

また現状では、問題が発生したときに、 VcXsrvの方が情報量が多いこともあり、今回はVcXsrvを使用します。

VcXsrvの初期設定

まずはVcXsrvをこちらからダウンロードし、インストールしてください。「XLaunch」というアプリケーションがインストールさせるので、こちらを開きます。
XLaunchは、VcXsrvのコンフィグファイルを生成するためのアプリケーションです。

起動すると、ウィザード形式でコンフィグファイルを作成することができるので、次のように設定します。

  1. Select display setting
    • Multiple windowsを選択します
    • Display numberは -1を選択します。
  2. Select how to start clients
    • Start no clientを選択します。
  3. Extra settings
    • Clipboard: オン
      • Primary Selection: オフ (GoLandで選択した文字列が勝手にクリップボードにコピーされてしまう現象が発生してしまうためオフにします。)
    • Native opengl: オン
    • Disable access control: オン
      (代わりに、Additional parametersに -acを指定しても同じです。)

最後に、コンフィグファイルを保存して終了です。

VcXsrvのHiDPI設定

デフォルトでは、VcXsrvをHiDPI環境で起動すると、ぼやけて描画されてしまいます。そこで、vcxsrv.exeのHiDPI設定を上書き、くっきり描画されるようにします。

  1. エクスプローラーでvcxsrv.exeのプロパティを開く (私の環境では C:\Program Files\VcXsrv\vcxsrv.exe にありました。)
  2. 互換性タブ -> 高 DPI設定の変更
  3. 「高いDPIスケールの動作を上書きします。」にチェック
  4. 拡大縮小の実行元に「アプリケーション」指定。

DISPLAY環境変数の設定

ここで一旦WSL2上のUbuntuにログインし、 .bashrcに次の内容を追記します。

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

Ubuntu側のスケーリング設定

GoLandを正しいスケーリングで起動させるには、Ubuntu側のX Resourcesの設定をする必要があります。 ~/.Xresourceに次の内容を書き込みます。

Xft.dpi: 200

これで200%のスケーリングに設定されます。この値は、Windows側で指定しているスケーリングの値と合わせると良いでしょう。

この内容を反映させるには、次のコマンドを実行します。

$ xrdb -merge ~/.Xresource

常にディスプレイを使用する場合は、上記のコマンドを ~/.bashrcに書いておき、自動実行させた方が良いでしょう。

動作確認

ここまで設定できたら、先ほど作成したコンフィグファイルを開き、VcXsrvを起動させてください。Ubuntuで xeyesを実行し、ウインドウが表示されたら成功です。
初回起動時にはファイアウォールの許可画面が表示されるため、アクセスを許可してください。

GoLandのインストールと設定

GoLandはスタンドアロンでのインストールがおすすめです。詳しくはこちらの内容に沿って進めてください。

スクロールの設定(トラックパッドの場合のみ)

トラックパットでのスクロールがうまくいかないため、スクロールアニメーションをオフにします。

  1. GoLandでFind Actionを開く (Ctrl + Shift + A )
  2. Smooth Scroll Optionsと入力し、Enterで開く。
  3. Animated smooth scrollingのチェックを外す

日本語入力環境の用意

uim-mozcでの日本語入力環境を用意します。

uim-mozcのセットアップ

次のコマンドを実行してuim-mozcをセットアップします。

$ sudo apt install uim uim-mozc uim-xim
$ sudo uim-module-manager --register mozc

次に、 ~/.profileに以下を追記して、uim-ximを自動起動させるようにします。

export GTK_IM_MODULE=uim
export QT_IM_MODULE=uim
export XMODIFIERS="@im=uim"
export UIM_CANDWIN_PROG=uim-candwin-gtk
uim-xim &

WSL2を再起動すると、GoLandなどで日本語入力できるようになっていると思います。(デフォルトでは、Shift + Spaceで日本語入力できるようになります。)

キーバインドなどの変更を変更するには uim-pref-gtkコマンドを実行します。ちなみに私は、MacのJISキーボード風に、無変換キーでIMEオフ、変換キーでIMEオンにするため、次の設定をしています。

  • 全体キー設定1
    • [全体オン] に Henkan_Modeを追加
    • [全体オフ] に Muhenkanを追加

ショートカットの作成

GoLandを使うたびにUbuntuのシェルから起動させるのは面倒なので、Windows側にショートカットを作成しておきます。

C:\Windows\System32\wsl.exe bash -c "export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 && echo 'Xft.dpi: 200' > ~/.Xresource && xrdb -merge ~/.Xresource && source ~/.profile && sh /opt/goland-2021.3.3/bin/goland.sh"

'Xft.dpi: 200'の部分は、Windowsのスケーリング設定に合わせて変更してください。私の場合は、日によってスケーリングの異なるディスプレイで作業するため、このショートカットを分けて作成し、使い分けています。

さいごに

WSLで快適にGoLandを使うには、色々な作業をする必要がありました。それでも、WSLというVM上で動いている以上、若干のオーバーヘッドがあるように感じています。今のところは、まだMacの方が開発する方が、すぐに始められるので楽ですね。
WSLgも開発は進んでいるので、今後に期待したいなと思います。

おすすめ書籍

カイザー

シェア
執筆者:
カイザー
タグ: WSL2

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前