본문 바로가기

Programming/IoT_Embedded

라즈베리파이 모니터없이 원격에서 화면 보기(VNC 화면 공유)


이전 포스트에서 라즈베리파이 개발환경 꾸미기에 대해서 시리즈로 연재했는데요,
주요 컨셉은 라즈베리파이를 하나의 컴퓨터 처럼 모니터, 키보드, 마우스 연결해서 쓰는 형식이 아닌
개발보드로 연결해서 터미널로만 연결해서 사용할 수 있는 방법에 대해서 알아 보았어요.

  1. 라즈비안 OS 설치하기
  2. 키보드 모니터 없이 라즈베리파이 Login 하기
  3. Wifi 설정 / 기본 설정하기
  4. 파이썬 + Eclipse로 라즈베리파이 개발하기
  5. 라즈베리파이에 NodeJs 설치하기
  6. NodeJs + Eclipse로 라즈베리파이 개발하기
  7. C/C++ Cross Compiler(Tool Chain) 설치하기
  8. Eclipse + C/C++ 로 라즈베리파이 개발하기

그런데, 때에 따라서는 라즈베리파이 데스크탑 환경, 즉 GUI를 출력하는 프로젝트를 해야 할때가 있는데요,
이때에는 별도의 모니터를 라즈베리파이에 연결하지 않으면 화면을 볼 수가 없으니 개발을 할 수 가 없겠죠.
터미널에서는 실행되지 않는 프로세스들도 있구요.

이번 포스트에서는 바로 이럴때 라즈베리파이에 굳이 모니터를 연결하지 않고도 데스크탑(GUI) 출력을
확인할 수 있는 방법에 대해서 다뤄보려고 합니다.
사용할 수 있는 기술은 여러가지가 있는데, 여기서는 VNC라는 것을 이용하는 방법을 소개합니다.


결론적으로 말씀드리면 VNC를 이용해서 라즈베리파이의 데스크탑 환경을 원격의 개발 PC에서 보고 조작할때 쓸 수 있는 방법은
크게 2가지 입니다.
하나는, 새롭게 접속할때 마다 새로운 데스크탑을 띄우는 방식과
나머지 하나는, 기존에 띄워둔 데스크탑을 그대로 공유해서 개발 PC에 띄우는 방식입니다.
두번째 방식은 여러 개발자가 하나의 화면을 공유하는데도 응용할 수 있습니다.


PC에 VNC 클라이언트 설치
우선 어떤 방식으로 접근을 하든 개발PC에는 VNC 클라이언트 프로그램을 설치해야 합니다.
아래의 사이트에서 윈도우, 맥, 리눅스 용 프로그램을 다운로드 받을 수 있습니다.



VNC View를 받아도 되고, VNC를 받아서 View만 깔아도 되고 그렇습니다.

설치는 인스톨러로 설치되기 때문에 윈도우나 맥이 다르지 않습니다.



라즈베리파이에 VNC 서버 설치
라즈베리파이에는 VNC 서버를 설치합니다.
앞서 말씀 드린 대로 데스크탑화면을 접속할때 마다 새로 띄우느냐, 아니면 기존에 띄워진 화면을 공유하느냐에 따라서
사용하는 서버가 다른데요.
“tightvncserver”가 새로띄우는, “x11vnc”가 기존것을 공유하는 것입니다.
필요에 따라 골라서 설치하거나, 일단 설치해두고 필요한 것만 써도 될것 같습니다.

$ sudo apt-get install tightvncserver
$ sudo apt-get install x11vnc


라즈베리파이에서 VNC 서버 실행
서버실행은 앞서 설명한 대로 로그인 할때 마다 새로운 데스크탑 화면을 띄울것인지,
맨 처음 로그인한 화면을 나중에 로그인 할 때도 같은 화면을 띄울것인지에 따라 다릅니다.
새로운 화면을 띄우는 방식이 기본적으로 사용되는 방식이고 속도는 더 빠릅니다.
모든 로그인한 사람이 하나의 화면을 공유해서 보는 방식은 아무래도 속도가 느릴 수 밖에 없습니다.

  • 새로운 화면 띄우는 방식
$ vncserver :1

뒤에 붙이는 숫자는 클라이언트 접속할때 필요합니다.

  • 같은 화면 공유하는 방식
$ x11vnc

x11vnc를 기본으로 실행하면 경고가 뜹니다. 같은 네트워크에 있는 누구든 이 화면을 볼 수 있다는 내용인데요,
경고 내용을 잘 읽어보시고 필요에 따라 비밀번호를 설정하시면 됩니다.


PC에서 VNC 클라이언트 접속

앞서 설치한 VNC 클라이언트를 실행해서 라즈베리파이에 접속합니다.

  • vncserver 인 경우


vncserver에 접속하는 경우에는 IP주소 뒤에 콜론과 숫자를 붙이는데,
여기에 붙이는 숫자는 앞서 서버 실행할때 지정한 숫자와 같습니다.


  • x11vnc 인 경우


x11vnc인 경우는 그냥 라즈베리파이 IP 주소만 입력하면 됩니다.

아예 라즈베리파이에 모니터가 연결되어 로그인되어 있지 않은상태에서
x11vnc로 접속하면 화면이 뭘 할 수 도 없을 만큼 너무 작게 나올 수 도 있습니다.

최초 x윈도우를 띄울때 실제 모니터가 연결되어 있지 않기 때문에
자동으로 해상도를 가장 작게 설정되기 때문인데요, 

이것은 화면 해상도를 지정해주면 됩니다.
아래 설정파일을 vi나 nano같은 편집기로 열어 줍니다.

$ sudo vi  /boot/config.txt 


hdmi_force_hotplug = 1
hdmi_group = 2
hdmi_mode = 16 #원하는 설정 값으로 수정
hdmi_drive = 1 

파일의 내용 중의 위의 내용을 찾아 맨앞에 붙은 ‘#’을 제거해서 주석을 해제해주고
‘hdmi_mode’의 값을 원하는 해상도의 값으로 지정해 주면 됩니다.
해상도 값은 아래의 표에서 찾아서 해당하는 숫자를 지정하면 되구요.
위의 예시에서는 16을 설정했으니 1024x768 60hz 라는 뜻이네요.

hdmi_mode=1    640x350    85 Hz
hdmi_mode=2    640x400    85 Hz
hdmi_mode=3    720x400    85 Hz
hdmi_mode=4    640x480    60 Hz
hdmi_mode=5    640x480    72 Hz
hdmi_mode=6    640x480    75 Hz
hdmi_mode=7    640x480    85 Hz
hdmi_mode=8    800x600    56 Hz
hdmi_mode=9    800x600    60 Hz
hdmi_mode=10   800x600    72 Hz
hdmi_mode=11   800x600    75 Hz
hdmi_mode=12   800x600    85 Hz
hdmi_mode=13   800x600   120 Hz
hdmi_mode=14   848x480    60 Hz
hdmi_mode=15   1024x768   43 Hz  DO NOT USE
hdmi_mode=16   1024x768   60 Hz
hdmi_mode=17   1024x768   70 Hz
hdmi_mode=18   1024x768   75 Hz
hdmi_mode=19   1024x768   85 Hz
hdmi_mode=20   1024x768  120 Hz
hdmi_mode=21   1152x864   75 Hz
hdmi_mode=22   1280x768          Reduced blanking
hdmi_mode=23   1280x768   60 Hz
hdmi_mode=24   1280x768   75 Hz
hdmi_mode=25   1280x768   85 Hz
hdmi_mode=26   1280x768  120 Hz  Reduced blanking
hdmi_mode=27   1280x800          Reduced blanking
hdmi_mode=28   1280x800   60 Hz 
hdmi_mode=29   1280x800   75 Hz 
hdmi_mode=30   1280x800   85 Hz 
hdmi_mode=31   1280x800  120 Hz  Reduced blanking
hdmi_mode=32   1280x960   60 Hz 
hdmi_mode=33   1280x960   85 Hz 
hdmi_mode=34   1280x960  120 Hz  Reduced blanking
hdmi_mode=35   1280x1024  60 Hz 
hdmi_mode=36   1280x1024  75 Hz 
hdmi_mode=37   1280x1024  85 Hz 
hdmi_mode=38   1280x1024 120 Hz  Reduced blanking
hdmi_mode=39   1360x768   60 Hz 
hdmi_mode=40   1360x768  120 Hz  Reduced blanking
hdmi_mode=41   1400x1050         Reduced blanking
hdmi_mode=42   1400x1050  60 Hz 
hdmi_mode=43   1400x1050  75 Hz 
hdmi_mode=44   1400x1050  85 Hz 
hdmi_mode=45   1400x1050 120 Hz  Reduced blanking
hdmi_mode=46   1440x900          Reduced blanking
hdmi_mode=47   1440x900   60 Hz 
hdmi_mode=48   1440x900   75 Hz 
hdmi_mode=49   1440x900   85 Hz 
hdmi_mode=50   1440x900  120 Hz  Reduced blanking
hdmi_mode=51   1600x1200  60 Hz 
hdmi_mode=52   1600x1200  65 Hz 
hdmi_mode=53   1600x1200  70 Hz 
hdmi_mode=54   1600x1200  75 Hz 
hdmi_mode=55   1600x1200  85 Hz 
hdmi_mode=56   1600x1200 120 Hz  Reduced blanking
hdmi_mode=57   1680x1050         Reduced blanking
hdmi_mode=58   1680x1050  60 Hz 
hdmi_mode=59   1680x1050  75 Hz 
hdmi_mode=60   1680x1050  85 Hz 
hdmi_mode=61   1680x1050 120 Hz  Reduced blanking
hdmi_mode=62   1792x1344  60 Hz 
hdmi_mode=63   1792x1344  75 Hz 
hdmi_mode=64   1792x1344 120 Hz  Reduced blanking
hdmi_mode=65   1856x1392  60 Hz 
hdmi_mode=66   1856x1392  75 Hz 
hdmi_mode=67   1856x1392 120 Hz  Reduced blanking
hdmi_mode=68   1920x1200         Reduced blanking
hdmi_mode=69   1920x1200  60 Hz 
hdmi_mode=70   1920x1200  75 Hz 
hdmi_mode=71   1920x1200  85 Hz 
hdmi_mode=72   1920x1200 120 Hz  Reduced blanking
hdmi_mode=73   1920x1440  60 Hz 
hdmi_mode=74   1920x1440  75 Hz 
hdmi_mode=75   1920x1440 120 Hz  Reduced blanking
hdmi_mode=76   2560x1600         Reduced blanking
hdmi_mode=77   2560x1600  60 Hz 
hdmi_mode=78   2560x1600  75 Hz 
hdmi_mode=79   2560x1600  85 Hz 
hdmi_mode=80   2560x1600 120 Hz  Reduced blanking
hdmi_mode=81   1366x768   60 Hz 
hdmi_mode=82   1080p      60 Hz 
hdmi_mode=83   1600x900          Reduced blanking
hdmi_mode=84   2048x1152         Reduced blanking
hdmi_mode=85   720p       60 Hz 
hdmi_mode=86   1366x768          Reduced blanking

기타 자세한 설정은  http://elinux.org/RPiconfig 를 참조하시면 됩니다.