WSLg Display Issues¶
Electron製アプリ(GUIアプリ)をWSL2/WSLgで実行した際に、マウスクリックの位置がずれる(オフセットが発生する)、画面がぼやけるといった問題が発生することがあります。
これは主に、Windows側のDPIスケーリング(表示倍率)と、WSLg内部の座標変換処理の不整合によって発生する既知の問題です。
主な症状¶
- マウスクリックのズレ: ボタンをクリックしても反応しない、またはカーソル表示位置と実際のクリック判定位置がずれている。
- 操作不能: ウィンドウのタイトルバーやメニューが正しく操作できない。マルチモニタ間でウィンドウを移動すると悪化する。
- 表示のぼやけ: 文字やUIが滲んで見える(スケーリングが正しく反映されていない)。
原因¶
WSLgはWaylandサーバー(Weston)を使用していますが、Windowsホスト側のDPIスケーリング(125%や150%など)と連携する際、座標系の変換に誤差が生じることがあります。
特に、以下の環境で問題が顕著になります:
- 高DPIモニタを使用し、スケーリング倍率が100%ではない(125%, 150%など)。
- マルチモニタ環境で、モニタごとに異なるスケーリング倍率が設定されている。
解決策¶
1. Windowsのスケーリング設定を見直す(推奨)¶
最も確実な解決策は、原因となる「座標変換の複雑さ」を取り除くことです。
-
倍率を100%にする
- すべてのモニタのスケーリング設定を「100%」にします。これによりドットバイドット表示となり、座標ズレは仕組み上発生しなくなります。
- これがあなたのケースで有効だった解決策です。
-
倍率を統一する
- 100%では文字が小さすぎる場合、すべてのモニタで同じ整数倍率(例: すべて200%)に設定します。
- モニタAが100%、モニタBが150%といった「混在環境」が最もバグを引き起こしやすいため、避けるようにします。
2. WSLを再起動する¶
設定変更後や、突然挙動がおかしくなった場合は、WSLの状態を完全にリセットします。
PowerShell(またはコマンドプロンプト)で以下のコマンドを実行してください:
その後、WSLを再度起動してください。
3. アプリケーションの起動オプション調整(上級者向け)¶
Electronアプリ(VS Code, Discord, 一部の自作アプリなど)の場合、起動時のフラグで描画バックエンドを指定することで改善する場合があります。
-
Waylandネイティブを強制する:
- 補足: アプリによっては、ウィンドウ装飾(タイトルバー)が消える場合があるため
--enable-features=WaylandWindowDecorationsも併用します。
- 補足: アプリによっては、ウィンドウ装飾(タイトルバー)が消える場合があるため
-
X11バックエンドを使用する:
- Waylandでズレる場合、明示的にX11(XWayland)経由で動かすと、座標は合うようになることがあります(ただし、表示が少しぼやける可能性があります)。
関連資料(一次情報)¶
- Microsoft WSLg Architecture - アーキテクチャ解説
- GitHub Issue #935: Mouse cursor offset - 座標ズレに関する報告
- Chromium Issues: Wayland Fractional Scaling - Chromium/Electron側の課題