第13章 TigerVNC

TigerVNC (Tiger Virtual Network Computing) は、グラフィカルデスクトップシェアリングのシステムで、他のコンピューターのリモート制御を可能にします。

TigerVNC クライアントサーバープリンシパルで機能します。サーバーはその出力 (vncserver) を共有し、クライアント (vncviewer) はサーバーに接続します。

注記

以前の Red Hat Enterprise Linux ディストリビューションとは異なり、Red Hat Enterprise Linux 7 の TigerVNC は、その設定に systemd システム管理デーモンを使用します。/etc/sysconfig/vncserver 設定ファイルは /etc/systemd/system/vncserver@.service に置き換えられました。

13.1. VNC Server

vncserver は、VNC (Virtual Network Computing) デスクトップを起動するユーティリティーです。適切なオプションで Xvnc を実行し、VNC デスクトップでウィンドウマネージャーを起動します。vncserver ユーザーは、どこからでも任意の数のクライアントがアクセスできるマシン上で、別々のセッションを並行して実行できます。

13.1.1. VNC サーバーのインストール

TigerVNC サーバーをインストールするには、root 権限で以下のコマンドを実行します。

~]# yum install tigervnc-server

13.1.2. VNC サーバーの設定

VNC サーバーでは、表示、ネットワークアドレス、ポート、セキュリティーの設定などに対するオプションのパラメーターを使用して、1 人または複数のユーザー用の画面を起動するよう設定できます (ユーザーのシステムがシステムに存在する場合)。

1 人のユーザー用に VNC サーバーの設定

  1. /etc/systemd/system/vncserver@.service という名前の設定ファイルが必要です。このファイルを作成するには、root ファイルを /usr/lib/systemd/system/vncserver@.service としてコピーします。

    ~]# cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service

    systemd は、オンデマンドでメモリー内に適切な名前が付けられたインスタンスを自動的に作成し、サービスファイル内の '%i' はディスプレイ番号に置き換えられるため、ファイル名に表示番号を含める必要はありません。単一ユーザーの場合は、ファイルの名前を変更する必要がありません。複数ユーザーの場合は、たとえば、ユーザー名をファイル名に追加して、各ユーザーに対して一意な名前が付けられたサービスファイルが必要です。詳細は「2 人のユーザー用に VNC サーバーの設定」を参照してください。

  2. /etc/systemd/system/vncserver@.service を編集し、実際のユーザー名に USER を置き換えます。その他の行は、そのままにしておきます。-geometry 引数は、作成される VNC デスクトップのサイズを指定します。デフォルトでは 1024x768 に設定されます。

    ExecStart=/usr/sbin/runuser -l USER -c "/usr/bin/vncserver %i -geometry 1280x1024"
    PIDFile=/home/USER/.vnc/%H%i.pid
  3. 変更を保存します。
  4. 変更を直ちに反映させるには、以下のコマンドを実行します。

    ~]# systemctl daemon-reload
  5. 設定ファイルで定義されたユーザー用のパスワードを設定します。最初に root から USER に切り替える必要があることに注意してください。

    ~]# su - USER
    ~]$ vncpasswd
    Password:
    Verify:
    重要

    保存されたパスワードは暗号化されていません。パスワードファイルへのアクセスが可能であれば、誰でもプレーンテキストのパスワードを見ることができます。

「VNC サーバーの起動」 に進みます。

13.1.2.1. 2 人のユーザー用に VNC サーバーの設定

同一マシンで複数のユーザーを設定する場合は、ユーザーごとに異なるテンプレートタイプのサービスファイルを作成します。

  1. vncserver-USER_1@.service および vncserver-USER_2@.service などの 2 つのサービスファイルを作成します。これら 2 つのファイルで、USER を正しいユーザー名に置き換えます。
  2. 両方のユーザーでパスワードを設定します。

    ~]$ su - USER_1
    ~]$ vncpasswd
    Password:
    Verify:
    ~]$ su - USER_2
    ~]$ vncpasswd
    Password:
    Verify:

13.1.3. VNC サーバーの起動

サービスを起動もしくは有効にするには、コマンドで直接ディスプレイ番号を指定します。1 人のユーザー用に VNC サーバーの設定 の上記で設定したファイルはテンプレートとして機能し、そこでは %isystemd によりディスプレイ番号に置き換えます。有効な番号を用いて、以下のコマンドを実行します。

~]# systemctl start vncserver@:display_number.service

また、システム起動時に自動的にサービスが開始するようにすることもできます。その後、ログインの際に、vncserver は自動的に開始します。root で以下のコマンドを発行します。

~]# systemctl enable vncserver@:display_number.service

この時点で、他のユーザーは VNC ビューアープログラムを使用して、定義されたディスプレイ番号とパスワードで VNC サーバーに接続できます。グラフィカルデスクトップがインストールされている場合は、そのデスクトップのインスタンスが表示されます。これは、ターゲットマシンで現在表示されているものと同じインスタンスではありません。

13.1.3.1. ユーザー 2 人および 2 つの別個のディスプレイ用に VNC サーバーの設定

vncserver-USER_1@.service および vncserver-USER_2@.service という 2 つの設定済み VNC サーバーで、異なるディスプレイ番号を有効にできます。たとえば、以下のコマンドでは、USER_1 の VNC サーバーがディスプレイ 3 で起動し、USER_2 の VNC サーバーがディスプレイ 5 で起動することになります。

~]# systemctl start vncserver-USER_1@:3.service
~]# systemctl start vncserver-USER_2@:5.service

13.1.4. GDM 用の XDMCP を使用した xinetd ベースの VNC セットアップ

GDM 用の X Display Manager Control Protocol (XDMCP) を使用した xinetd ベースの VNC セットアップは、主にシンクライアントで構成されているクライアントシステムに有益なセットアップです。セットアップ後、クライアントは GDM ログインウィンドウにアクセスでき、システムアカウントにログインできます。設定の前提条件は、gdmvnc -server &、および xinetd パッケージがインストールされていることです。

~]# yum install gdm tigervnc tigervnc-server xinetd

サービス xinetd を有効化する必要があります。

~]# systemctl enable xinetd.service

システムのデフォルトターゲットユニットは、graphical.target である必要があります。現在設定されているデフォルトターゲットユニットを取得するには、以下を使用します。

~]# systemctl get-default

以下を使用して、デフォルトターゲットユニットを変更できます。

~]# systemctl set-default target_name

GDM ログインウィンドウへのアクセスとログイン

  1. /etc/gdm/custom.conf 設定ファイルを編集して GDM を設定して XDMCP を有効にします。

    [xdmcp]
    Enable=true
  2. 以下の内容で、/etc/xinetd.d/xvncserver という名前のファイルを作成します。

    service service_name
    {
    disable = no
    protocol = tcp
    socket_type = stream
    wait = no
    user = nobody
    server = /usr/bin/Xvnc
    server_args = -inetd -query localhost -once -geometry selected_geometry -depth selected_depth securitytypes=none
    }

    server_args セクションでは、-query localhost オプションにより、xdmcp セッションに対して各 Xvnc インスタンスのクエリー localhost が作成されます。-depth オプションは、作成する VNC デスクトップの─深さ (ビット) を指定します。使用できる値は、8、15、16、および 24 です。その他の値は、アプリケーションの予測できない動作を引き起こします。

  3. ファイル /etc/services を編集してサービスを定義します。これを行うには、以下のスニペットを /etc/services ファイルに追加します。

    # VNC xinetd GDM base
    service_name 5950/tcp
  4. 設定の変更が反映されるようにするには、マシンを再起動します。

    あるいは、以下を実行します。init レベルを 3 に変更し、5 に戻して、gdm をリロードします。

    # init 3
    # init 5

    gdm が UDP ポート 177 をリッスンしていることを確認します。

    # netstat -anu|grep 177
    udp    0   0 0.0.0.0:177         0.0.0.0:*

    xinetd サービスを再起動します。

    ~]# systemctl restart xinetd.service

    xinetd サービスが新しいサービスを読み込んだことを確認します。

    # netstat -anpt|grep 595
    tcp    0   0 :::5950           :::*            LISTEN   3119/xinetd
  5. vncviewer コマンドを使用して設定をテストします。

    # vncviewer localhost:5950

    コマンドは、パスワードが求められない localhost に対して VNC セッションを起動します。GDM ログイン画面が表示され、有効なユーザー名とパスワードでシステムのユーザーアカウントにログインできます。それから、リモート接続で同じテストを実行できます。

その設定に対してファイアウォールを設定します。ファイアウォール設定ツールを実行し、TCP ポート 5950 を追加してシステムへの接続を許可します。

~]# firewall-cmd --permanent --zone=public --add-port=5950/tcp
~]# firewall-cmd --reload

13.1.5. VNC セッションの終了

vncserver サービスの有効化と同様に、システム開始時に自動的にサービスの起動を無効にできます。

~]# systemctl disable vncserver@:display_number.service

または、システムの実行中に、以下のコマンドを root で発行すると、サービスを停止できます。

~]# systemctl stop vncserver@:display_number.service

13.2. 既存のデスクトップの起動

デフォルトでは、ログインしているユーザーはディスプレイ 0 の X サーバーにより提供されたデスクトップを使用します。ユーザーは、TigerVNC サーバー x0vncserver を使用してデスクトップを共有できます。

X デスクトップの共有

ログインしているユーザーのデスクトップを x0vncserver を使用して共有するには、以下の手順を実行します。

  1. root で以下のコマンドを入力します。

    ~]# yum install tigervnc-server
  2. ユーザーの VNC パスワードを設定します。

    ~]$ vncpasswd
    Password:
    Verify:
  3. そのユーザーで以下のコマンドを入力します。

    ~]$ x0vncserver -PasswordFile=.vnc/passwd -AlwaysShared=1

ファイアウォールがポート 5900 への接続を許可するよう設定されている場合、リモートビューアーはディスプレイ 0 に接続し、ログインしているユーザーのデスクトップを表示できます。ファイアウォールの設定方法は 「VNC のためのファイアウォールの設定」 を参照してください。

13.3. VNC ビューアー

vncviewer は、グラフィカルユーザーインターフェースを表示し、vncserver をリモートで制御するプログラムです。

vncviewer の操作では、エントリーを含むポップアップメニューがあり、これでフルスクリーンモードの切り替え、ビューアーの終了などの様々なアクションを実行します。また、ターミナルから vncviewer を操作することもできます。コマンドラインに vncviewer -h を入力して、vncviewer パラメーターを一覧表示します。

13.3.1. VNC ビューアーのインストール

TigerVNC クライアント vncviewer をインストールするには、root 権限で以下のコマンドを実行します。

~]# yum install tigervnc

13.3.2. VNC サーバーへの接続

VNC サーバーを設定すると、VNC サーバーを任意の VNC ビューアーに接続できます。

SSH を使用した VNC サーバーへの接続

  1. 引数なしで vncviewer コマンドを入力すると、VNC Viewer: Connection Details ユーティリティーが表示されます。接続する VNC サーバーを指定するよう要求されます。
  2. 必要な場合は、同じ画面への既存の VNC 接続の切断を回避するために、以下のようにデスクトップの共有を許可するオプションを選択します。

    1. Options (オプション) ボタンを選択します。
    2. Misc. タブを選択します。
    3. Shared ボタンを選択します。
    4. OK を選択してメインメニューに戻ります。
  3. 接続するアドレスとディスプレイ番号を入力してください。

    address:display_number
  4. Connect (接続) を押して VNC サーバー画面に接続します。
  5. VNC パスワードを入力するよう求められます。これは、グローバルなデフォルトの VNC パスワードが設定されていない限り、ディスプレイ番号に対応するユーザーの VNC パスワードです。

    VNC サーバーデスクトップを示すウィンドウが表示されます。これは通常のユーザーに表示されるデスクトップではなく、Xvnc デスクトップであることに注意してください。

CLI を使用した VNC サーバーへの接続

  1. 引数としてアドレスとディスプレイ番号を指定して、viewer コマンドを入力します。

    vncviewer address:display_number

    ここで、addressIP アドレスまたはホスト名です。

  2. VNC パスワードを入力して自分自身を認証します。これは、グローバルなデフォルトの VNC パスワードが設定されていない限り、ディスプレイ番号に対応するユーザーの VNC パスワードです。
  3. VNC サーバーデスクトップを示すウィンドウが表示されます。これは通常のユーザーに表示されるデスクトップではなく、Xvnc デスクトップであることに注意してください。

13.3.2.1. VNC のためのファイアウォールの設定

暗号化されていない接続を使用する場合は、firewalld が接続を拒否する可能性があります。firewalld が VNC パケットを通過させることを許可するには、TCP トラフィックに特定のポートを開きます。-via オプションを使用すると、トラフィックは、firewalld でデフォルトで有効になっている SSH 上にリダイレクトされます。

注記

VNC サーバーのデフォルトのポートは 5900 です。リモートデスクトップにアクセス可能なポートに到達するには、このデフォルトのポートとユーザーに割り当てられたディスプレイ番号の合計を計算します。たとえば、2 つ目のディスプレイは 2 + 5900 = 5902 のようになります。

ディスプレイ 0 から 3 については、以下で説明しているように firewalld オプションによって、VNCサービスの service のサポートを利用します。ディスプレイ番号が 3 よりも大きい場合は、firewalld でポートを開く で説明されているように、対応するポートを特別に開く必要があります。

firewalld での VNC サービスの有効化

  1. firewalld 設定の情報を確認するには、以下のコマンドを実行します。

    ~]$ firewall-cmd --list-all
  2. 特定のアドレスからのすべての VNC 接続を許可するには、以下のコマンドを実行します。

    ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.122.116" service name=vnc-server accept'
    success

    ここで変更する内容は、システムの再起動後は維持されないことに注意してください。ファイアウォールを永続的に変更するには、コマンドに --permanent オプションを繰り返し追加してください。ファイアウォールのリッチ言語コマンドの使用方法はRed Hat Enterprise Linux 7 Security Guide (Red Hat Enterprise Linux 7 セキュリティーガイド)を参照してください。

  3. 上記の設定を確認するには、以下のコマンドを使用します。

    ~]# firewall-cmd --list-all
    public (default, active)
     interfaces: bond0 bond0.192
     sources:
     services: dhcpv6-client ssh
     ports:
     masquerade: no
     forward-ports:
     icmp-blocks:
     rich rules:
    	rule family="ipv4" source address="192.168.122.116" service name="vnc-server" accept

特定のポートまたはポートの範囲を開くには、firewall-cmd コマンドラインツールに --add-port オプションを使用します。たとえば、VNC ディスプレイ 4 では、TCP トラフィックに対してポート 5904 を開く必要があります。

firewalld でポートを開く

  1. パブリックゾーンで TCP トラフィックのポートを開くには、root で以下のようにコマンドを発行します。

    ~]# firewall-cmd --zone=public --add-port=5904/tcp
    success
  2. パブリックゾーンに対して現在開かれているポートを表示するには、以下のコマンドを発行します。

    ~]# firewall-cmd --zone=public --list-ports
    5904/tcp

ポートは、firewall-cmd --zone=zone --remove-port=number/protocol コマンドを使用して削除できます。

ここで変更する内容は、システムの再起動後は維持されないことに注意してください。ファイアウォールを永続的に変更するには、コマンドに --permanent オプションを繰り返し追加してください。firewalld でのポートのオープンおよびクローズの詳細については、Red Hat Enterprise Linux 7 Security Guide を参照してください。

13.3.3. SSH を使用した VNC サーバーへの接続

VNC は、通信への攻撃に対するセキュリティーがないクリアテキストネットワークプロトコルです。通信をセキュアにするには、-via オプションを指定してサーバークライアント接続を暗号化します。これにより、VNC サーバーとクライアントとの間に SSH トンネルが作成されます。

VNC サーバークライアント接続を暗号化するコマンドの形式は以下のとおりです。

vncviewer -via user@host:display_number

例13.1 -via オプションの使用

  1. SSH を使用して VNC サーバーに接続するには、以下のようなコマンドを入力します。

    ~]$ vncviewer -via USER_2@192.168.2.101:3
  2. プロンプトが表示されたら、パスワードを入力し、Enter を押して確認します。
  3. リモートデスクトップのウィンドウが画面に表示されます。
VNC アクセスの制限

暗号化した接続のみを選択する場合は、systemd.service ファイルの ExecStart 行で -localhost オプションを使用すると、暗号化されていない接続を完全に回避できます。

ExecStart=/usr/sbin/runuser -l user -c "/usr/bin/vncserver -localhost %i"

これにより、vncserver は、-via オプションの結果として SSH を使用して送信されたローカルホストおよびポート転送された接続以外の接続を許可しません。

SSH の使用の詳細は、12章OpenSSH を参照してください。

13.4. 関連資料

TigerVNC に関する詳細は、以下の資料を参照してください。

インストールされているドキュメント

  • vncserver(1): VNC サーバーユーティリティーの man ページです。
  • vncviewer(1): VNC ビューアーの man ページ
  • vncpasswd(1): VNC パスワードコマンドの man ページです。
  • Xvnc(1): Xvnc サーバー設定オプションの man ページです。
  • x0vncserver(1): 既存の X TigerVNC サーバーを共有するサーバーの man ページです。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。