준비운동하기
필자는 예전에 xhost라는 프로그램으로 똑같은 것을 구현해봤던 적이 있다. 하지만 현재 xhost는 거의 사용되지 지지 않는다. 우리가 리눅스를 기본적으로 설치하게 되면, xhost는 iptable에서 막아 놓는다.
이유는 xhost가 허용하는 호스트를 다른 호스트가 위조한다면, 그 X서버의 보안은 누구도 장담하지 못하기 때문이다. 그렇다고 VNC가 안전하다는 것은 아니다. 하지만 xhost보다는 안전하기 때문에 꼭 원격 X서비스를 필요로 한다면, VNC를 사용하길 권하고 싶다.
설치하기
다음의 사이트에서 다운 받기 바란다. http://www.uk.research.att.com/vnc/
필자는 다음의 파일들을 받았다.
- vnc-3.3.6-x86_linux.tar.gz : 리눅스 용이다.
- vnc-3.3.3r9-x86_win32.zip : 윈도우 용이다.
리눅스에 VCN 설치하기
우선 리눅스 서버에다가 VNC를 설치해보자!
vnc-3.3.3r2_x86_linux_2.0.tgz 파일을 다운받은 후 압축을 해제합니다.
#tar zxvf vnc-3.3.3r2_x86_linux_2.0.tgz
압축을 해제한 디렉토리로 이동을 하면 다음과 같은 5개의 파일을 볼 수 있습니다.
Xvnc | 실제 작동되는 LINUX용 서버 프로그램으로 vncserver 스크립트를 통해 실행이 됩니다. |
vncpasswd | 리눅스에 연결할 때 사용되는 패스워드를 설정하는 파일입니다. 처음 VNC 서버를 시작할 경우 vncserver 스크립트는 이 프로그램을 이용하여 암호를 지정합니다. |
vncviewer | 다른 컴퓨터로 연결할 때 사용하는 클라이언트 프로그램입니다. |
vncserverVNC | 서버를 기동시키는 스크립트 파일입니다. 펄로 작성되었고, 펄의 설치 확인은 /usr/bin/perl 파일이 있으면 설치가 된 것이며, 다른 디렉토리에 설치가 되었다면 vncserver 파일을 열어 첫째 줄의 perl 경로를 수정하고 주석을 제거합니다. |
vncconnectVNC | 서버에서 VNC viewer와 접속할 것을 알려주는 프로그램입니다. |
이 프로그램들을 /usr/local/bin과 같은 적절한 디렉토리로 카피를 합니다.
#cp vncviewer vncserver vncpasswd vncconnect Xvnc /usr/local/bin
자바 VNC viewer를 사용한다면, class 파일들을 카피합니다.
#mkdir -p /usr/local/vnc/classes #cp classes/* /usr/local/vnc/classes
나의 경우는 classs 파일들을 카피하지 않아도 잘 작동했다.
윈도우에서 VCN 설치하기
이번에는 윈도우에서 설치할 차례다.
압축을 해제하면 winvnc디렉토리에 setup.exe파일이 있다.
참고로 이 파일은 windows 9x/2000/NT에서 모두 설치가 가능하다. 더블클릭하여 설치를 한다.
윈도우에서 리눅스 연결하기
우선 리눅스에서 VNC서버를 가동시켜 주어야 한다.
#/usr/local/bin/vcnserver
처음 실행하면 password를 물어 보는데 이 때 설정하는 비밀번호가 다른 PC에서 LINUX에 접속할 경우 필요한 비밀번호이다. 그리고 자동적으로 root 디렉토리에 .vnc 디렉토리가 생성된다.
중요한 것은 New 'X' desktop is fat81:1라는 부분인데, 호스트와 도메인네임이 나온 후 1이라는 숫자가 붙었는데 여기서 다시 vncserver를 실행하면 이번에는 fat81:2 라는 숫자가 붙어서 나온다. 이것은 다른 PC에서 LINUX로 연결할 때, 첫 번째 서버, 두 번째 서버를 지정해 줄 수 있다는 것이다. 이제 windows에서 LINUX로 연결을 시도해 보자.
위에서 윈도우에서 VNC를 설치했다면 시작메뉴에 등록이 되어 있을 것이다.
거기서 windows에서 시작 - 프로그램 - VNC - Run Vncviewer를 실행합니다. 접속할 서버를 묻는 화면이 나타나면, 서버의 호스트명이나 IP address를 입력해준다. 그리고 반드시 몇 번째 서버에 연결할 것인지 “:숫자”도 빼먹지 말아야 한다.
리눅스에서 지정한 패스워드를 입력합니다. [OK]버튼을 누르면 아래와 같은 twm이 windows화면에 나타납니다. 일단 연결은 됐지만, Gnome이나 KDE같은 X window 창이 아니므로 수정을 해야 한다.
윈도우매니저, 해상도, font의 수정
/root/.vnc 디렉토리로 이동을 하면 xstartup 이라는 파일이 있는 데 이 파일이 VNC 의 서버가 동작하면서 X window의 상태를 지정하게 된다. 그래서 우리가 그동안 보아온 X window를 VNC에서 보려면 xstartup 파일을 지우고 /etc/X11/xinit 디렉토리에 있는 xinitrc 파일을 이곳에 xstartup 이름으로 복사하면 된다.
화면의 해상도와 color 수를 수정하려면 /usr/local/bin/vncserver 파일을 열어서
$geometry = "1024x768"; 와 $depth = 8; 부분을 아래와 같이 수정합니다. ...... ## Global variables. You may want to configure some of these for your site. # $geometry = "800x600"; $depth = 16; $desktopName = "X"; $vncClasses = "/usr/local/vnc/classes"; $vncUserDir = "$ENV{HOME}/.vnc"; $xauthorityFile = "$ENV{HOME}/.Xauthority"; ......
한글을 사용하기 위해서는 /usr/local/bin/vncserver 파일의 font부분을 찾아서 수정합니다. 다른 배포본의 경우는 폰트가 설치된 디렉토리를 찾아서 추가합니다. 나의 경우는 특별히 윈도 굴림 폰트의 경로를 추가해주었다.
[수정전]...... # Add font path and color database stuff here, e.g.: # # $cmd .= " -fp /usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/"; # $cmd .= " -co /usr/lib/X11/rgb"; # ... [수정 후]...... # Add font path and color database stuff here, e.g.: # $cmd .= " -fp /usr/share/fonts/hangul/ssc/,/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/ms-gulim/"; # $cmd .= " -co /usr/lib/X11/rgb"; # ...
이제 LNIUX에서 kill 옵션을 이용하여 vncserver를 중지시키고 다시 기동시켜보자. 다시 windows측에서 vncviewer를 통해 LINUX에 접속하면 LINUX 데스크탑 환경을 windows에서 사용할 수 있을 것이다.
리눅스에서 윈도우 연결하기
- 'windows에서 Server 기동시작 - VNC - 프로그램 - Run WinVNC(App Mode)' 를 실행시킨다. 다음과 같은 화면이 나타나고 다른 PC(리눅스)에서 접근할 경우를 위해 password를 지정한다. [OK]버튼을 누르면 서버가 기동되고 작업표시줄에 아이콘이 표시된다.
- 'LINUX에서 wondows로 연결X window 상에서 터미널' 을 열어서 vncviewer를 실행한다.
#/usr/local/bin/vncviewer &
그러면 아래와 같은 창이 나타나고, 여기에 windows의 IP 주소를 입력한다. 다음은 위에서 설정해 준패스워드를 입력한다. 새로운 창이 만들어 지고 windows의 데스크탑 환경이 표시된다.
웹 브라우저를 통한 연결
VNC서버는 작은 웹 서버를 포함하고 있다. 그래서 만일 자바 VNC viewer를 설치하였다면, 웹 브라우저를 통해 VNC 서버에 연결할 수 있다. 서버는 5800번째 부터 디스플레이 값을 더한 포트에 HTTP 접속 요청을 받아 들인다. 그래서, 서버의 디스플레이 번호가 2라면 웹브라우저의 주소란에 다음과 같이 입력한다.
패스워드를 묻는 애플릿이 실행되며, 데스크탑 환경이 표시될 것입니다.
windows에서 익스플로러를 이용하여 LINUX에 연결하였습니다. 역시 이와 반대의 경우도 구현 가능하다. 아직까지는 연결된 상태에서 화면 스크롤과 응용프로그램 실행이 느린감이 있지만 점차 개선되리라 본다.