第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 サーバーの設定
/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 サーバーの設定」を参照してください。/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
- 変更を保存します。
変更を直ちに反映させるには、以下のコマンドを実行します。
~]#
systemctl daemon-reload
設定ファイルで定義されたユーザー用のパスワードを設定します。最初に
root
から USER に切り替える必要があることに注意してください。~]# su - USER ~]$
vncpasswd
Password: Verify:重要保存されたパスワードは暗号化されていません。パスワードファイルへのアクセスが可能であれば、誰でもプレーンテキストのパスワードを見ることができます。
「VNC サーバーの起動」 に進みます。
13.1.2.1. 2 人のユーザー用に VNC サーバーの設定
同一マシンで複数のユーザーを設定する場合は、ユーザーごとに異なるテンプレートタイプのサービスファイルを作成します。
-
vncserver-USER_1@.service
およびvncserver-USER_2@.service
などの 2 つのサービスファイルを作成します。これら 2 つのファイルで、USER を正しいユーザー名に置き換えます。 両方のユーザーでパスワードを設定します。
~]$ su - USER_1 ~]$
vncpasswd
Password: Verify: ~]$ su - USER_2 ~]$vncpasswd
Password: Verify:
13.1.3. VNC サーバーの起動
サービスを起動もしくは有効にするには、コマンドで直接ディスプレイ番号を指定します。1 人のユーザー用に VNC サーバーの設定 の上記で設定したファイルはテンプレートとして機能し、そこでは %i
が systemd
によりディスプレイ番号に置き換えます。有効な番号を用いて、以下のコマンドを実行します。
~]# 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 ログインウィンドウにアクセスでき、システムアカウントにログインできます。設定の前提条件は、gdm、vnc -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 ログインウィンドウへのアクセスとログイン
/etc/gdm/custom.conf
設定ファイルを編集して GDM を設定して XDMCP を有効にします。[xdmcp] Enable=true
以下の内容で、
/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 です。その他の値は、アプリケーションの予測できない動作を引き起こします。ファイル
/etc/services
を編集してサービスを定義します。これを行うには、以下のスニペットを/etc/services
ファイルに追加します。# VNC xinetd GDM base service_name 5950/tcp
設定の変更が反映されるようにするには、マシンを再起動します。
あるいは、以下を実行します。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
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
を使用して共有するには、以下の手順を実行します。
root
で以下のコマンドを入力します。~]# yum install tigervnc-server
ユーザーの VNC パスワードを設定します。
~]$
vncpasswd
Password: Verify:そのユーザーで以下のコマンドを入力します。
~]$
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 サーバーへの接続
-
引数なしで
vncviewer
コマンドを入力すると、VNC Viewer: Connection Details
ユーティリティーが表示されます。接続する VNC サーバーを指定するよう要求されます。 必要な場合は、同じ画面への既存の VNC 接続の切断を回避するために、以下のようにデスクトップの共有を許可するオプションを選択します。
- ボタンを選択します。
-
Misc.
タブを選択します。 -
Shared
ボタンを選択します。 - OK を選択してメインメニューに戻ります。
接続するアドレスとディスプレイ番号を入力してください。
address:display_number
- Connect (接続) を押して VNC サーバー画面に接続します。
VNC パスワードを入力するよう求められます。これは、グローバルなデフォルトの VNC パスワードが設定されていない限り、ディスプレイ番号に対応するユーザーの VNC パスワードです。
VNC サーバーデスクトップを示すウィンドウが表示されます。これは通常のユーザーに表示されるデスクトップではなく、Xvnc デスクトップであることに注意してください。
CLI を使用した VNC サーバーへの接続
引数としてアドレスとディスプレイ番号を指定して、
viewer
コマンドを入力します。vncviewer address:display_number
ここで、address は
IP
アドレスまたはホスト名です。- VNC パスワードを入力して自分自身を認証します。これは、グローバルなデフォルトの VNC パスワードが設定されていない限り、ディスプレイ番号に対応するユーザーの VNC パスワードです。
- 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 サービスの有効化
firewalld
設定の情報を確認するには、以下のコマンドを実行します。~]$ firewall-cmd --list-all
特定のアドレスからのすべての 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 セキュリティーガイド)を参照してください。上記の設定を確認するには、以下のコマンドを使用します。
~]# 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 でポートを開く
パブリックゾーンで
TCP
トラフィックのポートを開くには、root
で以下のようにコマンドを発行します。~]# firewall-cmd --zone=public --add-port=5904/tcp success
パブリックゾーンに対して現在開かれているポートを表示するには、以下のコマンドを発行します。
~]# 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 オプションの使用
SSH
を使用して VNC サーバーに接続するには、以下のようなコマンドを入力します。~]$ vncviewer -via USER_2@192.168.2.101:3
- プロンプトが表示されたら、パスワードを入力し、Enter を押して確認します。
- リモートデスクトップのウィンドウが画面に表示されます。
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)
: 既存の XTigerVNC
サーバーを共有するサーバーの man ページです。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。