VNC は Virtual Network Computing (仮想ネットワークコンピューティング) の略で、ネットワーク上離れたコンピュータを (シェルではなく) グラフィカルなデスクトップ経由でアクセスする機能を提供します。 VNC はプラットフォームに依存しない構造で、任意のオペレーティングシステムからアクセスする機能を提供します。本章では、 vncviewer や Remmina のようなデスクトップクライアントを利用して VNC サーバに接続する方法と、 VNC サーバの操作方法について説明しています。
openSUSE Leap では 2 種類の VNC セッションに対応しています。 1 つはワンタイムセッションと呼ばれ、クライアントからの接続が切れるまで 「有効」 となるセッションです。もう 1 つは永続セッションと呼ばれ、明示的に終了させるまでずっと 「有効」 であり続けるセッションです。
それぞれ異なるポートであれば、両方の種類のセッションを同じマシン内で同時に提供することもできます。ただし、既に開いているセッションの種類を変更することはできません。
vncviewer
クライアント #Edit sourceVNC 接続を受け付けるには、 XDMCP プロトコルに対応したディスプレイマネージャを使用する必要があります。 gdm
, lxdm
, lightdm
は XDMCP に対応していますが、 KDE 5 の既定のディスプレイマネージャである sddm
の場合は、 XDMCP に対応していません。ディスプレイマネージャを変更した場合は、現在の X セッションをログアウトしたあと、下記のコマンドで再起動を行ってください:
>
sudo systemctl restart xdm.service
サーバ側で提供されている VNC サービスに接続するには、クライアントソフトウエアが必要です。 openSUSE Leap での既定は vncviewer
で、 tigervnc
パッケージ内に含まれています。
VNC ビューアを起動してサーバ内のセッションに接続するには、下記のコマンドを使用します:
>
vncviewer jupiter.example.com:1
ディスプレイ番号を指定する代わりに、コロンを 2 つ繋げてポート番号を指定することもできます:
>
vncviewer jupiter.example.com::5901
VNC クライアント側で指定するディスプレイ番号やポート番号は、接続先のマシンで VNC サーバを設定する際に指定したディスプレイ番号やポート番号と同じ値を指定します。詳しくは 4.4項 「永続 VNC サーバセッションの設定」 をお読みください。
--listen
を指定せずに vncviewer
を実行するか、もしくは接続先のホストを指定して実行すると、詳細な接続設定を行うためのウインドウが表示されます。 の欄には、 4.1.1項 「vncviewer コマンドラインを利用した接続」 で指定しているような接続先を指定して、 を押します。
VNC プロトコルでは、様々な種類の暗号化接続 (注: パスワード認証とは全く異なり、通信そのものを暗号化して外部から内容を読み取られないようにする仕組みです) に対応しています。接続時に TLS を使用していないと、 VNC ビューアのウインドウタイトルに 「(Connection not encrypted!)」 (通信が暗号化されていません) というメッセージが表示されるようになっています。
Remmina はモダンで機能の豊富なリモートデスクトップクライアントです。 VNC, SSH, RDP, Spice などの各プロトコルに対応しています。
Remmina を使用するには、まず remmina パッケージをインストールする必要があります。インストールされていない場合は、下記のように実行して Remmina の VNC プラグインと共にインストールを行ってください:
#
zypper in remmina remmina-plugin-vnc
Remmina を起動するには、 remmina
と入力して実行します。
アプリケーションのメインウインドウには、保存されているリモートセッションの一覧が表示されます。ここに新しいリモートセッションを登録して保存しておくことができるほか、保存を行わずに素早く新しいセッションを開始したり、保存したセッションを開始したりすることもできます。このほか、 Remmina のグローバル設定を変更することもできます。
新しいリモートセッションを追加して保存するには、メインウインドウの左上にある を押します。すると、
というウインドウが表示されます。新しく追加するセッションプロファイルに対して、各種の情報を設定します。主なものは下記のとおりです:
プロファイルの名前を指定します。名前はメインウインドウ内の一覧に表示されます。
リモートのセッションに接続する際に使用するプロトコル (例: VNC) を指定します。
リモートサーバの IP アドレスまたはホスト名と、ディスプレイ番号を指定します。
リモートサーバに接続する際の認証情報を設定します。認証を行わない場合は、何も入力しないでください。
お使いの環境の接続速度と品質にあわせて、最適な設定を選択してください。
タブを選択すると、より詳しいオプションを設定することができます。
クライアントとリモートのサーバの間で暗号化を行わない場合は、
を選択してください。選択を行わないと、接続が失敗します。SSH でトンネル接続するような場合や、認証オプションを設定する必要がある場合は、
タブを選択してください。設定が終わったら
を押します。新しいプロファイルがメインウインドウ内に表示されるようになります。以前に保存したセッションから起動することができるほか、接続の詳細を保存せずに素早く接続することもできます。
様々な詳細設定を追加したり保存したりせずにリモートセッションに素早く接続するには、メインウインドウの上部にあるドロップダウンボックスとテキストボックスをお使いください。
まずはドロップダウンリストで通信プロトコルを選択 (例: 「VNC」) して、その後 VNC サーバのホスト名または IP アドレスを入力してください。ディスプレイ番号を指定する場合は、ホスト名または IP アドレスに続いてコロンを入力し、番号を入力してください。入力が終わったら Enter で接続します。
特定のリモートセッションを開くには、セッションの一覧から項目を選んでダブルクリックします。
リモートのセッションはウインドウ内のタブとして表示されます。それぞれのタブが 1 つのセッションに対応しています。また、ウインドウの左側にあるツールバーを利用することで、ウインドウやセッションを管理することができます。ここではフルスクリーンモードやセッションのディスプレイサイズに合わせたウインドウのサイズ変更、そしてセッションに対する特定キー入力の送信や画像品質の設定などを行うことができます。
保存済みのリモートセッションを 編集 するには、 Remmina のメインウインドウ内で名前を右クリックし、 を選択します。それぞれの項目に関する説明は、 4.2.3項 「リモートセッションの追加」 をお読みください。
保存済みのリモートセッションを コピー するには、 Remmina のメインウインドウ内で名前を右クリックし、 を選択します。 ウインドウが表示されたら、プロファイルの名前を変更してください。それ以外にも、必要に応じてオプションを変更してもかまいません。変更が終わったら を押してください。
保存済みのリモートセッションを 削除 するには、 Remmina のメインウインドウ内で名前を右クリックし、 を選択します。削除確認のメッセージが表示されますので、 を押して削除を行ってください。
リモートセッションをコマンドラインから開きたい場合や、バッチファイルから開く際に、メインのアプリケーションウインドウ無しで表示させたい場合は、下記のような書式で実行します:
>
remmina -c プロファイル名.remmina
Remmina の設定ファイルは、ホームディレクトリ内の .local/share/remmina/
ディレクトリ内に保存されます。設定ファイルは名前などとは無関係に付与されます。プロファイルからファイル名を調べたい場合は、 Remmina を起動してからメインウインドウ内のプロファイルを選択し、ウインドウ下部のステータス行に表示されるパスからファイル名を判断してください。
Remmina を起動していない状態であれば、 sle15.remmina
のように、設定ファイルをよりわかりやすいファイル名に変更することができます。もちろん設定ファイルをどこか別のディレクトリにコピーして、 remmina -c
で指定して実行することもできます。
ワンタイムセッションはリモートのクライアントからの接続で起動する仕組みです。クライアントから接続を行うと、サーバ内のグラフィカルなログイン画面を表示し、セッションを開始することができます。また、ログインマネージャ側で対応していれば、デスクトップ環境を選択することもできます。ワンタイムセッションの接続を閉じると、その中で動作していたアプリケーションも終了します。ワンタイム VNC セッションは共有することができませんが、単一のホスト内で複数のセッションを扱うことができます。
› › を選択して起動します。
を選択します。
VNC セッションを Web ブラウザからアクセスできるようにするには、
を選択します。必要であれば、
を選択することもできます (たとえばネットワークインターフェイスが外部ゾーンとして設定されている場合など) 。複数のネットワークインターフェイスが設定されている場合は、 ボタンでネットワークインターフェイスを選択し、そのインターフェイスでだけ開くこともできます。設定を確認して
を押します。この時点で必要なパッケージがインストールされていない場合は、それらのパッケージをインストールするよう承認を求められます。
YaST ではディスプレイマネージャの設定を変更します。設定を反映させるには、いったんお使いのグラフィカルセッションを終了し、ディスプレイマネージャを再起動する必要があります。
openSUSE Leap の既定の設定では、解像度が 1024x768 ピクセルで 16 ビットの色数になっています。ポートは 「通常の」 VNC ビューアからの接続が 5901
で、 Web ブラウザからの接続が 5801
です。
異なるポートを使用するように設定することもできます。 詳しくは 4.3.3項 「ワンタイム VNC セッションの設定」 をお読みください。
VNC でのディスプレイ番号と X のディスプレイ番号は、ワンタイムセッションではそれぞれ独立して管理されます。 VNC のディスプレイ番号は、それぞれのサーバ設定で手作業による割り当てを行って使用します (上記の例では :1 がディスプレイ番号です) が、 X のディスプレイ番号は、 VNC セッションが開始された際、その時点で空いている X ディスプレイ番号を自動的に使用します。
既定では、 VNC クライアントとサーバは、インストール時に生成した自己署名型の SSL 証明書を利用して、機密保持接続を確立しようとします。このままお使いいただくこともできますが、必要に応じて証明書を置き換えることもできます。ただし、自己署名型の証明書を利用する場合、 VNC ビューア側や Web ブラウザ側で証明書の警告メッセージが表示されることになります。
なお VNC クライアントによっては、既定で設定される自己署名型の証明書を利用した暗号化接続を拒否するようなものもあります。たとえば Vinagre では、 GnuTLS のグローバルな証明書ストアを利用して証明書を検証しますので、自己署名型の証明書の場合には接続が失敗します。このような場合は、 x509
以外の暗号化方式を使用するか、もしくは VNC サーバに対して何らかの証明機関から証明書を発行してもらい、その証明機関の証明書をクライアント側の証明書ストアに取り込んでください。
ワンタイム VNC セッションに接続するには、まず VNC ビューアをインストールしておかなければなりません。インストールに関する詳細は 4.1項 「vncviewer
クライアント」 をお読みください。なお、 JavaScript に対応した Web ブラウザを利用して、 VNC のセッションに接続することもできます。この場合は、 http://jupiter.example.com:5801
のような URL を指定して接続してください。
既定値を変更する必要がなければ、この手順は実施しなくてもかまいません。
ワンタイム VNC セッションは、 systemd
のソケット xvnc.socket
経由で起動されます。既定では 6 つの設定ブロックが存在していて、そのうち 3 つが VNC ビューア向け ( vnc1
から vnc3
まで) で、残りの 3 つが JavaScript クライアント向け ( vnchttpd1
から vnchttpd3
まで) です。既定では vnc1
と vnchttpd1
だけが有効化されています。
VNC サーバソケットをシステムの起動時に有効化するには、下記のコマンドを実行します:
>
sudo
systemctl enable xvnc.socket
即時にソケットを開始するには、下記のコマンドを実行します:
>
sudo
systemctl start xvnc.socket
Xvnc
サーバは、 server_args
オプションを介して設定することができます。オプションの一覧については Xvnc --help
をお読みください。
独自の設定を加える場合、同じホストで動作している他の設定やサービス、既存の VNC セッションなどが使用していないポートを設定するよう注意してください。
設定の変更を反映させるには、下記のコマンドを実行します:
>
sudo
systemctl reload xvnc.socket
手順4.1「ワンタイム VNC セッションの有効化」 で説明している手順でリモート管理を設定すると、ポート 5801
と 5901
を開くように設定されます。 VNC セッションを提供するネットワークインターフェイスがファイアウオールで保護されている場合は、それぞれのポートを開くように設定する必要があります。詳しくは 第23章 「マスカレードとファイアウオール」 をお読みください。
永続セッションを使用すると、複数のクライアントから同時に接続できるようになります。たとえば 1 つのクライアントに対してだけ操作を許可しておき、それ以外の全てのクライアントは表示専用に設定することで、デモンストレーション目的で公開するようなこともできます。また、講師から参加者のデスクトップにアクセスできるように設定しておけば、トレーニングなどの際にも便利に使用することができます。
永続 VNC セッションに接続するには、まず VNC ビューアをインストールしておかなければなりません。インストールに関する詳細は 4.1項 「vncviewer
クライアント」 をお読みください。なお、 JavaScript に対応した Web ブラウザを利用して、 VNC のセッションに接続することもできます。この場合は、 http://jupiter.example.com:5801
のような URL を指定して接続してください。
vncmanager
を利用した VNC セッションの起動 #Edit source› › を選択して起動します。
を選択します。
VNC セッションを Web ブラウザからアクセスできるようにするには、
を選択します。必要であれば、
を選択することもできます (たとえばネットワークインターフェイスが外部ゾーンとして設定されている場合など) 。複数のネットワークインターフェイスが設定されている場合は、 ボタンでネットワークインターフェイスを選択し、そのインターフェイスでだけ開くこともできます。設定を確認して
を押します。この時点で必要なパッケージがインストールされていない場合は、それらのパッケージをインストールするよう承認を求められます。
YaST ではディスプレイマネージャの設定を変更します。設定を反映させるには、いったんお使いのグラフィカルセッションを終了し、ディスプレイマネージャを再起動する必要があります。
手順4.2「永続 VNC セッションの有効化」 の手順に従って VNC セッションを有効化したあとは、 vncviewer
や Remmina などの VNC ビューアを利用して、リモートのセッションに接続できるようになります。ログイン後はデスクトップ環境のシステムトレイ内に、 「VNC」 というアイコンが表示されるようになります。アイコンを押すと ウインドウを表示することができます。お使いのデスクトップ環境がシステムトレイアイコンに対応していない場合は、 vncmanager-controller
コマンドをお使いのうえ、手作業で設定を行ってください。
VNC セッションの動作を変えるには、それぞれ下記の設定を変更します:
これを選択すると、ワンタイムセッションと同じ動作になります。セッションは他のユーザからは見えなくなりますが、切断するとセッションは終了してしまいます。詳しくは 4.3項 「VNC サーバ側でのワンタイムセッションの設定」 をお読みください。
これを選択すると、セッションは他のユーザから見えるようになり、切断してもセッションが終了しなくなります。
ここには永続セッションの名前を指定します。これにより、再接続時の識別が容易になります。
ユーザの認証情報の入力を行うことなく、セッションに対して自由にアクセスできるようにします。
セッションにアクセスするために、正しいユーザ名とパスワードでのログインを求めるようにします。許可するユーザの一覧は、
で指定します。複数のユーザが同時に接続することがないようにします。
永続セッションに対して、複数のユーザが同時に接続できるようにします。これはプレゼンテーションやトレーニングの際に便利な仕組みです。
を押して閉じます。
4.4.1.1項 「永続 VNC セッションの設定」 の手順で永続 VNC セッションの設定を行ったら、あとは VNC ビューアを利用して接続することで、セッションに参加できるようになります。 VNC クライアントがサーバに接続すると、新しいセッションを作成するか、既存のセッションに参加するかを選択することができます:
既存のセッションの名前を選択すると、永続セッションの設定によってはログインを求められることがあります。
VNC サーバを正しく設定すると、 VNC サーバとクライアントとの間が暗号化されるようになります。認証はセッションの冒頭で行われ、実際のデータ転送はそれ以降に行われます。
ワンタイム VNC セッションや永続 VNC セッションでは、 server_args
行で設定する /usr/bin/Xvnc
コマンドの -securitytypes
を指定することができます。 -securitytypes
オプションでは認証方法と暗号化の両方を選択します。下記のいずれかを設定することができます:
認証を行いません。
独自のパスワードを利用して認証します。
ユーザのパスワードを確認するため、 PAM を利用して認証します。
暗号化を行いません。
匿名 TLS 暗号を使用します。全ての通信内容が暗号化されますが、リモートホスト側の検証は何も行いません。ネットワーク上は暗号化されるため、盗聴の危険からは保護されますが、中間者攻撃 (man-in-the-middle attack) には無力です。
証明書付きの TLS 暗号を使用します。自己署名型の証明書を使用している場合、最初の接続でユーザの確認を求められます。それ以降の接続では、証明書が変更された場合にのみ警告されるようになります。これにより盗聴の危険だけでなく、初回の接続以降は中間者攻撃 (man-in-the-middle attack) にも耐えられるようになります (SSH における鍵の確認と同様の方法です) 。また、公的な証明機関が発行し、マシン名が一致した証明書を使用している場合は、完全なセキュリティを実現できるようになります (一般的な HTTPS 暗号化接続と同じです) 。
なお VNC クライアントによっては、既定で設定される自己署名型の証明書を利用した暗号化接続を拒否するようなものもあります。たとえば Vinagre では、 GnuTLS のグローバルな証明書ストアを利用して証明書を検証しますので、自己署名型の証明書の場合には接続が失敗します。このような場合は、 x509
以外の暗号化方式を使用するか、もしくは VNC サーバに対して何らかの証明機関から証明書を発行してもらい、その証明機関の証明書をクライアント側の証明書ストアに取り込んでください。
X509 ベースの暗号化を使用する際は、 -X509Cert
と -X509Key
のオプションで証明書と鍵を指定する必要があります。
複数のセキュリティタイプを指定する場合は、カンマで区切ってください。サーバとクライアントとの間で、最初に対応し許可された仕組みを使用します。この方法により、サーバ側で暗号化の優先順位を付けることができるようになります。また、この方法では暗号化に対応していないクライアントを受け付けなければならないような場合にも、有用です。
クライアント側でも同様にセキュリティタイプを指定することができます。これにより、暗号化に対応しているはずのサーバに接続する際、誤って暗号化せずに接続するような問題を防ぐことができます (ただし、この設定を行わなくても、 vncviewer であれば "Connection not encrypted!" (接続が暗号化されていません) と表示されるので、問題に気がつくことはできます) 。
VNC によるリモート管理機能は X11 に依存して作られているため、 Wayland を有効化していると画面が表示されない問題が発生することがあります。そのため、リモート管理機能を使用する場合は、 Wayland ではなく X11 を使用するように設定してください。たとえば gdm の場合、 /etc/gdm/custom.conf
ファイルにある [daemon]
セクション内に WaylandEnable=false
を追加してください。また、ログイン時には X11 互換のセッションを選択する必要があることにも注意してください。なお、 GNOME で Wayland セッションを使用できないようにしたい場合は、 gnome-session-wayland パッケージを削除してロック (施錠) してください。