Raspberrypi 2021. 3. 8. 23:03

라즈베리파이 VNC 설정

VNC (Virtual Network Computing)

  • RFB 프로토콜 방식을 이용해 화면 정보를 서버에서 클라이언트로 전송한다.

    • RFB 프로토콜 (Remote Frame Buffer)

      • 프레임 버퍼 레벨에서 동작한다.

      • OS에 관계없이 모든 OS에서 프레임 단위로 통신한다.

  • SSH보다 느리지만 화면을 보고 싶을 때 유용하다.


라즈베리파이에서 vncserver 실행

  • 라즈비안에 기본적으로 vncserver 프로그램이 있기 때문에, 다음과 같이 입력해주면 바로 실행된다.

    vncserver
    VNC(R) Server 6.7.2 (r42622) ARMv6 (May 13 2020 19:34:10)
    Copyright (C) 2002-2020 RealVNC Ltd.
    RealVNC and VNC are trademarks of RealVNC Ltd and are protected by trademark
    registrations and/or pending trademark applications in the European Union,
    United States of America and other jurisdictions.
    Protected by UK patent 2481870; US patent 8760366; EU patent 2652951.
    See https://www.realvnc.com for information on VNC.
    For third party acknowledgements see:
    https://www.realvnc.com/docs/6/foss.html
    OS: Raspbian GNU/Linux 10, Linux 5.10.17, armv7l
    
    On some distributions (in particular Red Hat), you may get a better experience
    by running vncserver-virtual in conjunction with the system Xorg server, rather
    than the old version built-in to Xvnc. More desktop environments and
    applications will likely be compatible. For more information on this alternative
    implementation, please see: https://www.realvnc.com/doclink/kb-546
    
    Running applications in /etc/vnc/xstartup
    
    VNC Server catchphrase: "Flood optimal alias. Patrol Ramirez Spain."
                signature: b3-19-aa-c5-b2-82-33-bd
    
    Log file is /home/pi/.vnc/raspberrypi:1.log
    New desktop is raspberrypi:1 (192.168.0.10:1)
    • 마지막 줄의 192.168.0.10:1이 의미하는 것은 라즈베리파이 기기의 ip:디스플레이 번호 인 것 같다.
  • 옵션으로 해상도나 디스플레이 번호를 설정할 수 있다.

    vncserver -geometry 1280x1024 :3
    • -geometry 1280x1024 : 해상도를 설정한다.

    • :3 : 디스플레이 번호를 3번으로하여 서버를 연다.

  • 끄는 방법

    vncserver -kill :1
    • -kill :1 : 1번 디스플레이 서버를 끈다.

다른 기기에서 접속

  • VNC 뷰어를 설치해야 한다.

    • vncserver 명령어의 출력 결과 3번째 줄에 RealVNC 관련 언급이 있어서 해당 프로그램으로 실행해보기로 했다.

    • RealVNC 설치

  • VNC 뷰어를 실행하고, 주소를 입력하는 곳에다가 vncserver 명령어 출력 결과의 마지막 줄에 있던 ip:1을 입력한다. (위의 경우 192.168.0.10:1)

    • 포트번호처럼 :1을 썼지만, 이는 디스플레이 번호를 의미한다.

    • vnc의 기본 포트는 5900번이고, 여기에 디스플레이 번호를 더한게 포트 번호가 된다.

    • 즉 RealVNC에서 주소표시줄에 ip:1로 연결했을 경우 로그인 창에서도 나타나듯이 포트번호가 5901인 ip:5901로 연결된 것을 알 수 있다.

  • Continue를 클릭하고, 라즈베리파이를 설치했을 때 설정한 이름과 비밀번호를 입력하면 연결된다.

  • 한글 입력법은 링크 참고


라즈베리파이 부팅 시 vncserver 자동 실행

  • /etc/init.d/ 디렉토리에 스크립트를 작성해준다.

    • 서비스 간에 이름이 겹칠까봐 파일명을 myvnc로 만들었다.

    • vim으로 편집하는데, 방향키가 제대로 적용이 안되면 많이 불편하다.

    • root 권한이 아니면 저장할 수가 없어서 다음 명령어로 편집했다.

      sudo vi myvnc

      /etc/init.d/myvnc

      #!/bin/sh
      ### BEGIN INIT INFO
      # Provides:        vncserver
      # Required-Start:    networking
      # Required-Stop:    networking
      # Default-Start:    2 3 4 5
      # Default-Stop:        0 1 6
      # Short-Description:    Start/Stop vncserver
      ### END INIT INFO
      
      VNCUSER='pi'
      GEOMETRY="1280x1024"
      
      case "$1" in
        start)
        echo "Starting vncserver for $VNCUSER"
        su $VNCUSER -c "vncserver -geometry $GEOMETRY :1"
        ;;
      
        stop)
        echo "Stopping vncserver for $VNCUSER"
        su $VNCUSER -c "vncserver -kill :1"
        ;;
      
        restart)
        $0 stop
        $0 start
        ;;
      
        *)
        echo "Usage: /etc/init.d/myvnc {start | stop}"
        exit 1
        ;;
      esac
      
      exit 0
    • start, stop, restart 명령을 지원하는 스크립트이다.

    • 시작 시 1번 디스플레이 서버를 열도록 한다.

  • 시스템 시작 시 자동 실행 설정

    • 권한 변경 및 update-rc.d에 등록

      sudo chmod 755 /etc/init.d/myvnc
      sudo update-rc.d myvnc defaults
    • 나중에 해제하려면 다음 명령어를 입력한다.

      sudo update-rc.d myvnc remove
  • reboot 후 확인

    ls /etc/rc*.d | grep myvnc
    service myvnc status
    systemctl status myvnc

참고