9 VNCサービスの構成

この章では、仮想ネットワーク・コンピューティング(VNC)サーバーによるグラフィカル・デスクトップへのリモート・アクセスを有効にする方法について説明します。

VNCについて

仮想ネットワーク・コンピューティング(VNC)はネットワーク上でグラフィカル・デスクトップを共有するシステムです。VNCクライアント(ビューア)はリモート・システム上でVNCサーバーによって共有されるデスクトップに接続し、制御できます。VNCは独立したプラットフォームのため、任意のオペレーティング・システムでVNCクライアントを使用してVNCサーバーに接続できます。VNCはグラフィカル・ツールを使用したリモート管理を可能にします。

デフォルトでは、VNCクライアントとVNCサーバーの間のすべての通信は保護されていません。VNC通信はSSHトンネルを使用して保護できます。SSHトンネルを使用すると、オープンにする必要のあるファイアウォール・ポートの数も削減できます。Oracleでは、SSHトンネルの使用が推奨されています。

VNCサーバーの構成

VNCサーバーを構成するには:

  1. tigervnc-serverパッケージをインストールします。

    sudo yum install tigervnc-server
  2. VNCユーザーのためのVNC環境を作成します。

    システム上の各VNCデスクトップが、特定のユーザーとしてVNCサーバーを実行します。このユーザーはユーザー名、およびパスワードまたはSSHキー(VNCデスクトップにSSHトンネルを介してアクセスする場合)を使用してシステムにログインできる必要があります。

    vncpasswdコマンドを使用して、VNCデスクトップのパスワードを作成します。パスワードはrootではなく、VNCサーバーを実行するユーザーが次のように作成する必要があります。

    su - vncuser
    vncpasswd
    Password: password
    Verify: password

    パスワードは6文字以上にする必要があります。パスワードが8文字を超える場合、最初の8文字のみが認証に使用されます。パスワードの難読化バージョンは、vncpasswdコマンドでファイル名を指定しないかぎり、$HOME/.vnc/passwdに格納されます。

  3. システム上で使用可能にする各VNCデスクトップに、サービス・ユニット構成ファイルを作成します。

    1. 次のように、vncserver@.serviceテンプレート・ファイルをコピーします。

      cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@\:display.service

      前のコマンドでは、displayは、1から始まる、VNCデスクトップの一意の表示番号です。バックスラッシュ文字(\)を使用して、コロン(:)文字をエスケープします。

      それぞれのVNCデスクトップはユーザー・アカウントと関連付けられています。複数のVNCデスクトップがある場合に管理しやすくするため、サービス・ユニット構成ファイルの名前に、次のようにVNCユーザーの名前を含めることができます。

      cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver-vncuser@\:display.service
    2. サービス・ユニット構成ファイルを編集します。

      構成ファイル内の次のセクションは、このサンプル・エントリのようになります。vncuserを実際のVNCユーザー名に置き換えます。

      [Service]
      Type=forking
      WorkingDirectory=/home/vncuser
      User=vncuser
      Group=vncuser
                    
      # Clean any existing files in /tmp/.X11-unix environment
      ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
      ExecStart=/usr/bin/vncserver %i
      PIDFile=/home/vncuser/.vnc/%H%i.pid
      ExecStop=/usr/bin/vncserver -kill %i

      オプションで、VNCサーバーのコマンドライン引数を追加できます。次の例では、VNCサーバーはlocalhostからの接続のみを受け入れ、VNCデスクトップはローカルまたはSSHトンネルを介してのみアクセスできることを意味します。ウィンドウのサイズは、geometryフラグを使用してデフォルトの1024x768から640x480に変更されます。

      ExecStart=/usr/bin/vncserver %i -localhost -geometry 640x480
      PIDFile=/home/vncuser/.vnc/%H%i.pid
  4. VNCデスクトップを開始します。

    1. systemdに構成ファイルをリロードさせます。

      sudo systemctl daemon-reload
    2. それぞれのVNCデスクトップで、サービスを開始し、システムの再起動後に開始するようサービスを構成します。そのサービスに関連付けるようにサービス・ユニット構成ファイル内で指定した、ユーザー名と表示番号を必ず使用してしてください。次に例を示します。

      sudo systemctl start vncserver-vncuser@\:display.service
      sudo systemctl enable vncserver-vncuser@\:display.service

    ノート:

    サービス・ユニット構成ファイルに変更を加える場合は、構成ファイルをリロードし、サービスを再起動する必要があります。

  5. VNCデスクトップへのアクセスを許可するようにファイアウォールを構成します。

    ユーザーがSSHトンネルを介してVNCデスクトップにアクセスし、SSHサービスがシステム上で有効な場合は、ファイアウォールで追加のポートを開く必要はありません。SSHはデフォルトで有効になっています。SSHの有効化の詳細は、Oracle® Linux: OpenSSHを使用したリモート・システムへの接続を参照してください。

    ユーザーがVNCデスクトップに直接アクセスする場合は、各デスクトップで必要なポートを開く必要があります。必要なポートは、VNCデスクトップ・サービスの表示番号を5900 (デフォルトのVNCサーバー・ポート)に加算して計算できます。表示番号が1の場合、必要なポートは5901であり、表示番号が67の場合、必要なポートは5967です。

    ポート5900から5903を開くには、次のコマンドを使用できます。

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

    ポート5967など、追加のポートを開くには、次のコマンドを使用します。

    sudo firewall-cmd --zone=zone --add-port=5967/tcp
    sudo firewall-cmd --zone=zone --add-port=5967/tcp --permanent
  6. VNCデスクトップを構成します。

    デフォルトでは、VNCサーバーはユーザーのデフォルトのデスクトップ環境を実行します。これはVNCデスクトップ・サービスが開始したときに自動的に作成される、VNCユーザーの$HOME/.vnc/xstartupファイルで制御されます。

    システムをインストールしたときに(ベース環境として最小インストールを選択した場合など)デスクトップ環境をインストールしていない場合、次のコマンドを使用してインストールできます。

    sudo yum groupinstall "server with gui"

    インストールが完了したら、systemctl get-defaultコマンドを使用して、デフォルトのシステム状態がmulti-user.target (マルチユーザー・コマンドライン環境)であることを確認します。systemctl set-defaultコマンドを使用して、デフォルトのシステム状態をリセットするか、必要に応じてgraphical.target (マルチユーザー・グラフィック環境)に変更します。

    $HOME/.vnc/xstartupファイルはVNCデスクトップを起動したときにXアプリケーションを実行することを指定するシェル・スクリプトです。たとえば、KDE Plasmaワークスペースを実行するには、次のようにファイルを編集できます。

    #!/bin/sh
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    #exec /etc/X11/xinit/xinitrc
    startkde &

    ユーザーの$HOME/.vnc/xstartupファイルを変更する場合は、変更内容を反映するためVNCデスクトップを再起動する必要があります。

    sudo systemctl restart vncserver-vncuser@\:display.service

詳細は、vncserver(1)Xvnc(1)、およびvncpasswd(1)の各マニュアル・ページを参照してください。

VNCデスクトップへの接続

Oracle Linux 7システムでは、任意のVNCクライアントを使用してVNCデスクトップに接続できます。次の例は、TigerVNCクライアントへの指示を示します。クライアントへの指示を適応させます。

  1. TigerVNCクライアント(vncviewer)をインストールします。

    sudo yum install tigervnc
  2. TigerVNCクライアントを開始し、デスクトップに接続します。

    VNCデスクトップに直接接続するには、TigerVNCクライアントを開始し、host:displayを入力してVNCサーバーのホスト名またはIPアドレス、および接続するVNCデスクトップの表示番号を指定します。または、VNCデスクトップをvncviewerコマンドの引数として指定できます。次に例を示します。

    vncviewer myhost.example.com:1

    SSHトンネルを介してVNCデスクトップに接続するには、vncviewerコマンドで-viaオプションを使用してSSH接続のユーザー名とホストを指定し、localhost:displayを使用してVNCデスクトップを指定します。次に例を示します。

    vncviewer -via vncuser@myhost.example.com localhost:67

    詳細は、vncviewer(1)マニュアル・ページを参照してください。