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를 복사할 때 유용하다.

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이 읽기를 막거나 사용자 승인을 요구한다.
osc52_copy() {
  local data
  data=$(base64 | tr -d '\r\n') || return
  printf '\033]52;c;%s\a' "$data"
}
 
printf '%s' 'remote text' | osc52_copy
terminal 출력은 원격 program이 local clipboard를 변경하게 만들 수 있다. 신뢰하지 않는 host의 출력, log, binary를 그대로 terminal에 표시할 때 주의하고 terminal의 OSC 52 write/read 허용 정책을 확인한다. terminal과 multiplexer별 payload 길이 제한으로 긴 내용이 잘릴 수도 있다.

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-clipboardtmux infoMs capability를 확인한다. terminal 지원이 없거나 중간 계층이 sequence를 제거하면 clipboard가 갱신되지 않는다.

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를 사용한다.

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을 지정한다.
  • pbpaste -Prefer ascii: 기존 호환용 legacy option이다. txt를 사용한다.
  • encoding은 locale 환경 변수의 영향을 받으므로 UTF-8 locale을 권장한다.

pbcopypbpaste도 remote Linux server에는 존재하지 않는다. macOS Terminal에서 local shell을 실행할 때 사용하고, SSH remote → macOS clipboard에는 terminal의 OSC 52 지원을 사용한다.

  • escape 문자열이 화면에 보임: terminal이 OSC 52를 지원하지 않거나 sequence 전달이 깨졌다.
  • tmux 안에서만 실패: set-clipboard, Ms capability, 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가 필요하다.
clip.exe /?
man pbcopy
man pbpaste
tmux show -s set-clipboard
  • codex:: 2026-07-19 SSH용 OSC 52와 Windows clip.exe, macOS pbcopy/pbpaste의 역할과 제약을 정리했다.
  • /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/linux/cli/clipboard/osc52/ko.txt
  • 마지막으로 수정됨: 2026/07/19 03:33
  • (바깥 편집)