インストール - VNC

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

VNC(Virtual Network Computing)は、ネットワーク上のコンピュータを遠隔操作するためのデファクトスタンダードなソフトウェアである。
VNCは、様々なOSで開発されているため、インストールされているPCはOSの種類に関係なく操作することができる。


VNCサーバのインストール

Windows

VNCの公式Webサイトにアクセスして、VNCサーバ(EXE x86/x64)をダウンロードする。
ダウンロードしたVNCサーバをダブルクリックして表示される画面通りにインストールする。

RHEL

以下のコマンドを実行して、VNCサーバをインストールする。

sudo dnf install tigervnc-server


Firewalldを有効にしている場合は、VNCサービスの許可が必要となる。

sudo firewall-cmd --permanent --add-service=vnc-server
sudo firewall-cmd --reload


VNC接続を設定したい任意のユーザでログインして、VNCパスワードを設定した後に、VNCサーバを起動する。

# VNC用パスワード設定
sudo vncpasswd

Password:     <- パスワードを設定する
Verify:       <- 確認のため再度パスワードを入力する


次に、ディスプレイ番号:1、解像度:1024x768、色深度:24でVNCサーバを起動する。

sudo vncserver :1 -geometry 1024x768 -depth 24


起動したVNCプロセスを停止する場合は、ディスプレイ番号を指定して停止する。

sudo vncserver -kill :1


SUSE

標準のVNCサーバの使用

SUSEにおいて、XDMCPプロトコルをサポートするディスプレイマネージャを使用している場合にのみ、VNC接続ができる。

  • GNOMEを使用している場合
    1. [YaST2] - [ネットワークサービス] - [Remote Administoration(VNC)]を選択して、以下の2項目の設定を行う。
    • [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
    • [ファイアーウォールでポートを開く]チェックボックスにチェックを入力する。

  • KDEを使用している場合
    gdm、lxdm、lightdmはXDMCPをサポートしているが、KDE ​​5標準のディスプレイマネージャsddmはXDMCPをサポートしていないので、真っ黒な画面になる。

    1. まず、[YaST2] - [Alternatives] - [default-displaymanager]項目にフォーカスを当てて[編集]ボタンを押下する。
    2. 編集画面にて、LightDMを選択する。
    3. 次に、VNCサーバをセットアップする。
      [YaST2] - [ネットワークサービス] - [Remote Administoration(VNC)]を選択して、以下の2項目の設定を行う。
      • [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
      • [ファイアーウォールでポートを開く]チェックボックスにチェックを入力する。


XRDPの使用

ここでは、GNOMEを使用しているものとする。
まず、XRDPをインストールする。

sudo zypper install xrdp


XRDPの状態を確認する場合は、以下のコマンドを実行する。

sudo systemctl status xrdp
または
ss –atnp | grep 3389


次に、XRDPの設定ファイルである/etc/xrdp/xrdp.iniファイルにおいて、最下行に以下の設定を追記する。 この設定ファイルでは、セキュリティやリスニングアドレス等のグローバル構成の設定を行うことができる。 また、様々なXRDPログインセッションを作成することもできる。

# /etc/xrdp/xrdp.iniファイル
・
・
・
exec gnome-session


上記の行を追加した後、XRDPサービスを再起動する。

sudo systemctl restart xrdp


必要なら、XRDPの自動起動を有効にする。

sudo systemctl enable xrdp


XRDPは、TCPポートの3389番ポートで動作するため、ファイアウォールのポート開放を行う。

sudo firewall-cmd --add-port=3389/tcp --permanent
sudo firewall-cmd --reload



Raspbian

Raspberry Piには、予め、VNCサーバの機能が組み込まれているので、VNCの機能を有効化することでVNCサーバの機能を利用できる。
[設定] - [Raspberry Piの設定] - [インターフェイス]タブ - [VNC]項目を[有効]にする。


VNCサーバ (Wayland向け)

Waylandの有効化 (オプション)

Waylandを有効にする。

sudo raspi-config nonint do_wayland W2


VNC機能を有効にする。

# 0 : 有効
# 1 : 無効
sudo raspi-config nonint do_vnc 0


wayvncのインストール

wayvncは、wlrootsベースのWaylandコンポジタ用のVNCサーバである。(GNOME, KDE, Westonはサポートされていない)
実行中のWaylandセッションにアタッチして、仮想入力デバイスを作成、RFBプロトコル経由で単一のディスプレイを公開する。

Waylandセッションはヘッドレスセッションのため、物理ディスプレイを接続せずにwayvncを実行することも可能である。

パッケージ管理システムからインストール
# RHEL
sudo dnf install wayvnc

# SUSE
sudo zypper install wayvnc


ソースコードからインストール

wayvncのビルドに必要なライブラリをインストールする。

# RHEL
sudo dnf install meson gcc ninja-build pkg-config egl-wayland egl-wayland-devel    \
                 mesa-libEGL-devel mesa-libEGL libwayland-egl libglvnd-devel       \
                 libglvnd-core-devel libglvnd mesa-libGLES-devel mesa-libGLES      \
                 libxkbcommon-devel libxkbcommon libwayland-client                 \
                 pam-devel pixman-devel libgbm-devel libdrm-devel scdoc            \
                 libavcodec-free-devel libavfilter-free-devel libavutil-free-devel \
                 turbojpeg-devel wayland-devel gnutls-devel jansson-devel

# SUSE
sudo zypper install meson gcc ninja pkg-config scdoc libgnutls-devel pam-devel libglvnd-devel \
                    libjpeg-turbo libpixman-1-0-devel libjansson-devel libxkbcommon-devel     \
                    Mesa-libEGL-devel Mesa-libGLESv1_CM-devel Mesa-libGLESv2-devel Mesa-libGLESv3-devel \
                    libdrm-devel libgbm-devel wayland-devel wayland-protocols-devel \
                    ffmpeg-4-libavcodec-devel ffmpeg-4-libavfilter-devel ffmpeg-4-libavutil-devel


wayvncのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf wayvnc-<バージョン>.tar.gz
cd wayvnc-<バージョン>


wayvncをビルドおよびインストールする。

meson build --prefix=<WayVNCのインストールディレクトリ>
ninja -C ./build -j $(nproc)
ninja -C ./build install


必要ならば、~/.profileファイル等に環境変数PATHを追記する。

vi ~/.profile


 # ~/.profileファイル
 
 export PATH="/<wayvncのインストールディレクトリ>/bin:$PATH"


wayvncサーバは、デフォルトではlocalhostからの接続しか受け付けない。
そのため、任意のインターフェースからの接続を受け入れるには、アドレスを0.0.0.0に設定する。

wayvnc 0.0.0.0


パブリックネットワークやインターネット上では、ユーザ認証を有効にしないこと。
wayvncの接続を保護する最善の方法は、localhostでリッスンしながらSSHトンネリングを使用することである。
また、wayvncに接続する際にユーザを認証することもできる。

暗号化と認証

VeNCrypt (TLS)

TLSには、X509秘密鍵と証明書が必要となる。
証明書付きの自己署名鍵は、以下に示すコマンドを実行して生成することができる。

cd ~/.config/wayvnc

openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -sha384 \
            -days 3650 -nodes -keyout tls_key.pem -out tls_cert.pem \
            -subj /CN=localhost \
            -addext subjectAltName=DNS:localhost,DNS:localhost,IP:127.0.0.1
cd -


上記のコマンドにおいて、localhostと127.0.0.1は、それぞれ公開用のホスト名とIPアドレスに置き換えること。

次に、認証情報を含む設定ファイル (~/.config/wayvnc/configファイル) を作成する。
または、任意の場所に配置して、wayvncコマンドに-configオプションを付加して設定ファイルを読み込むこともできる。

# ~/.config/wayvnc/configファイル

use_relative_paths=true
address=0.0.0.0
enable_auth=true
username=<ユーザ名>
password=<パスワード>
private_key_file=tls_key.pem
certificate_file=tls_cert.pem


Raspberry Piを再起動する。

sudo systemctl reboot


RSA-AES

RSA-AESセキュリティタイプは、EAXモードでRSAとAESを組み合わせて、盗聴やMITMに強い安全な認証と暗号化を提供する。

その主な弱点は、最初の使用時にユーザがサーバの認証情報を検証しなければならないことである。
その後、サーバの認証情報が変更された場合、クライアントソフトウェアはユーザに警告する必要がある。
これはSSHで採用されているTOFU (Trust on First Use) スキームである。

RSA-AESを有効にするには、RSA鍵を生成する必要がある。

mkdir -p ~/.config/wayvnc/config
ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N ""


また、rsa_private_key_fileパラメータを設定することにより、このファイルのパスをwayvncに伝える必要がある。

# ~/.config/wayvnc/configファイル

use_relative_paths=true
rsa_private_key_file=rsa_key.pem
enable_auth=true
address=0.0.0.0      # オプション
username=<ユーザ名>    # オプション
password=<パスワード>  # オプション


RSAと組み合わせてTLS用の認証情報を追加することもできる。
これは、クライアントが選択する。

Raspberry Piを再起動する。

sudo systemctl reboot


wayvncctlコントロールソケット

実行時のインタラクションとコントロールを容易にするため、wayvncは$XDG_RUNTIME_DIR/wayvncctl (または、フォールバックとして/tmp/wayvncctl-$UID) にunixドメインソケットを開く。
クライアントは接続して、実行中のwayvncインスタンスへの問い合わせと制御のためにjsonフォーマットのIPCメッセージを交換することができる。

コマンドラインからこのコントロールソケットを操作するには、wayvncctlユーティリティを使用する。

IPCプロトコルと利用可能なコマンドの詳細はwayvnc(1) manページ、コマンドラインインタフェースの詳細はwayvncctl(1) manを参照すること。

wayvncで様々なイベントが発生した時にコマンドを実行するために使用できる便利なイベントループモードも存在する。
詳細を知りたい場合は、examples/event-watcherを参照すること。

Raspberry Piの場合

まず、WayVNCのバージョンを確認する。

wayvnc --version


次に、VNCを有効にする。

# 0 : 有効
# 1 : 無効
sudo raspi-config nonint do_vnc 0


WayVNC 0.7以降の場合

WayVNC 0.7.0以降では、RealVNCと互換性のあるRSA-AES認証が追加されたため、適切な証明書を生成することによりRealVNCから接続できる。

まず、RSA-AES証明書を生成する。

# RSA-AESの場合
ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N ""


~/.config/wayvnc/configファイルに、以下に示す設定を追記する。

# ~/.config/wayvnc/configファイル

use_relative_paths=true
address=0.0.0.0       # オプション (全てのIPアドレスから受け付ける場合)
enable_auth=true
username=<ユーザ名>    # オプション
password=<パスワード>  # オプション

rsa_private_key_file=rsa_key.pem
use_relative_paths=true
# または
rsa_private_key_file=/home/<ユーザ名>/.config/wayvnc/rsa_key.pem


変更を反映させるため、WayVNCを再起動、または、Raspberry Piを再起動する。

WayVNC 0.6以前の場合

RealVNC Viewerを使用してWayVNC 0.6以前のものに接続する場合、認証を無効にする必要がある。
WayVNCはVeNCrypt (TLS) 暗号化方式を採用している。

認証を無効にするには、~/.config/wayvnc/configファイルにあるenable_authfalseに指定する。
または、enable_authの設定をコメントアウトする。

※注意
認証を無効にしてインターネット経由の接続を使用する場合、セキュリティ上の理由から推奨されないことに注意する。


VNC Viewer

VNC Viewerのインストール

Windows

VNCの公式Webサイトにアクセスして、VNC Viewer(EXE x86/x64)をダウンロードする。
ダウンロードしたVNC Viewerをダブルクリックして表示される画面通りにインストールする。

RHEL / SUSE

VNCの公式Webサイトにアクセスして、VNC Viewer(Standalone x64)をダウンロードする。
以下のコマンドを実行して、VNC Viewerを起動する。(Standalone版はインストール不要)

./VNC-Viewer-<バージョン名>-Linux-x64


VNC Viewerの起動を簡単にするため、以下のように、.bashrcファイルにエイリアスの設定を行ってもよい。

alias vncviewer='./VNC/VNC-Viewer-6.20.113-Linux-x64'


Raspberry Pi

ここでは省略する。

デスクトップエントリファイルの作成

デクトップエントリファイルを作成する。

vi ~/.local/share/applications/realvnc-vncviewer.desktop


 # realvnc-vncviewer.desktopファイル
 
 [Desktop Entry]
 Encoding=UTF-8
 Name=VNC Viewer
 Name[de]=VNC Viewer
 Name[es]=VNC Viewer
 Name[fr]=VNC Viewer
 Name[pt]=VNC Viewer
 GenericName=VNC Viewer
 Comment=Connect to computers running VNC Server
 Comment[de]=Verbindung zu Computern mit aktivem VNC Server herstellen
 Comment[es]=Conectarse a equipos que ejecutan VNC Server
 Comment[fr]=Connecter les ordinateurs sous VNC Server
 Comment[pt]=Conecte-se a computadores com o VNC Server em execução
 Exec="/home/ユーザ名/VNC/VNC-Viewer-6.20.529-Linux-x64" %f
 Type=Application
 Icon=/home/ユーザ名/VNC/vncviewer.png
 Categories=Application;Network;RemoteAccess;
 MimeType=application/vnc-shortcut
 X-Ayatana-Desktop-Shortcuts=NewConnection
 
 [NewConnection Shortcut Group]
 Name=New Connection
 Name[de]=Neue Verbindung
 Name[es]=Nueva conexión
 Name[fr]=Nouvelle connexion
 Name[pt]=Nova conexão
 Exec="/home/ユーザ名/VNC/VNC-Viewer-6.20.529-Linux-x64"
 TargetEnvironment=Unity


なお、アイコンファイルは下記のものをダウンロードすること。

Vncviewer.png



VNC Viewerの設定

VNC Viewerを起動し、[Enter a VNC Server address or serach]欄にVNCサーバをインストールしたOSのIPアドレスを入力する。
その時、OSのユーザ名とパスワードを求められるので入力する。
接続が成功すれば、OSのデスクトップが表示される。

※注意
もし、VNC Viewerにおいて、"Cannot currently show the desktop"エラーが表示された場合は、
VNCサーバ側のランレベルを5(デスクトップモード)に変更して再起動する。