Canvas 1 Layer 1

X클립을 사용한 리눅스의 GUI 클립보드와 터미널 연동

들어가며: 리눅스의 CLI 클립보드 도구 X클립(XClip)

GUI 환경과 CLI 환경 사이에서 정보를 공유하는 것은 생각보다 간단하지 않은 일입니다. 하지만 CLI 환경에서 작업할 일이 많은 프로그래머라면 이 두 환경의 정보를 적절하게 공유할 수 있어야 작업 효율도 따라서 올라가게 됩니다. 이 글에서는 리눅스에서 X클립XClip을 통해서 터미널 환경의 문자열을 리눅스 GUI 환경의 클립보드로 복사하는 법과 티먹스Tmux의 복사 모드와 X클립을 연동하는 방법에 대해 소개합니다.

X클립(Xclip) 설치

우분투Ubuntu에서 X클립은 아래 명령어로 설치할 수 있습니다.

$ apt-get install -y xclip

정상적으로 설치가 되었는지 확인해봅니다.

$ xclip -version
xclip version 0.12
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL

버전 정보가 출력되는 것을 확인할 수 있습니다.

X클립으로 복사하기

X클립의 기본적인 사용법은 간단합니다. 리눅스 커맨드의 출력 결과를 파이프라인으로 넘겨주면 X클립이 그 결과를 GUI의 클립보드에 저장해줍니다. 예를 들어 date 명령어를 사용하면 아래와 같이 출력됩니다.

$ date
Tue Jul 29 23:35:59 KST 2014

터미널 어플리케이션마다 약간의 차이는 있지만 보통 이러한 출력을 복사하기 위해서는 마우스로 문자열을 선택하고 복사를 하거나 그것도 잘 안 되면 마우스 오른쪽 버튼을 눌러서 컨텍스트 메뉴에서 복사하기를 클릭해야합니다.

date의 출력을 xclip으로 복사하고자 한다면 다음 명령어를 실행합니다.

$ date | xclip -selection clipboard
$

복사가 잘 되었는지 GUI 에디터에서 Ctrl + v 로 복사해보겠습니다.

X클립을 사용해 터미널에서 텍스트를 복사한 결과
X클립을 사용해 터미널에서 텍스트를 복사한 결과

붙여넣기가 정상적으로 이루어집니다. 표준 출력의 내용을 파이프로 넘겨주기만 하면 복사가 이뤄지므로 훨씬 더 다양한 활용이 가능합니다. 예를 들어 시스템 정보를 출력해서 바로 클립보드로 보낼 수도 있고, cat과 함께 사용하면 아주 긴 파일을 곧바로 클립보드로 보낼 수도 있습니다.

$ cat /var/log/syslog | xclip -selection clipboard

이를 통해 클립보드가 훨씬 더 강력해질 것입니다. 매번 긴 옵션을 입력하는 것은 번거로우므로 셸의 별칭 기능을 사용하면 더 편리하게 사용할 수 있습니다. 자신이 사용하는 셸 설정 파일(Zsh이라면 ~/.zshrc)에 다음 내용을 추가해줍니다.

alias copy='xclip -selection clipboard'

이제 copy라는 별칭으로 표준출력의 내용을 복사할 수 있습니다.


$ cat /var/log/syslog | copy

X클립의 사용 시 주의사항

몇몇 예제에서는 -selection clipboard 옵션 없이 X클립을 사용하기도 하는데 이렇게 사용할 때는 조심할 필요가 있다. X11의 클립보드는 하나가 아닙니다. 위의 옵션을 명시적으로 주지 않아도 복사가 이루어집니다.

$ date | xclip
$

분명히 정상적으로 복사되었지만 아마 일반적으로 Ctrl + v 키로 복사한 내용을 가져오지 못 할 것입니다. 이렇게 복사한 경우 마우스 가운데 버튼을 통해서 복사한 내용을 가져올 수 있습니다.

X클립으로 붙여넣기

GUI 클립보드의 내용을 표준 출력에 출력하고자 할 때는 -o 옵션을 사용합니다. 클립보드에 문자열 Hello!라는 문자열이 복사되어있는 경우, 다음과 같이 출력됩니다.

$ xclip -o
Hello!

티먹스(Tmux)와 연동하기

티먹스Tmux는 다수의 셸을 동시에 띄워놓고 사용할 수 있도록 해주는 도구입니다. 티먹스에서는 복사 모드Copy Mode로 텍스트를 복사할 수 있습니다. 티먹스의 복사 모드에서는 빔Vim이나 이맥스Emacs 모드로 단축키를 사용할 수 있습니다. 이 설정은 ~/.tmux.conf 파일에 아래 옵션을 통해서 설정할 수 있습니다.

빔 모드를 사용하고자 하면 아래와 같이 설정합니다.

set-window-option -g mode-keys vi

이맥스 모드를 사용하고자 하면 아래와 같이 설정합니다.

set-window-option -g mode-keys emacs

이제 복사모드를 사용해보겠습니다. 티먹스 내에서 복사 모드는 ^b [ 키로 시작하고, ^b ]로 종료합니다. 복사 모드 내에서도 빔Vim이나 이맥스Emacs 모드에 따라서 아래의 단축키들을 사용할 수 있습니다.

Function                vi             emacs
Back to indentation     ^              M-m
Clear selection         Escape         C-g
Copy selection          Enter          M-w
Cursor down             j              Down
Cursor left             h              Left
Cursor right            l              Right
Cursor to bottom line   L
Cursor to middle line   M              M-r
Cursor to top line      H              M-R
Cursor up               k              Up
Delete entire line      d              C-u
Delete to end of line   D              C-k
End of line             $              C-e
Goto line               :              g
Half page down          C-d            M-Down
Half page up            C-u            M-Up
Next page               C-f            Page down
Next word               w              M-f
Paste buffer            p              C-y
Previous page           C-b            Page up
Previous word           b              M-b
Quit mode               q              Escape
Scroll down             C-Down or J    C-Down
Scroll up               C-Up or K      C-Up
Search again            n              n
Search backward         ?              C-r
Search forward          /              C-s
Start of line           0              C-a
Start selection         Space          C-Space
Transpose chars                        C-t

예를 들어 이맥스 모드에서는 Ctrl+Space로 필요한 영역을 선택한 후 M-w를 키로 해당 영역을 복사할 수 있습니다.

단, 복사 모드에서 복사한 텍스트가 GUI의 클립보드에 저장되지는 않습니다. 복사 모드에서 복사한 문자열을 자동적으로 클립보드에 저장하기 위해서는 X클립을 사용해야합니다. 다음 설정을 ~/.tmux.conf에 추가해줍니다.

bind-key -t emacs-copy M-w copy-pipe "xclip -i -selection clipboard"

설정을 추가했으면 설정 파일을 아래와 같이 리로드하거나 티먹스 서버를 재실행합니다.

$ tmux source-file ~/.tmux.conf

이제 티먹스 복사 모드에서 복사한 내용이, 자동적으로 클립보드에도 저장됩니다.