Xclip
xclip - command line interface to X selections (clipboard)
여기서는 xclip을 통해 클립보드에 데이터를 넣고 뺴는 것을 편리하게 사용해 보자.
X Selections
리눅스 X11에는 우리가 흔히 클립보드
라고 부르는 것을 Selection
이라 하며 이것에 대해 세 가지 타입을 제공한다. 각각 primary
, secondary
, 그리고 일반적으로 사용하는 clipboard
가 되겠다. 이름이 Selection이므로 당연하게도 뭔가를 선택하게 되면 이 부분은 자동으로 채워지게 된다. Ctrl+C
, Ctrl+V
의 경우 primary가 아니라 clipboard
를 사용한다.
- Primary: 무언가를 선택하는 것만으로 내용이 채워진다. 암시적으로 동작하며 따라서 유저의 의도대로 채워지는 것이 아니다. X11에서는 마우스 중간 버튼으로 불러낼 수 있다.
- Clipboard: 명시적으로
복사
/붙여넣기
명령을 통해 값을 빼고 넣을 수 있다.
일반적으로 우리가 사용하는 것은 X11에서는 클립보드이며, Primary는 잘 사용하지 않는 것 같다. 윈도우에서는 Putty
나 그런 것을 잠깐 쓸 때 Primary느낌으로 사용하긴 한 것 같다. 생각해 보니… 리눅스에서 지원하는 Primary에 맞추어 동작하려니 클립보드에 값이 들어가는건가?
따라서 X11 어플리케이션을 구현하는 입장에서는 이런 클립보드 정책을 고민하면서 개발해야 할 것 같은데, 여기서는 이 이야기는 이정도로만 하고 xclip
을 실제로 사용해 보자.
설치
우분투 기준
$ sudo apt-get install xclip
xclip 패키지를 설치하면 된다.
실행
$ xclip -h
Usage: xclip [OPTION] [FILE]...
Access an X server selection for reading or writing.
-i, -in read text into X selection from standard input or files (default)
-o, -out prints the selection to standard out (generally for piping to a file or program)
-l, -loops number of selection requests to wait for before exiting
-d, -display X display to connect to (eg localhost:0")
-h, -help usage information
-selection selection to access ("primary", "secondary", "clipboard" or "buffer-cut")
-noutf8 don't treat text as utf-8, use old unicode
-target use the given target atom
-rmlastnl remove the last newline character if present
-version version information
-silent errors only, run in background (default)
-quiet run in foreground, show what's happening
-verbose running commentary
Report bugs to <astrand@lysator.liu.se>
-i
를 통해 클립보드에 값을 넣을 수 있고, -o
를 통해 클립보드에서 값을 꺼낼 수 있다. -selection
파라미터를 통해 위에서 확인한 클립보드 타입 Primary
, Clipboard
를 지정할 수 있다.
사용
$ cat xcliptest.json
{
"xclip": "very simple cli"
}
$ cat xcliptest.json | xclip -i -selection primary
$ xclip -o -selection primary
{
"xclip": "very simple cli"
}
다음과 같이 primary에 값을 넣고 뺄 수 있다. 참고로 primary에 들어갔으니까 X11에서 마우스 가운데 버튼을 누르는 것으로 붙여넣기 할 수도 있다. 그리고 당연히 Ctrl+V
로 값을 꺼낼 수 없다.
$ cat xcliptest.json | xclip -i -selection clipboard
$ xclip -o -selection primary
%
$ xclip -o -selection clipboard
{
"xclip": "very simple cli"
}
이번에는 clipboard
에 값을 넣었다. 마찬가지로 primary
에서는 값이 나오지 않지만 clipboard
에서는 값을 꺼낼 수 있다. 따라서 마우스 가운데 버튼으로는 값을 꺼낼 수 없고 Ctrl+V
로 값을 꺼내야 한다.
활용
터미널상에서 뭔가를 출력한 후에 어딘가에 옮기려고 복사-붙여넣기를 하다가 보니 너무 불편해서 /dev
밑에 클립보드 장치같은게 있나 하다 알게 되었는데, cygwin에서는 /dev/clipboard
를 제공하는데 리눅스에서는 이걸 제공하지는 않는 것 같다.
아무튼 그래서 cat
의 출력을 바로 클립보드에 넣는다거나 클립보드 데이터에 억세스해야하는 간단한 쉘 프로그램에서도 이걸 유용하게 쓸 수 있을 것 같다. Secondary
는 어디에서도 명시적으로 쓰이는 곳이 없으므로 쉘 같은곳에서는 Secondary를 사용해서 작성하는 것이 조금 도움이 될 것 같다.
그런데 인터넷 검색을 꽤 해도 Secondary 클립보드에 대한 유래 설명이 잘 안나오는 것 같다. 이렇게 쓰는게 맞는건지..