disableWslSessionsでClaude Code DesktopのWSLを組織展開する
Claude Code Desktopは管理端末でWSLセッションを既定オフにします。disableWslSessionsレジストリキーでの有効化と、症状から止まっている関門を探す手順をまとめます。
disableWslSessionsで何ができるか
disableWslSessionsは、Claude Code DesktopのWSLセッションを組織の管理端末で許可するかどうかを切り替えるWindowsレジストリポリシーです。管理端末ではWSLセッションが既定で無効になっているため、このキーをHKLMに配らない限り、WSLを選んだセッションの開始は失敗します。値をfalseか0にすると、管理下の端末でもWSLセッションが開けるようになります。
配布にはClaude Desktop v1.19367.0以降が必須です。それより古いDesktopにキーを配っても効果がないので、アプリの更新が前提になります。
WSLセッションは、リポジトリがディストリビューション内のファイルシステムにあるときに使う選択肢です。Windows側からそのファイルを触るとネットワークファイルシステム経由になり、遅く、ファイル監視も壊れます。セッションごとディストリビューション内で動かせば、どちらも避けられます。
なぜDesktop WSLセッションは既定オフになるのか
Claude Desktopは、たとえばC:\Program Files\ClaudeCode\managed-settings.jsonのような管理設定ファイルがある端末を、組織管理下と検知します。管理下と検知した端末では、WSLセッションを既定で無効にします。
不具合ではなく、管理端末での初期値です。WSLセッションの中で動くClaude Codeは、既定ではLinux側の/etc/claude-code/managed-settings.jsonしか読まず、Windows側の管理設定が届きません。
disableWslSessionsを配布する手順
有効化はWindowsレジストリへの1エントリで終わります。管理者権限のある端末か、MDM経由でHKLM配下に値を書き込みます。
reg add "HKLM\SOFTWARE\Policies\Claude" /v disableWslSessions /t REG_SZ /d false /f
reg query "HKLM\SOFTWARE\Policies\Claude" /v disableWslSessions1行目が書き込み、2行目が配布後の読み戻しです。REG_DWORDで配るなら、/t REG_DWORD /d 0に差し替えます。文字列のfalseでも数値の0でも有効です。
キーの置き場所には2つの落とし穴があります。
ClaudeとClaudeCodeは別のキーです。Claude Codeの管理設定が使うのはClaudeCodeキーで、disableWslSessionsはDesktop自身のポリシーキーであるClaudeの配下に置きます。Claude Code側のポリシーだけを配って、DesktopのWSLゲートには何も届かない事故がここで起きます- HKCUでは効きません。HKCU配下に同じ値を書いてもWSLセッションは有効にならず、管理者権限でのHKLM書き込みが必須です
C:\Program Files\ClaudeCode\managed-settings.jsonは残したままで構いません。HKLMのdisableWslSessionsがfalseであれば、ファイルがあってもDesktopはWSLセッションを許可します。Desktopはセッションを始めるたびにポリシーを読み直すので、配布後にアプリを再起動する必要もありません。
止まっている関門を症状から切り分ける
WSLセッションが開けない原因は、Desktopの3つの関門のどれかにあります。ユーザーの画面に出る症状と、管理者が見る場所を上から順に突き合わせます。
どの関門で止まっているかを上から探す
- 1
Desktopで Claude Code 自体が使えない
管理コンソール(admin settings)のCode in the desktopが関係します。このトグルは、組織のユーザーがDesktopアプリでClaude Codeにアクセスできるかどうかを決めます。ここで止まっているなら、以降のキーを調べる前に管理コンソールを見ます。
- 2
Localもグレーアウトしている
disableDesktopLocalSessionsがtrueです。環境ドロップダウンのLocalが選べず、ツールチップには組織が無効にした旨が出ます。WindowsではWSLの項目も同じようにグレーアウトします。既存のローカルセッションを続けようとすると、この端末ではローカルセッションを使えない旨のメッセージに変わります。新しいセッションの既定は、最初に設定されたSSH接続になります。 - 3
Localは選べるが、WSLを選ぶと失敗する
disableWslSessionsの領分です。ディストリビューションを選ぶとデバイスが管理されている旨のメッセージが出て、セッションの開始が失敗します。レジストリの値はこの関門だけを開けます。
ログで拒否の理由コードを読む
レジストリを配ったのに特定の端末で拒否が続くときは、その端末のDesktopログに理由が残っています。
main.logで拒否の理由を読む
- 1
ログを取り出す
端末のDesktopでHelp > Troubleshooting > Show Logs in Explorerを開きます。ログフォルダーのコピーがDownloadsに保存されます。
- 2
main.logを検索する
コピーの中の
main.logを、[wslPolicyGate] denying WSL sessionで検索します。 - 3
カッコ内の理由を読む
メッセージの末尾に、拒否理由がカッコ付きで続きます。たとえば
(cli-file-present)が付いていれば、管理設定ファイルの存在が引っかかっています。
.exeインストーラーでDesktopを入れた端末なら、コピーを待たずに%APPDATA%\Claude\logs\main.logを直接開いても同じ内容が読めます。
disableDesktopLocalSessionsとの違い
disableDesktopLocalSessionsは、WSLに限らず端末上で動くCodeセッションを止めるキーです。SSH接続先とクラウドセッションは残り、デスクトップアプリがこのキーを読みます。ターミナルのCLIは無視します。
止める範囲で選ぶ
WSLだけ絞る
Windowsでローカルセッションは許可しつつ、WSLだけを使わせない運用向けです。disableDesktopLocalSessionsには触れず、レジストリのdisableWslSessionsだけを扱います。
ローカル全体を止める
開発はSSH先の開発機やクラウドで行い、手元の端末では動かさない運用向けです。sshConfigsで接続先を配り、sshHostAllowlistで行き先を絞る使い方とセットになります。
2つのキーは性質がかなり違います。
| 観点 | disableDesktopLocalSessions | disableWslSessions |
|---|---|---|
| 配布経路 | disableDesktopLocalSessionsmanaged settings(JSON) | disableWslSessionsWindowsレジストリ(HKLM) |
| 必要バージョン | disableDesktopLocalSessionsClaude Desktop v1.37937.0以降 | disableWslSessionsClaude Desktop v1.19367.0以降 |
| 有効な値 | disableDesktopLocalSessionsJSONのブール値trueだけ | disableWslSessionsREG_SZのfalseまたはREG_DWORDの0 |
| 値を誤ったとき | disableDesktopLocalSessions文字列"true"や1は無効(警告がログに出る) | disableWslSessionsHKCUに書いた値は無視される |
disableDesktopLocalSessionsは、managed settingsに次の1行を置けば有効になります。
{
"disableDesktopLocalSessions": true
}このキーがtrueの端末では、同じ端末へ戻るSSH接続も開始できません。
wslInheritsWindowsSettingsとの役割の違い
名前の似たキーがもう1つあります。役割は別です。
| 観点 | disableWslSessions | wslInheritsWindowsSettings |
|---|---|---|
| 制御する対象 | disableWslSessionsWSLセッションを開始できるかどうか | wslInheritsWindowsSettingsWindows側の管理設定をWSLへ継承させるかどうか |
| 置き場所 | disableWslSessionsHKLM\SOFTWARE\Policies\Claude | wslInheritsWindowsSettingsHKLM\SOFTWARE\Policies\ClaudeCodeかC:\Program Files\ClaudeCodeのファイル |
| 未設定のとき | disableWslSessions管理端末でWSLセッションが開始できない | wslInheritsWindowsSettingsセッションは開くが、Windows側のポリシーがWSL側に届かない |
disableWslSessionsが「開けるかどうか」の門だとすれば、wslInheritsWindowsSettingsは開いたセッションに効かせるポリシーの経路を決めます。WSLは既定で/etc/claude-codeのファイルしか読まないので、Windows側のレジストリとC:\Program Files\ClaudeCodeのポリシーを及ぼすには、wslInheritsWindowsSettings: trueをそのどちらか(管理者専用の経路)に置く必要があります。設定手順と確認方法はwslInheritsWindowsSettingsの仕組みと設定方法にあります。
継承が効いているかは、WSLセッションの中で/statusを実行し、Setting sourcesの行で見ます。Enterprise managed settingsの横のカッコに、選ばれた管理ソースが出ます。レジストリなら(HKLM)、ファイルなら(file)です。この行が無ければ、Claude Codeは管理ソースを見つけていません。
WSLセッションを開いたあとの制約
配布前に、ユーザーへ伝えておく前提があります。
- Windows 10または11のWSL 2が必要で、WSL 1は対象外です。ディストリビューションが1つ以上あり、その中に
gitが入っている必要があります - フォルダーのトラストは、ディストリビューションとフォルダーの組ごとに付与されます。あるディストリビューションで信頼したフォルダーは、別のディストリビューションや、Windows上の同じパスでは信頼されません
- 並列セッション、サイドチャット、差分レビュー、ブランチとPRのステータス、worktreeは動きます
- 統合ターミナル、コネクターとプラグイン、セッションのフォーク、ファイルブラウザーペイン、
@によるファイル補完はまだ使えません
CLI中心のチームなら影響は小さい一方で、統合ターミナルやコネクターに依存する運用では、展開前に周知しておく項目です。
配布後に残りやすいつまずき
disableDesktopLocalSessionsとdisableWslSessionsを両方配ったつもりで、片方だけ効いているケースがあります。配布経路もバージョン条件も違うので、効かない端末ではDesktopのバージョンを先に見ます。
WSLの項目が出ないときは、レジストリより先にWSL自体の状態を疑います。WSLセクションに並ぶのはWSL 2のディストリビューションで、WSL 1は対象外です。
セキュリティ監視を入れている環境では、もう1点あります。WSL 2のユーティリティVMの中のプロセスは、Windows側のエンドポイント検知センサーから見えません。EDR製品のベンダーがLinux向けセンサーを案内していれば、ディストリビューション内で動かし、必要な除外設定も入れます。Claude CodeのOpenTelemetryによるツール実行テレメトリは、WSLでもネイティブでも同じ形で出ます。
まとめ
disableWslSessionsはHKLM\SOFTWARE\Policies\Claudeに置くDesktop自身のポリシーで、WSLセッションを開けるかどうかだけを決めます。開いたセッションに管理設定を効かせるのは別のキーwslInheritsWindowsSettingsなので、WSLを展開するなら両方を配ります。
組織のWindows端末の管理全体はClaude Code組織管理ガイドにあります。Desktop WSLセッション自体の始め方はClaude Code Desktop WSLセッションの始め方とCLI版との違いが扱っています。