вторник, 13 октября 2026 г.

WSL + буфер обмена

 Если поставить WSL, то штатно работает буфер обмена винь-линь. Но не при запуске claude из консоли, например.

Claude Code перехватывает мышь, поэтому выделение идёт через его собственный механизм. Он пишет в Linux-буфер (xclip/wl-copy через WSLg) или через OSC 52, а до Windows это часто не доходит. Решения, от простого к надёжному:

а) Выделять с зажатым Shift. В Windows Terminal Shift+drag отключает захват мыши приложением, и выделение делает сам терминал. Дальше Ctrl+Shift+C или Enter, и текст попадает в буфер Windows. Вставлять лучше через Ctrl+Shift+V или правый клик: обычный Ctrl+V Claude Code может перехватывать для вставки картинок.

б) Если WSLg-буфер «застрял», иногда помогает wsl --shutdown из PowerShell, потому что синхронизация буфера у WSLg периодически ломается.

в) Подменить xclip/wl-copy, чтобы любые копирования из Linux шли в Windows. Лучше всего через win32yank.exe. Он корректно работает с UTF-8, а clip.exe ломает кириллицу.

# win32yank.exe положить, например, в /usr/local/bin и сделать chmod +x 

mkdir -p ~/.local/bin 

cat > ~/.local/bin/xclip <<'EOF' 

#!/bin/bash

# минимальная обёртка: -o = вставка, иначе копирование 

if [[ " $* " == *" -o "* ]]; then win32yank.exe -o --lf; else win32yank.exe -i --crlf; fi EOF

cat > ~/.local/bin/wl-copy <<'EOF'

#!/bin/bash

win32yank.exe -i --crlf

EOF

cat > ~/.local/bin/wl-paste <<'EOF'

#!/bin/bash

win32yank.exe -o --lf

EOF

chmod +x ~/.local/bin/{xclip,wl-copy,wl-paste}

# ~/.local/bin должен быть в PATH раньше /usr/bin

Проверка: echo тест | wl-copy, затем Ctrl+V в Блокноте. После этого /copy в Claude Code (копирование последнего ответа) и копирование выделением тоже должны уходить в Windows.

Далее будет ошибка "cannot execute binary file: Exec format error":

"systemd включён (systemd=true), а записи WSLInterop нет. При старте systemd-binfmt её затирает."

Чиним так:

# 1. Зарегистрировать сейчас 

sudo sh -c 'echo :WSLInterop:M::MZ::/init:PF > /proc/sys/fs/binfmt_misc/register'

# 2. Проверить 

powershell.exe -NoProfile -Command 'echo ok' 

# 3. Закрепить, чтобы systemd восстанавливал запись при каждом старте 

echo ':WSLInterop:M::MZ::/init:PF' | sudo tee /usr/lib/binfmt.d/WSLInterop.conf

Для надёжности стоит явно включить interop в /etc/wsl.conf, добавив в конец файла:

[interop]

enabled=true

appendWindowsPath=true

После этого в PowerShell на Windows выполните wsl --shutdown, откройте WSL и проверьте, что после перезапуска всё работает. Так же, это даст возможность показывать win-приглашения, например для ввода пароля через sudo -A ls (это настроим дальше)

Но это половина дела. Теперь нужно настроить копирование через win32yank.exe:

cd /tmp 

curl -LO https://github.com/equalsraf/win32yank/releases/download/v0.1.1/win32yank-x64.zip 

unzip -o win32yank-x64.zip win32yank.exe 

chmod +x win32yank.exe 

sudo mv win32yank.exe /usr/local/bin/

Проверьте работу (interop к этому моменту должен быть уже починен):

echo "тест кириллицы" | win32yank.exe -i --crlf # затем Ctrl+V в Блокноте 

win32yank.exe -o --lf # скопируйте что-нибудь в Windows и выполните




Комментариев нет:

Отправить комментарий