Tags: , ,

Categories:

2 minute read

우분투에서 클립보드 다루기 (xclip)

나는 메인 OS를 우분투로 사용하고 있기 때문에, 우분투에서 클립보드를 다루는게 일상이다. 우분투의 GUI환경을 이용할 수 있다면, gedit 등의 텍스트 에디터를 이용하거나, vi편집기를 열어 ctrl + shift + c를 이용해 복사할 수 있다. 하지만, 많은 경우 윈도우 환경에서 wsl을 활용하거나, 외부 서버를 ssh로 접속하는데 사용한다. 이런 경우 클립보드를 활용하는게 매우 곤란하다.

예를 들면 우분투에 test.c 와 같은 파일을 만들었는데, 이를 메인 os로 내용을 복사해야하는 경우이다. scp를 이용하여 파일을 직접 메인 os로 가져올수도 있지만, 타이핑해야하는 내용이 많기 때문에 상당히 번거로운 작업이다.

여기서 간단한 X11 윈도우 시스템에 대한 간단한 리눅스 지식을 이해하면 좋다. 몰라도 되긴 하는데, 뒤에서 다룰 내용이 왜 가능한지에 대한 이해를 할 수 없게 된다. 리눅스의 GUI는 대부분 X 윈도우 시스템 내에서 돌아가게 된다. 그리고 X11은 내부에 서버를 가지고 있어, 이 서버가 마우스, 키보드 장비 들의 인터럽트를 감지하며, 화면에 필요한 그래픽 출력을 위해 그래픽 카드와 소통한다.

우분투 데스크톱부터, 브라우저, 터미널 에뮬레이터 등의 클라이언트 들은 X 서버와 X 요청을 주고받으며, 이에 대한 결과를 받아 또 다른 처리를 하게 된다. 한 편, 클립보드라는 개념은, 반드시 GUI에서만 성립한다. (복사 / 붙여넣기 라는 개념이 필요하기 때문) 따라서 클립보드 어플리케이션 버퍼 내용을 X 서버로부터 전달받거나, 전달하여 GUI에 뜨게 하는 등의 소통을 한다.

이를 CLI 환경에서 다루기 위해서는 X 서버 및 클립보드와 소통할 수 있는 어플리케이션이 필요하다. 이 어플리케이션이 xclip이다.

sudo apt update
sudo apt install xclip -y

설치는 위와 같이 할 수 있다. 사용 방법은 매우 간단하다. 표준 출력을 xclip의 표준 입력이 되도록 파이프라인으로 연결한 이후 -selection clipboard 옵션을 주기만 하면 된다. 아래는 사용하는 예시이다.

./test.o | xclip -selection clipboard

./test.o의 결과물을 클립보드를 선택하여 넣어준다. 이를 이용하면 파일 복사 역시 클립보드로 쉽게 가능하다.

cat <file> | xclip -selection clipboard

<file>에 파일명만 넣어주면 파일의 내용을 클립보드에 복사된다. 다만 가장 귀찮은 점은 매번 이렇게 써주어야 한다는 점이다. 따라서 cpfl(파일명은 본인이 편한대로..!)이라는 파일을 다음과 같이 만들어보자.

#! /bin/bash

cat $1 | xclip -sel clip

$1cpfl 스크립트를 실행할 때, 파일명을 제외한 첫 번째 인자이다. 즉, 파일명을 외부에서 받아줄 수 있게 된다. 이 스크립트를 /usr/bin 폴더에 복사하고, 실행 권한을 부여하자.

sudo cp cpfl /usr/bin
sudo chmod a+x /usr/bin/cpfl

이제 파일 복사를 짧은 명령어로 할 수 있게 된다.

cpfl <file>

ssh로 연결된 상태에서 사용하기

위 X 서버와 클라이언트 개념을 되짚어보면, 우리가 ssh로 우분투를 연결했을 때, X 클라이언트는 우분투의 ssh 서버가 된다. 하지만, 일반적으로 CLI환경에서 GUI를 다루지는 않기 때문에 ssh는 X 서버와 자동으로 연결하지 않는다. 이 때 사용하는 옵션이 -X 옵션이다.

ssh user@hostname -X

애초에 연결할 때, 위와 같이 연결하면, 우분투의 ssh서버가 받는 X 서버 통신을 우리가 사용하고 있는 터미널 에뮬레이터로 보내준다. X11과 관련된 프로그램을 실행하면, ssh 서버가 이를 실행하며, 이에 반응하여 X 서버는 적절한 요청을 ssh 서버에 보내준다. ssh 서버는 이를 ssh 프로토콜을 이용하여 우리가 사용하는 터미널 에뮬레이터가 받게 되며, 이를 컴퓨터에서 실행해주는 것이다. 네트워크 의존적이기 때문에 복잡한 프로그램을 실행하기는 어렵지만, xclip을 실행하기엔 더할나위 없다. 여하튼 -X 옵션을 이용하여 연결해두기만 하면 cpfl을 똑같이 실행하여 사용할 수 있다. 물론, 서버가 X11을 포함하지 않는 경우에는 사용할 수 없겠지만, AWS EC2에도 있는 것으로보아 웬만한 곳에서 모두 사용할 수 있을 것으로 보인다. 또, mobaxterm등의 터미널은 X 윈도우를 내장하고 있기 때문에, 위 방법을 이용하여 클립보드를 공유할 수 있다.

Leave a comment