반응형
📌 autocutsel로
PRIMARY↔CLIPBOARD 동기화는 그대로 두고,
그 흐름 위에 \r(CR) 제거 필터를 얹는 방식으로 깔끔하게 해결하는 방법
아래 스크립트는 클립보드가 바뀔 때마다 내용을 읽어 \r 을 제거한 뒤
다시 CLIPBOARD/PRIMARY 모두에 반영합니다. (root GUI 세션/RDP 환경 고려)
1) 준비물 설치
apt update apt install -y autocutsel xclip
2) CR 제거 데몬 스크립트 만들기
/usr/local/bin/clipboard_crfix.sh 생성:
cat >/usr/local/bin/clipboard_crfix.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
# --- RDP 세션에서 DISPLAY/XAUTHORITY 보정 (root GUI 세션 고려) ---
# DISPLAY가 비어있거나 :0이면, xrdp가 쓰는 :10+ 디스플레이로 자동 설정
if [[ -z "${DISPLAY:-}" || "${DISPLAY}" = ":0" ]]; then
for d in /tmp/.X11-unix/X*; do
n="${d##*/X}"
[[ "$n" =~ ^[0-9]+$ ]] && (( n >= 10 )) && export DISPLAY=":$n.0" && break
done
fi
export XAUTHORITY="${XAUTHORITY:-$HOME/.Xauthority}"
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/0}"
mkdir -p "$XDG_RUNTIME_DIR" && chmod 700 "$XDG_RUNTIME_DIR" && chown root:root "$XDG_RUNTIME_DIR" 2>/dev/null || true
# --- 폴링 간격(ms) ---
POLL_MS=200
# 이전 값 해시 저장용
prev_hash=""
# 현재 클립보드 읽기 함수 (비어있어도 정상 취급)
read_cb() {
xclip -selection clipboard -o 2>/dev/null || true
}
# PRIMARY/CLIPBOARD 동기반영
write_both() {
# stdin을 양쪽에 넣음
tee >(xclip -selection primary -i -quiet 2>/dev/null >/dev/null) \
>(xclip -selection clipboard -i -quiet 2>/dev/null >/dev/null) >/dev/null
}
while :; do
# 현재 클립보드(Windows->RDP 경로는 주로 CLIPBOARD로 들어옴)
cur="$(read_cb)"
# \r 제거
fixed="${cur//$'\r'/}"
# 변경되었으면 반영
hash_now="$(printf '%s' "$fixed" | sha1sum | awk '{print $1}')"
if [[ "$hash_now" != "$prev_hash" ]]; then
printf '%s' "$fixed" | write_both
prev_hash="$hash_now"
fi
# 짧게 쉼
usleep() { perl -e "select(undef,undef,undef,$1/1000.0)"; }
usleep "$POLL_MS"
done
EOF
chmod +x /usr/local/bin/clipboard_crfix.sh
동작 원리
- Windows → (RDP) → CLIPBOARD 로 들어오는 텍스트를 주기적으로 읽어 \r 제거
- 정제된 텍스트를 CLIPBOARD & PRIMARY 양쪽에 다시 써서, 마우스 중클릭 붙여넣기도 동일하게 동작
- RDP(root) 세션에서 DISPLAY가 :0로 잡히는 문제를 자동 교정
3) XFCE 자동 시작에 등록 (root 전용)
root GUI 세션에서 자동 실행되도록 등록합니다.
(autocutsel 두 개를 먼저 띄우고, 그 다음 필터 스크립트를 실행)
mkdir -p /root/.config/autostart
cat >/root/.config/autostart/autocutsel.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=autocutsel
Comment=Sync PRIMARY and CLIPBOARD
Exec=sh -c "autocutsel -fork && autocutsel -selection PRIMARY -fork"
X-GNOME-Autostart-enabled=true
EOF
cat >/root/.config/autostart/clipboard-crfix.desktop <<'EOF'
[Desktop Entry]
Type=Application
Name=clipboard-crfix
Comment=Remove CR (\r) on clipboard changes and re-sync to PRIMARY/CLIPBOARD
Exec=/usr/local/bin/clipboard_crfix.sh
X-GNOME-Autostart-enabled=true
EOF
시스템 전체 사용자에 적용하고 싶으면 /etc/xdg/autostart/ 아래에 같은 .desktop 파일을 두시면 됩니다.
4) 즉시 수동 테스트 (재로그인 전)
현재 세션에서 바로 띄워 확인할 수도 있습니다:
autocutsel -fork
autocutsel -selection PRIMARY -fork
/usr/local/bin/clipboard_crfix.sh &
- 이제 Windows에서 복사한 텍스트를 Ubuntu에 붙여넣으면 ^M 없이 들어옵니다.
- 마우스 드래그(PPRIMARY)도 autocutsel이 CLIPBOARD로 동기화하고, 필터가 \r을 제거해 두 영역이 항상 일치합니다.
5) 참고/튜닝 포인트
- 폴링 간격을 바꾸고 싶으면 스크립트의 POLL_MS 값을 조정하세요(기본 200ms).
- 대용량 바이너리/이미지 클립보드는 의도치 않게 변환될 수 있으니(보통 텍스트 작업에서만 사용), 필요시 텍스트 길이 제한을 두거나 MIME 타입 검사를 추가할 수 있습니다.
- 일반 사용자용으로도 쓰려면, 위 경로들을 해당 사용자 홈(~/.config/autostart)에 만들어 주시면 됩니다.
반응형
'ChatGPT > 프로...Linux' 카테고리의 다른 글
| 📌 리눅스 클립보드 3종류 (0) | 2025.09.03 |
|---|---|
| DNS 안 될때 (1) | 2025.08.25 |
| Tcp로 간단 Text 주고 받기 (0) | 2025.04.03 |
| 하나의 IP에 두개의 인터페이스 이름을 만드는 방법 (0) | 2025.04.02 |
| Ubuntu) 한국 표준시(KST)인 Asia/Seoul로 변경 (0) | 2025.04.02 |