OSC 52 and Platform Clipboard
OSC 52는 program이 terminal emulator에 Base64로 encoding한 selection data를 보내 clipboard를 설정하거나 조회하는 terminal control sequence다. GUI가 없는 SSH server에서 client PC의 clipboard로 text를 복사할 때 유용하다.
OSC 52
Sequence
ESC ] 52 ; Pc ; Pd BEL
Pc: selection 지정자다.c는 clipboard,p는 primary selection이다.Pd: 일반적으로 RFC 4648 Base64로 encoding한 data다.- terminator는
BEL또는 terminal 구현에 따라ST를 사용한다. Pd가?이면 clipboard 조회 요청이지만, 보안상 많은 terminal이 읽기를 막거나 사용자 승인을 요구한다.
Copy from stdin
osc52_copy() { local data data=$(base64 | tr -d '\r\n') || return printf '\033]52;c;%s\a' "$data" } printf '%s' 'remote text' | osc52_copy
SSH and tmux
OSC 52는 remote process → SSH stream → local terminal emulator 순서로 전달된다. local terminal이 OSC 52를 지원하고 write를 허용해야 한다.
tmux에서는 version과 terminal capability에 따라 다음 server option을 사용한다.
set -s set-clipboard external
적용 뒤에는 tmux show -s set-clipboard와 tmux info의 Ms capability를 확인한다. terminal 지원이 없거나 중간 계층이 sequence를 제거하면 clipboard가 갱신되지 않는다.
Windows / WSL: clip.exe
clip.exe는 Windows clipboard로 표준 입력을 보내는 Windows 명령이다. WSL에서 Windows interop이 활성화되어 있으면 Linux pipeline 끝에서 사용할 수 있다.
printf '%s' 'Message' | clip.exe uname -a | clip.exe
clip.exe는 copy 방향만 제공한다.- Windows clipboard에서 읽기는 PowerShell의
Get-Clipboard같은 별도 기능이 필요하다. - 일반 Linux SSH server에서
clip.exe를 실행해 SSH client의 Windows clipboard를 바꿀 수는 없다. 이 경우 OSC 52를 사용한다.
macOS: pbcopy / pbpaste
pbcopy는 stdin을 macOS pasteboard에 쓰고 pbpaste는 pasteboard를 stdout으로 읽는다. 기본값은 general pasteboard다.
printf '%s' 'Message' | pbcopy pbpaste pbpaste > clipboard.txt
pbcopy -pboard general: 쓸 pasteboard를 명시한다.pbpaste -pboard general: 읽을 pasteboard를 명시한다.pbpaste -Prefer txt|rtf|ps: 먼저 찾을 data type을 지정한다.: 기존 호환용 legacy option이다.pbpaste -Prefer asciitxt를 사용한다.- encoding은 locale 환경 변수의 영향을 받으므로 UTF-8 locale을 권장한다.
pbcopy와 pbpaste도 remote Linux server에는 존재하지 않는다. macOS Terminal에서 local shell을 실행할 때 사용하고, SSH remote → macOS clipboard에는 terminal의 OSC 52 지원을 사용한다.
Troubleshooting
- escape 문자열이 화면에 보임: terminal이 OSC 52를 지원하지 않거나 sequence 전달이 깨졌다.
- tmux 안에서만 실패:
set-clipboard,Mscapability, terminal feature 설정을 확인한다. - 짧은 text만 성공: terminal 또는 multiplexer의 OSC 52 payload 제한을 확인한다.
- clipboard read가 실패: OSC 52 read는 정보 유출 위험 때문에 write보다 더 자주 차단된다. local platform의 paste 명령을 사용할 수 있는 context인지 검토한다.
- SSH client가 Windows/macOS여도 platform 명령이 없음: command는 remote Linux에서 실행된다. OSC 52 또는 명시적인 client-side workflow가 필요하다.
Help
clip.exe /? man pbcopy man pbpaste tmux show -s set-clipboard
See Also
History
- codex:: 2026-07-19 SSH용 OSC 52와 Windows clip.exe, macOS pbcopy/pbpaste의 역할과 제약을 정리했다.