WSLの既定ユーザーを自動切り替えしてエディタに接続する方法

に公開

開発エディタからWSL環境にアクセスする際、いくつかの課題に直面することがあります。
今回、それらを解決するシンプルな方法を見つけました。
特に「任意のロールに切り替えてからWSLに接続したい」というケースで役立つ内容です。

前提と解決したいこと

WSLで複数ユーザーを併用する現場を想定し、次の二点に課題が集約されると仮定します。

課題1(仮説)

エディタからWSL環境への接続は、ディストリビューションのデフォルトユーザーの権限・環境で固定されます。理由として、VSCode/CursorのWSL接続は初回接続時にwsl.confdefaultで指定されたユーザーでプロセスを起動し、ホームディレクトリを前提にファイルアクセスや拡張機能を動作させます。このため、接続後にターミナル上でsusudo -uでユーザーを切り替えても、エディタ側のバックグラウンドプロセスは別ユーザーに切り替わらず、見えるフォルダや書き込み権限が意図と一致しません。結果として、手動でwsl.confを書き換えてWSLを再起動しない限り、正しいユーザー権限での開発ができず、設定ミスやアクセス拒否、PATH相違によるビルド失敗などの具体的な問題が生じます。

課題2(仮説)

WSLに接続する際に使用するユーザーアカウントを、その場で指定して選択的に起動することが出来ません。理由として、wsl.exeおよびエディタのWSL拡張は接続開始時点で既定ユーザー(wsl.confdefault)のみを参照し、接続ダイアログや起動オプションから任意ユーザーを即時指定する標準手段が提供されていないためです。この制約により、プロジェクト/学習/実験ごとに別ユーザーで作業したいケースでも、接続前に既定ユーザーを書き換えてWSLを再起動する以外に現実的な方法がなく、意図したユーザーで新規セッションを開始できません。結果として、エディタは常に既定ユーザーで立ち上がり、権限や設定が異なる環境を選択的に起動できないという根本的な問題が発生します。なお、wsl -u <user>で任意ユーザーとしてコマンドを実行すること自体は可能ですが、エディタの接続ユーザーは既定ユーザーで決定されます。

事前準備

このツールを使用する前に、以下を満たしてください:

  • Windows で WSL2 が有効化済み
  • Cursorをインストール
  • 対象ディストリビューション(例: Ubuntu-24.04)が存在し、wsl --shutdownを実行できる権限がある
  • 切替先の Linux ユーザーが既に存在する

インストールとセットアップ

ステップ1: プロジェクトディレクトリの作成

まず、WSLアカウント切り替えツール用の専用フォルダを作成します:

~/> mkdir wsl_account
~/> cd wsl_account

ステップ2: account_change.batの作成

以下の内容でaccount_change.batファイルを作成します:

@echo off
chcp 65001 >nul
setlocal EnableExtensions EnableDelayedExpansion

set "ROLE=%~1"
if "%ROLE%"=="" set "ROLE=defalut"

rem write default user to /etc/wsl.conf
wsl -d Ubuntu-24.04 -u root -- sh -lc "printf '[user]\ndefault=%ROLE%\n' > /etc/wsl.conf"

rem apply
wsl --shutdown

rem open Cursor at the user's home
cursor --new-window --folder-uri "vscode-remote://wsl+Ubuntu-24.04/home/%ROLE%"

つかいかた

ロールの切り替え

特定のアカウントに切り替え、Cursorをそのユーザーのホームで起動します(引数省略時はdefalut)。

~/wsl_account/> account_change.bat USERA

処理完了後、Cursor が Ubuntu-24.04/home/USERA を開きます。

既定ユーザー(引数省略時)の変更

スクリプト内の次行を編集して、デフォルトユーザー名を変更できます:

if "%ROLE%"=="" set "ROLE=defalut"

ディストリビューション名の変更

環境のディストリ名が異なる場合は、以下の2箇所のUbuntu-24.04を環境名に置き換えてください:

wsl -d Ubuntu-24.04 -u root -- sh -lc "..."
cursor --new-window --folder-uri "vscode-remote://wsl+Ubuntu-24.04/home/%ROLE%"

まとめ

本記事では、WSL環境でエディタ接続時に発生するユーザー権限の問題を、接続前にwsl.confのdefaultユーザーを変更することで解決する方法を紹介しました。課題は、エディタ(VSCode/Cursor)のWSL接続が接続時にwsl.confで指定されたdefaultユーザーで固定される点にあります。接続後にターミナルでユーザーを切り替えても、エディタ側のバックグラウンドプロセスは切り替わらないため、権限エラーやPATHの不一致が発生します。本スクリプトは、この問題に対して、wsl.confのdefaultを指定ユーザーに書き換え、対象ユーザーのホームディレクトリを開きます。これにより、手動での設定変更や再起動を省略し、意図したユーザー権限で開発環境を即座に利用できます。複数ユーザーを併用する環境でも、プロジェクトごとに適切なユーザーで作業を開始できます。

Discussion