서버는 화면을 그려주고 키보드, 마우스 입력을 받는다.
클라이언트는 프로세스이다. 웹 브라우저, 에디터, 기타 등등의 프로그램들이 클라이언트가 된다.
클라이언트가 서버에게 입력을 요청하고, 화면 출력을 요청한다.
서버는 이를 받아 디스플레이에 그려주거나 클라이언트가 요청한 반응을 보인다.
이 개념이 그닥 쉽게 다가오지는 않는다. 프로그램이 화면을 그리라고 시키고, 입력을 달라고 시키는데, 이거 뭔가 뒤바뀐게 아닌가?
근데 이렇게 생각하면 조금 이해가 쉬울지도 모르겠다.
X 윈도우를 떠나서 생각해 보면, (웹을 예로 들어) 항상 켜 있고 대기중이면서 클라이언트(브라우저)의 연결을 기다리고 있는 녀석이 서버이고, 필요에 따라 실행되고 원하는 서버에 접속하는 녀석이 클라이언트이다.
여기까지 이해가 되는가? 부디 이해가 되면 좋겠다.
맨날 대기중이어서 아무때나 연결을 받아들이는 녀석이 서버이고,
필요에 따라 서버에 연결을 하는 녀석이 클라이언트라고 했을때
X 윈도우에서는 누가 항상 대기중인 녀석인가 생각해보면 이해가 될 것이다.
응용 프로세스가 화면을 그리라고 시키는 녀석이긴 하지만,
조금 더 파헤쳐 보면 프로세스가 실행 되고 대기중인 서버에 접속해서 화면 그리라고 시키는것이다.
그렇다면 접속하는 녀석이 프로세스이므로 클라이언트가 맞지 않은가?
서버/클라이언트 얘기는 여기까지 하고,
이 글의 주제는 그렇다면 X 윈도우 서버와 클라이언트가 다른 컴퓨터에 있어도 되지 않겠는가에 대한 생각이다.
물론 가능하다. 내 로컬 컴퓨터에 X 서버가 있다면 다른 컴퓨터에는 클라이언트만 있어도 된다는 말이다.
MS윈도의 터미널 클라이언트 처럼 화면을 통째로 가져다 놓는것이 아니라,
한 프로그램의 화면 출력을 이쪽 컴퓨터로 끌어오는 것이다.
프로세스는 다른 컴퓨터에 있고, 디스플레이와 입/출력은 이쪽에서 한다.
띄워 놓으면 상당히 쓰기 편하다. ssh나 telnet과 비교해 봤을때.
ssh는 아무리 용 써봐야 CLI다. 그러나 그 ssh를 통해 GUI를 사용 할 수 있다.
사설이 길었다. 이제 방법을 얘기 하자면,
이 글에서 가정한 환경은 서버/클라이언트(X윈도우 말고..) OS는 모두 ubuntu이다.
서버에는 openssh 서버가 돌고 있고, 로컬 컴퓨터에 ssh 클라이언트가 깔려 있다.
서버에는 X윈도우가 없고, 로컬에는 당근 X윈도우가 돌면서 웹도 쓰고 오피스도 쓰고 한다.
이정도는 흔히들 쓰고 있을 환경일 것이다. 서버에 왜 X윈도우가 깔려 있겠는가?
이 상황에서 서버쪽에는 X 서버가 없지만, 그렇다고 해서 X 클라이언트가 돌지 말라는 법은 없다.
서버에 ssh를 이용하여 접속하고, X 응용 프로그램을 깔고 돌려보자.
$ sudo apt-get install vim-gtk
$ gvim
당연히 실행 안된다. 디스플레이가 없다고 에러 낸다.$ gvim
디스플레이라는것이 X 서버를 말하는것인데, 당연히 안되는것이 정상이다.
이때 X 서버로 연결을 ssh를 통하여 터널링 시키는것이다.
ssh 연결을 끊고 다시 접속하는데 이번에는 -X 옵션을 주고 연결하자.
옵션의 -X는 반드시 대문자를 사용할것. 이 옵션이 X윈도우 연결을 터널링 해주는 옵션이다.
소문자 x를 사용하면 연결 할 수 있어도 하지 말라는 옵션이다. 당연히 연결 안된다.
$ ssh -X 어딘가.있는.서버
(로그인 과정 생략)
$ gvim
뜨는가? 글쎄.. 안될것이다. 또 디스플레이 못 찾는다고 투덜거리고 CLI vi에디터가 뜰 것이다.(로그인 과정 생략)
$ gvim
이제내가 알아낸 방법을 써 먹을때가 되었다. 캬캬~
다음 명령을 서버에서 실행시키자.
$ sudo apt-get install xauth
설치가 끝나면 ssh 연결을 끊고 -X 옵션을 주고 다시 연결하자.그리고 gvim 띄우면 이제는 로컬에 gvim이 나타날 것이다. 아름답지 않은가?
실행 속도도 그다지 느리지 않다. 적어도 터미널 클라이언트에 비하면 수십배 빠르다.
이제는 사족이다. 서버에 X 포워딩을 이용하여 연결했을때
자동으로 이를 감지하여 vi라고 실행시켜도 gvim이 뜨면 편할것이다.
이를 위하여 다음의 코드를 ~/.bashrc에 집어넣는다.
어디 넣어야 하는지 모르겠다면 맨 끝에 때려넣어라.
# if X window server available
if [ ! -z $DISPLAY ]; then
alias vi='gvim'
fi
이거 해석할 수 있는 사람이면 원하는거 추가도 할 수 있겠지?if [ ! -z $DISPLAY ]; then
alias vi='gvim'
fi
마지막으로 변명이다. ㅡㅡ;
gvim의 경우 vim-gnome을 설치하면 좀 더 이쁜 화면을 볼 수 있으나,
서버에 gnome시스템이 없는 관계로 저걸 설치하면 용량이 수십배 더 많이 든다.
gtk버전이 그나마 용량을 적게 사용해서 gtk버전을 설치했다.
그래도 이정도면 봐줄만 하지 않은가? ㅡㅡ
Comments List
ㅎㅎ gvim 실행시켜봤는데, 한글이 다 깨져요 -_-ㅋ
이거 퍼가요