インストール - VNC
概要
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を使用している場合
- [YaST2] - [ネットワークサービス] - [Remote Administoration(VNC)]を選択して、以下の2項目の設定を行う。
- [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
- [ファイアーウォールでポートを開く]チェックボックスにチェックを入力する。
- [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
- KDEを使用している場合
- gdm、lxdm、lightdmはXDMCPをサポートしているが、KDE 5標準のディスプレイマネージャsddmはXDMCPをサポートしていないので、真っ黒な画面になる。
- まず、[YaST2] - [Alternatives] - [default-displaymanager]項目にフォーカスを当てて[編集]ボタンを押下する。
- 編集画面にて、LightDMを選択する。
- 次に、VNCサーバをセットアップする。
[YaST2] - [ネットワークサービス] - [Remote Administoration(VNC)]を選択して、以下の2項目の設定を行う。- [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
- [ファイアーウォールでポートを開く]チェックボックスにチェックを入力する。
- [セッション管理機能付きのリモート管理を許可する]ボタンにチェックを入力する。
- gdm、lxdm、lightdmはXDMCPをサポートしているが、KDE 5標準のディスプレイマネージャsddmはXDMCPをサポートしていないので、真っ黒な画面になる。
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_auth
をfalse
に指定する。
または、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
なお、アイコンファイルは下記のものをダウンロードすること。
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(デスクトップモード)に変更して再起動する。