Claude Media
Claude CodeのWSL2で画像貼り付けが効かない原因と回避策

Claude CodeのWSL2で画像貼り付けが効かない原因と回避策

WSL2のターミナルでCtrl+Vの画像貼り付けが無反応になる原因と、Alt+V・ファイルパス指定・wl-clipboardの扱いによる回避策をまとめます。

WindowsでスクリーンショットをコピーしてWSL2上のClaude Codeに貼ろうとすると、Ctrl+Vを押しても何も起きない。あるいは「No image found in clipboard」と出る。これはWSL2とWSLgの組み合わせで報告されている既知の症状です。画像そのものをクリップボードに載せられていないのではなく、貼り付け経路の途中で失敗しています。

先に回避策を挙げます。試す順に次の4つです。

  1. Alt+Vで貼る(端末がCtrl+Vを横取りしているケースに効く)
  2. 画像をファイルに保存し、パスをプロンプトで渡す(確実に動く)
  3. wl-clipboardを外して、PowerShell経路にフォールバックさせる(利用者報告の裏技)
  4. BMPをPNGに変換して、パスで渡す(wl-clipboardを残したまま使える)

症状: 貼っても画像が付かない

Windows 11のWSL2(Ubuntu)で、Windows Terminalまたはwsl.exeからClaude Codeを起動し、Windows側でコピーした画像を貼る場面です。GitHubのissue #61609に上がっている再現手順は次のとおりです。

  • エクスプローラーで画像ファイルをコピー、またはブラウザーで画像をコピーする
  • プロンプトでCtrl+Vを押す
  • 何も入らない、もしくは空や文字化けの文字列だけが入る。画像は添付されない

報告者はVS Codeの統合ターミナルではなく、ネイティブのターミナルで再現したと明記しています。バージョンはv2.1.145で、後続のコメントではv2.1.199、v2.1.238でも同じ症状が出ています。issueのラベルにはplatform:wslとarea:tuiが付いています。

エラー表示は環境によって揺れます。コメントの1つでは、Alt+Vを押すと「Pasting...」と出たあと、何も添付されません。

なぜ貼れないのか: WSLgのクリップボードが画像をBMPで渡す

原因の手がかりは、issue #61609のコメントと、先行する#50552に書かれています。ここからは、報告者が自分の環境で確認した内容で、Claude Code側の公式な説明ではありません。バージョンが上がれば処理順が変わる可能性もあります。

WSLgはWayland側にBMPだけを出す

報告によれば、WSLgはWindowsのクリップボードにある画像をWaylandにだけ橋渡しし、しかも形式はimage/bmpだけです。X11側には画像のターゲットが出ません。xclip -t TARGETS -oはTIMESTAMP TARGETS UTF8_STRING TEXTしか返さなかった、とあります。

コメントで示された確認手順は次のとおりです。

wl-paste --list-types
wl-paste --type image/bmp > /tmp/clip.bmp
xxd -l 4 -s 30 /tmp/clip.bmp

1行目がimage/bmpだけを返し、3行目の出力が03 00 00 00なら、BMPの圧縮方式がBI_BITFIELDSです。このBMPをImageMagickで変換すると通る、という点も同じコメントに書かれています。

wl-paste --type image/bmp | convert bmp:- /tmp/clip.png

手元のWSLで貼り付けが失敗するとき、この3行で自分の環境がBMPを受け取っているかを切り分けられます。

貼り付け処理はBMPで止まり、PowerShell経路に届かない

#61609のコメントは、配布バイナリから抜き出したという保存処理の順序を報告しています。WSLではLinux用のコマンド列の末尾に、PowerShell経由の取得が足されている、という内容です。

順序取得方法WSLgでの結果
1取得方法xclipでimage/pngWSLgでの結果画像ターゲットが無く失敗
2取得方法wl-pasteでimage/pngWSLgでの結果PNGは出ないので失敗
3取得方法xclipでimage/bmpWSLgでの結果画像ターゲットが無く失敗
4取得方法wl-pasteでimage/bmpWSLgでの結果成功(BMPが保存される)
5取得方法powershell.exeでクリップボード画像を取得してPNG保存WSLgでの結果4が成功するので実行されない

チェーンは||でつながっているため、4番が成功した時点で5番のPowerShell経路は走りません。そのあとBMPをPNGへ変換する処理がBI_BITFIELDSのBMPで例外を投げ、例外は握りつぶされて、画面には「No image found in clipboard」と出ます。issue #50552も同じ見立てで、変換失敗が無言で消えるためメッセージが実態と合っていないと指摘しています。

つまり、WSLにWindowsクリップボードへ届く経路が無いわけではありません。動く経路が、使えない形式を返す手前の分岐に先を越されています。

公式の位置づけ: WSLではAlt+Vも使える

公式ドキュメントのショートカット表には、画像貼り付けはCtrl+V(iTerm2ではCmd+V)、Windows・WSLではAlt+Vと書かれています。挿入されるのは[Image #N]のチップで、プロンプトの中で「[Image #1]を見て」のように位置を指定して参照できます。WSLではCtrl+VとAlt+Vのどちらも割り当て済みで、端末がCtrl+Vを横取りするならAlt+Vを使うとされています。

ただし、先ほどのコメントのとおり、Alt+Vでも「Pasting...」のあとに何も付かないケースがあります。Alt+Vは入力キーの問題を避ける手段であって、BMP変換の失敗までは避けられません。

回避策1: ファイルに保存してパスで渡す

一番確実なのは、貼り付けを使わないことです。公式の画像の扱い方には、ドラッグ&ドロップ、貼り付けに並んで、Claudeに画像のパスを伝える方法が載っています。例は「Analyze this image: /path/to/your/image.png」です。

WSLからWindows側のドライブは/mnt/c/以下に見えます(Microsoftのドキュメントでは/mnt/c/Users/<user name>/の形で例示されています)。Windowsのスクリーンショット保存先を決めておけば、パスだけを渡せます。

ls /mnt/c/Users/<ユーザー名>/Pictures/Screenshots/ | tail -3

そのうえでプロンプトを次のように書きます。

/mnt/c/Users/<ユーザー名>/Pictures/Screenshots/example.png を見て、
このエラーダイアログの原因を推測して

/mnt/c越しのファイル読み取りは、WSL2のLinux側ファイルシステムより遅くなることがあります。画像1枚なら気にならない範囲ですが、大量に扱うなら、Linux側の作業ディレクトリへコピーしてから渡す運用もあります。

WindowsのWin+Shift+Sで撮った画像はクリップボードに入るだけで、ファイルにはなりません。この方法はスクリーンショットを保存する一手間が要ります。保存せずに済ませたい場合は、後述の回避策3のようにクリップボードのBMPをファイルへ書き出す手があります。

回避策2: wl-clipboardを外してPowerShell経路に落とす

#61609のコメントによると、次の作業で貼り付けが復旧しました。

sudo apt remove wl-clipboard

wl-pasteがPATHに無ければ、保存処理の4番が失敗して5番のPowerShell経路まで進みます。同じ環境・同じクリップボード画像で比べた結果は次のとおりです。

条件使われた経路保存物結果
wl-pasteあり使われた経路4番(image/bmp)保存物3,342,402バイトのBMP結果変換で例外、貼れない
wl-pasteなし使われた経路5番(PowerShell)保存物81,204バイトのPNG結果貼れる

失うのはPythonのPillowが使うImageGrab.grabclipboard()くらいで、コピー側はxclipが引き続き担えます。

注意点が2つあります。

  • wl-clipboardは他のツールが依存していることがあります。外す前にapt removeの確認画面で、一緒に消えるパッケージを見てください
  • 依存を外すだけなので、いつでもsudo apt install wl-clipboardで戻せます

回避策3: BMPをPNGに変換してパスで渡す

wl-clipboardを外したくない場合は、切り分けで使った変換コマンドをそのまま回避策にできます。ImageMagickが入っていなければ、先に導入します。

sudo apt install imagemagick
wl-paste --type image/bmp | convert bmp:- /tmp/clip.png

手順は2つです。Windowsで画像をコピーした直後に上の変換を実行し、できた/tmp/clip.pngのパスをプロンプトに書きます。

/tmp/clip.png を見て、このエラーダイアログの原因を推測して

回避策1との違いは、Win+Shift+Sで撮ってクリップボードにしか無い画像でも、ファイルに書き出せる点です。WindowsのPicturesフォルダーを探しに行く必要もありません。一方、Claude Code自身の貼り付け経路は使わないので、Ctrl+VやAlt+Vの失敗とは無関係に動きます。コマンドのbmp:-は標準入力のBMPを読む指定で、出力先が同じ/tmp/clip.pngなら新しい画像を撮るたびに上書きされます。残しておきたい画像は、ファイル名を変えて書き出してください。撮るたびに変換コマンドを打つ手間は残るため、頻繁に貼るならシェルのエイリアスにしておく手があります。

症状が出ないケースとの切り分け

同じ症状に見えて原因が別のケースがあります。上の手順で整理できます。

確認結果の見方
wl-paste --list-types結果の見方image/bmpが出るならWSLgのBMP経路。上の症状に該当
wl-pasteが無い、または何も出ない結果の見方WSLg以外の経路。PowerShell側の実行可否を疑う
VS Codeの統合ターミナルで貼る結果の見方issueの報告者は、統合ターミナルなら動くはずだと書いている。切り分けの材料になる
Alt+Vを押す結果の見方端末がCtrl+Vを横取りしているだけなら、これで解決する

長いテキストが[Pasted text #1 +120 lines]に畳まれる仕様は画像と無関係で、画像が付かない原因にはなりません。

直っているかどうかを確認する

issue #61609はopenのまま、staleラベルが付いています。先行する#50552はduplicateとstaleのラベルが付いて、not_plannedでクローズされています。#77102も重複として閉じられ、BMP系の報告が行き止まりになりがちだった、とコメントで指摘されています。

自分の環境が直ったかを確かめるには、バージョンを上げたあとで次の順に見ます。

claude --version
wl-paste --list-types

Windowsでスクリーンショットをコピーした直後にCtrl+VまたはAlt+Vを試し、[Image #1]のチップが出れば復旧しています。出なければ、wl-pasteの有無やWSLgの状態を含めて、WSL環境の構成を確認する段階です。導入の全体像はClaude Code WSL2セットアップにあります。

WSL2で起きる別の症状には、空きメモリがあるのにバックグラウンドタスクが止まる「low memory」誤検知があります。こちらも環境変数で回避できます。

まとめ

WSL2で画像貼り付けが効かない主因は、WSLgがWindowsの画像をBI_BITFIELDS形式のBMPでしか渡さず、Claude Code側のBMP変換が失敗して黙って捨てられることだというのが、#61609のコメントの解析です。動く経路(PowerShell)は用意されていても、手前のBMP分岐に先を越されて使われません。

当面の逃げ道は4つです。Alt+Vを試す、ファイルに保存してパスを渡す、wl-clipboardを外す、BMPをPNGへ変換してパスを渡す。確実さで選ぶならファイルパス指定、手数で選ぶならwl-clipboardの削除です。issueはopenのままなので、修正が入ったかどうかは自分の環境でwl-paste --list-typesと貼り付けを試して確かめるのが早いです。

この記事を共有:XはてブLinkedIn