Server & OS

[펌] VNC(Virtual Netwark Computing) at LINUX

컨텐츠 정보

본문


VNC(Virtual Netwark Computing)

주성식 / liks@doit.ajou.ac.kr

VNC(Virtual Network Computing)

VNC는 영국 캠브리지 대학교의 AT&T 연구소에서 개발된 프리웨어이다. VNC는 원격지에서도 자신의 엑스윈도우 GUI(Graphic User Interfce)환경을 제공해 주는 서버/클라이언트 방식의 프로그램이다. VNC는 GUI환경을 제어하기 위하여 TCP/IP 기반에 자체적인 프로토콜을 사용한다. AT&T가 VNC가 만들게 된 동기는 고속의 ATM네트웍에서 워크스테이션에 사용할 LCD 디스플레이 소프트웨어와 그 소프트웨어를 원격지에서 모니터링할 수 있는 뷰어(Viewer)를 개발하게 되었는데 그 시스템의 이름은 ‘ATM Network Computing’이라 명명하게 되었다. 그 후에 이 시스템의 개발이 꾸준히 진행되어 지금의 VNC가 되었다. 현재 VNC 는 리눅스 X86용은 물론 SUN의 Solaris 용 윈도우즈 95/98/NT/CE ,맥킨토시 등 각종 플랫폼으로 이식되어 있으며 각 플랫폼의 프로그램 소스도 공개되어 있다.

사용자가 자신의 컴퓨터에 ‘VNC server’를 실행시켜 놓은 상태라면 네트웍에 연결된 어느 컴퓨터에서나 ‘VNC viewer’를 이용하여 자신의 컴퓨터를 마음대로 조정할 수 있게 된다.(viewer 대신에 인터넷 브라우져를 사용할 수도 있다. 전용 뷰어보다는 못하다.) 여러가지 목적으로 편리하게 사용할 수도 있겠지만 비밀번호 관리를 잘못하게 되면 자신의 시스템이 다른 사람에 의해 쉽게 망가져 버릴 수도 있을 것이다.

VNC의 작동원리를 간단히 알아보자.

VNC는 ‘VNC server’와 원격지의 ‘VNC viewer’(클라이언트프로그램)로 나누어 생각할 수 있는데 이 두 프로그램은 독자적인 ‘VNC protocol’을 사용하여 작동하게 된다.

‘VNC protocol’은 RemoteFrameBuffer (RFB)의 개념을 기본으로 하고 있는데 FrameBuffer라는 것은 일반적인 GUI시스템에서 화면에 나타나게 될 데이터를 임시로 저장하는 공간을 뜻하는데 로컬 시스템의 프레임버퍼의 내용이 업데이트되면 ‘VNC server’는 ‘VNC protocol’을 사용하여 변경된 내용을 클라이언트 컴퓨터의 프레임버퍼에 전달하여 주고 ‘VNC viewer’는 이 내용을 클라이언트의 컴퓨터화면에 보여주는 것이다. 또한 ‘VNC protocol’은 사용자가 클라이언트 쪽의 ‘VNC viewer’를 통하여 ‘VNC server’쪽의 시스템을 작동시키는 것도 가능하게 되어 있다.

VNC를 구할 수 있는 곳은?

VNC의 공식 홈페이지는 ‘http://www.uk.research.att.com/vnc/’ 이다. 이 홈페이지에서 VNC에 관련된 각종 문서들을 구할 수 있다. VNC를 다운로드 받으려면 다음의 URL에서 (‘http://www.uk.research.att.com/vnc/download.html’) 간단한 사용자 등록폼을 작성하고 자신에게 필요한 VNC버젼을 선택하면 된다.( x86 win32 버전과 x86 linux 버전을 선택하도록 하자.)

설치하기

다운받아 온 vnc-3.3.3r1_x86_linux_2.0.tgz 파일을 압축을 풀도록 하자. 일단 설치할 디렉토리를 정하고 해당 디렉토리로 이동하여 작업하도록 합시다.

53% liks@doit:~/WRITE/WORK> tar -xvzf vnc-3.3.3r1_x86_linux_2.0.tgz
Archive: vnc-3.3.3r1_x86_linux_2.0.zip
inflating: vnc_x86_linux_2.0/LICENCE.TXT
inflating: vnc_x86_linux_2.0/README
inflating: vnc_x86_linux_2.0/Vncviewer
inflating: vnc_x86_linux_2.0/Xvnc
inflating: vnc_x86_linux_2.0/classes/DesCipher.class
inflating: vnc_x86_linux_2.0/classes/animatedMemoryImageSource.class
inflating: vnc_x86_linux_2.0/classes/authenticationPanel.class
inflating: vnc_x86_linux_2.0/classes/clipboardFrame.class
inflating: vnc_x86_linux_2.0/classes/index.vnc
inflating: vnc_x86_linux_2.0/classes/optionsFrame.class
inflating: vnc_x86_linux_2.0/classes/rfbProto.class
inflating: vnc_x86_linux_2.0/classes/shared.vnc
inflating: vnc_x86_linux_2.0/classes/vncCanvas.class
inflating: vnc_x86_linux_2.0/classes/vncviewer.class
inflating: vnc_x86_linux_2.0/classes/vncviewer.jar
inflating: vnc_x86_linux_2.0/vncpasswd
inflating: vnc_x86_linux_2.0/vncserver
inflating: vnc_x86_linux_2.0/vncviewer
54% liks@doit:~/WRITE/WORK>

컴파일되어진 바이너리 파일을 가져 왔기 때문에 단지 압축을 풀어주기만 하면 된다. 이 프로그램을 자신의 시스템의 다른 유저들도 사용하게 하기를 원한다면 다음의 디렉토리로 파일들을 복사하도록 하자.

% cp vncviewer vncserver vncpasswd Xvnc /usr/local/bin
로컬에서 자바로 만들어진 VNC 뷰어를 사용할 예정이라면 ‘classes’디렉토리의 내용들을 ‘/usr/local/vnc/classes’ 디렉토리에 카피하도록 하자.
% mkdir -p /usr/local/vnc/classes
% cp classes/* /usr/local/vnc/classes

VNC를 사용해보자.

우선 실행 가능한 파일들이 4개가 있다. 각각을 살펴 보도록 하자.
vncviewer 이 파일은 이름대로 뷰어이다. 클라이언트 프로그램이며 자바를 이용하여 X-window에서 실행 가능하다.
vncserver 이 파일은 ‘Xvnc’서버를(사용자의 데스크탑에서..) 실행 시키기 편리하도록 작성하여 놓은 펄(perl) 스크립트 파일이다.
vncpasswd ‘VNC server’가 실행되고 이 서버로 접근할 때에는 보안을 위해서 사용자가 패스워드를 지정하도록 하고 있다. 이 프로그램은 처음으로 ‘VNC server’가 실행될 때에 자동 실행 되도록 되어 있다.
Xvnc 실질적인 ‘VNC server’이다. 우리는 이 프로그램을 실행 시키기 위해 ‘vncserver’를 사용한다.

‘VNC viewer’를 사용하기 위해서는 먼저 ‘VNC server’가 실행되어져 있어야 한다. 다음과 같이 실행 시켜보자.

113% liks@doit:~/WRITE/WORK/vnc_x86_linux_2.0> ./vncserver
Password:
Verify:

New ‘X’ desktop is doit:1

Starting applications specified in /home/users4/liks/.vnc/xstartup
Log file is /home/users4/liks/.vnc/doit:1.log

114% liks@doit:~/WRITE/WORK/vnc_x86_linux_2.0>

’New ‘X’ destop is doit:1’의 의미는 doit (사용자의 컴퓨터)이라는 호스트에 1번 데스크탑이 생성되었다는 뜻이다. ‘vncserver’가 실행되면 ‘ps’ 명령어로 ‘Xvnc’가 실행 중인 것을 확인할 수 있다.

‘vncviewer’를 이용하여 확인하여 보자.

‘VNC server :’ 의 빈칸에는 ‘localhost’라고 적어도 상관은 없다. 도메인을 가지고 있다면 도메인 이름을 넣어도 된다. ‘:1’은 접속할 VNC-server 의 세션( session)번호를 의미한다.
패스워드 창에서 미리 정해 두었던 패스워드를 성공적으로 입력하고 나면 지금 사용하고 있는 엑스 윈도우 데스크탑과 똑같은 모양의 윈도우 생기면서 그 안에서 모든 것이 데스크탑 안에서와 같이 작동하는 것을 확인할 수 있을 것이다. 이것은 ‘vncviewer’ 바깥 쪽의 윈도우 메니져와 똑같이 작동한다. 마치 로그인을 하나 더한 것과 효과는 같다.

지금은 리눅스 로컬머신에서만 테스트를 해보았지만 원거리의 윈도우 머신에서 윈도우용 ‘vncviewer’를 사용하여 자신의 엑스윈도우 데스크탑 화면으로 작업할 수 있다는 것은 정말 커다란 매력이 될 것이다.

웹브라우져를 이용해 vnc-server에 접속하기

여행중에 자신의 엑스윈도우 데스크탑에 접속해야 하는 일이 갑자기 생긴다면..?

사용하려는 컴퓨터에 웹브라우져만을 사용할 수 있는 상황이라면 어떻게 할 수 있을까.. VNC의 공식 홈페이지에서 해당 플랫폼의 뷰어를 다운로드 받아서 사용할 수도 있겠지만 아무래도 시간이 걸리게 되는 것은 어쩔 수 없을 것이다.웹브라우져를 ‘vncviewer’대신으로 사용하는 방법을 알아 보도록 하자. 물론 이러한 경우에는 자신의 컴퓨터가 고정된 IP 어드레스를 가지고 있고 인터넷에 연결되어 있어야 가능하다.

‘vncserver’는 필요에 따라 동시에 수십 여 개 까지도 실행 가능하다 어디까지나 사용자의 시스템 사양이 문제가 되겠지만.. ‘vncserver’가 처음에 실행될 때에는 ‘5801’포트를 사용한다. 그리고 아직 첫 번째 세션(session)의 실행이 끝나지 않은 상태에서 다시 실행되면 두 번째 세션은 다음포트인 ‘5802’포트를 사용하게 된다. 웹브라우져를 이용해서 ‘vncserver’에 접속하려면 우리는 이포트 번호를 반드시 알고 있어야만 한다. 접속하는 방법은 다음과 같다.

http://[접속하고자 하는 컴퓨터의 IP주소 or 도메인네임]:포트번호

Ex http://doit.ajou.ac.kr:5801
http://202.30.12.245:5801

패스워드로그인 과정이 끝나면 ‘vncviewer’에 비해 화질은 떨어지지만 제대로 작동되는 자신의 엑스 윈도우 데스크탑 화면을 볼 수 있을 것이다. 자바 애플릿으로 구현되어 졌고 웹 브라우저 상에서 동작하기 때문에 느린 감이 없지는 않지만 간단한 작업은 충분히 할 수 있다. 좀더 미려한 화면을 원한다면 ‘vncviewer’를 사용하면 될 것이다.

VNC 활용하기

필자는 VNC를 친구들과 리눅스용 테트리스 게임을 할 때에 즐겨 사용한다. 학교의 동아리방에는 10대의 컴퓨터가 있는데 리눅스가 설치된 컴퓨터 두 대가 있고 나머지는 모두 MS 윈도우 시스템이다. 테트리스 게임을 위해 사용한 프로그램은 ‘xtris’로 네트웍 플레이를 지원하는 프로그램이다. 명수의 제한은 몇 명까지 있는지는 모르겠다.
(10명이 모두 동시에 플레이한적도 있다.) 우선 ‘xtris’를 친구들과 즐겁게 플레이하기 위해서는 다음과 같은 조그마한 준비 과정이 필요하다.

우선 VNC홈페이지 (http://www.uk.research.att.com/vnc/download.html)에 가서 win32용 VNC 프로그램을 다운로드 받아온다. 그런 다음 압축을 풀어서 ‘vncviewer’를 실행 시킬 수 있도록 준비한다. 리눅스를 사용하는 사람은 게임을 함께 할 사람 수만큼 ‘vncserver’를 띄워 놓으면 된다. ‘xtris’를 네트웍 플레이로 즐기기 위해서는 서버가 필요한데 서버는 ‘xtris’를 실행 중에 있는 모든 컴퓨터가 될 수 있다.

제일 처음으로 게임을 시작하는 사람은 ‘xtris -n <사용할 닉네임>’ 으로 ‘xtris’를 실행하고 그 다음부터는 ‘xtris -n <사용할 닉네임> <접속할 서버이름>’을 타이핑한다. 여기에서 ‘<접속할 서버이름>’은 ‘localhost’로 적어주면 된다. ‘xtris’가 실행되고 있는 다른 컴퓨터의 IP address나 도메인네임을 입력하여도 상관없다. 사람들이 ‘xtris’서버에 하나씩 접속하게 되면 새로운 테트리스창이 추가된다.모두가 접속하였으면 왼쪽 하단의 스타트버튼을 아무나 클릭하면 즐거운 게임이 시작된다. 필자 같은 경우는 주로 10승먼저 하기 같은 음료수 내기 게임을 즐긴다. ^_^;

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
우리가 깊이 사랑하는 모든 것들은 언젠가 마침내 우리 자신의 한 부분이 된다. (헬렌켈러)