(0)目次&概説
(1) 記事の目的
(1-1) 目的
(1-2) 前提条件
(2) 実施手順
(2-1) 必要資源のインストール
(2-1-1) “tigervnc-server”のインストール
(2-1-2) “X Window System”のインストール
(2-1-3) “GNOME Desktop”のインストール
(2-2) VNCServerの設定
(2-2-1) 設定ファイルの雛形をコピー
(2-2-2) 設定ファイルの修正
(2-2-3) 設定ファイルの反映
(2-3) VNCユーザ毎の設定
(2-3-1) パスワードの設定
(2-3-2) xstartupファイルの作成
(2-4) パケットフィルタリング設定
(2-5) VNCサービスの起動
(2-5-1) VNCサービス起動
(2-5-2) VNCサービスの起動確認
(2-5-3) VNCサービスの自動起動設定
(2-6) クライアントからの接続
(3) エラー対応の備忘録
(3-1) エラー対応1:Can’t open PID file
(3-2) エラー対応2:ウィンドウが起動するも画面が真っ黒
(1) 記事の目的
(1-1) 目的
CentOS7環境にGNOMEデスクトップ環境を導入する方法について記述します。
↓こんな感じでクライアントからサーバのデスクトップを遠隔操作する事が目標。
(2) 実施手順
(2-1) 必要資源のインストール
GNOMEデスクトップ環境を利用する場合は下記パッケージをインストールします。各コンポーネントの関係性等はこちら「VNC ServerとGNOMEデスクトップの概念や基本的な仕組みについて」にて記載しています。
(2-1-1) “tigervnc-server”のインストール
# yum install tigervnc-server
(図211)
(2-1-2) “X Window System”のインストール
# yum groupinstall "X Window System" "Desktop"
(図212)
(2-1-3) “GNOME Desktop”のインストール
このパッケージにはGNOME3のセッション確立のための「gnome-session」といったGNOME関連のモジュールが含まれています。
# yum groupinstall "GNOME Desktop"
(図213)
(2-2) VNCServerの設定
(2-2-1) 設定ファイルの雛形をコピー
ディレクトリ「/lib/systemd/system/」配下に設定ファイルの雛形が置いてあるので、それを所定のディレクトリ「/usr/lib/systemd/system/」配下にコピーします。
下記のコマンドで[Your Number]となっている箇所は自身の利用予定のディスプレイ番号(※伽婦カyの例では「1」を使用)を採番して実行します。この番号は後にディスプレイ番号等にも利用されまして、もし「1」を採番した場合は規則によりディスプレイ番号は5900+1=「5901」になります。
# cp /lib/systemd/system/vncserver@.service /usr/lib/systemd/system/vncserver@:[Your Number].service
(図221)
(2-2-2) 設定ファイルの修正
設定ファイルをviエディタで開いて修正します。
# vi vncserver@:[Your Number].service
(図222)
修正箇所は<USER>となっている箇所を自身のVNC利用ユーザに置き換えます。キャプチャの例では「admin」というユーザ名に置き換えています。
■修正前
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple # 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_wrapper <USER> %i ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
■修正後
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple # 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_wrapper admin %i ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target
(図222)
(参考)Type=forkingやType=simpleの意味
Type=simple | ・「ExecStart=」に記述したプロセスがサービスにおける主プロセスと見なされます。 ・サービスを起動して継続動作している間、プロンプト側では応答が無く、Ctrl+Cを押下するまで入力待ちにならない形で起動します(※フォアグラウンドで処理継続) |
Type=forking | ・「ExecStart=」に記述したプロセスの「子プロセス」がサービスにおける主プロセスと見なされます。 ・サービスを起動して継続動作している間、プロンプトは入力待ちに戻り、サービス自体はバックグラウンドで起動し続ける。 |
Type=oneshot | ・処理を実行し、プロンプトは入力待ちに戻り、サービス等は何も残らずに完了します。一時的なパラメータの設定等、ワンタイムで終わる処理に用います。 |
Type=dbus | ・起動するサービスがD-Busに接続する場合、Type=dbusに設定する事でsystemdにより認知され、トラッキングされます(依存サービスも含めて)。 |
(2-2-3) 設定ファイルの反映
# systemctl daemon-reload
(図223)
(2-3) VNCユーザ毎の設定
(2-3-1) パスワードの設定
このような「ユーザ単位」に行う設定は、rootではなく「VNCを利用するユーザ」にて実施するので、一度rootからexitして「VNCを利用するユーザ」にスイッチします(※私の場合はexitするとVNCユーザである”admin”に戻るので単にexitのみ)
# exit
次のコマンドでパスワード設定を行います。
$ vncpasswd
(図231)
(2-3-2) xstartupファイルの作成
①xstartupファイルを作成する階層に移動
$ cd ~/.vnc/
②xstartupファイルの作成
$ vi xstartup
(図232)
③GNOMEの利用設定の追加
ファイルが開いたら下記のGNOME利用設定を追加します。
#!/bin/sh gnome-session &
(図233)
④xstartupファイルに権限の設定を追加
chmodコマンドでVNCサーバの利用ユーザ(※私の例ではadmin)に対して、xstartupシェルの実行権限の付与を行います。
$ chmod +x xstartup
(図234)
※上記コマンドの実行前後で「ls -l」によりファイルのパーミッションを見比べる事で、権限が正しく付与されたか?をチェックしています。
>目次にもどる
(2-4) firewalldの設定
※長くなるので、別記事「CentOS7でfirewalldを用いてポートの開放を行う方法について」にて記載。
(2-5) VNCサービスの起動
(2-5-1) VNCサービス起動
次のコマンドでVNCサービスの起動を行います。
# systemctl start vncserver@:[Your Number].service
今回の例ではadminユーザの番号は「1」に指定したので、次のようになります。
# systemctl start vncserver@:1.service
(2-5-2) VNCサービスの起動確認
起動の確認は次のコマンドで行います。
# systemctl is-active vncserver@:1.service
(図251)
(2-5-3) VNCサービスの自動起動設定
また、今後のためにも次のコマンドでVNCサーバサービスの自動起動設定を実施しておきます。
# systemctl enable vncserver@:1.service
(2-6) クライアントからの接続
今回は「Tiger VNC Viewer」を利用します
下記の5901はポート番号で、5900+ディスプレイ番号(1)=5901を指定します。
(3) エラー対応の備忘録
(3-1) エラー対応1:Can’t open PID file
(3-1-1) 事象概要
上記(2-1) ~(2-4)までの各種設定を実施したのち、「systemctl start vncserver@:1.service」によるvncserverのサービス起動が失敗(failed)となり、「journalctl -xe」コマンドでエラーの内容を見ると「Can’t open PID file」のエラー文言が出ていました。
May 11 21:57:03 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: pam_unix(runuser-l:session): session opened for user admin by (uid=0) May 11 21:57:03 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: A VNC server is already running as :1 May 11 21:57:03 ik1-411-37776.vs.sakura.ne.jp sshd[1153]: Failed password for root from 218.92.0.205 port 13751 ssh2 May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: New 'ik1-411-37776.vs.sakura.ne.jp:11 (admin)' desktop is ik1-411-37776.vs.sakura.ne.jp:11 May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: Starting applications specified in /home/admin/.vnc/xstartup May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: Log file is /home/admin/.vnc/ik1-411-37776.vs.sakura.ne.jp:11.log May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp runuser[1164]: pam_unix(runuser-l:session): session closed for user admin May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp systemd[1]: Can't open PID file /home/admin/.vnc/ik1-411-37776.vs.sakura.ne.jp:1.pid (yet?) after start: No such file or directory May 11 21:57:06 ik1-411-37776.vs.sakura.ne.jp systemd[1]: Failed to start Remote desktop service (VNC). -- Subject: Unit vncserver@:1.service has failed
(図311)
(3-1-2) 原因
正確には原因が特定できていないのですが、サービスの設定ファイル内で指定している「Type=XXX」(※サービスの起動判定)が「forking」(バックグラウンド起動)になっていると、起動に失敗して上記のエラーが出ていたようです。
(図312)
(3-1-3) 対処方法
設定ファイル内の「Type=XXX」を「Type=simple」に指定すると正常に起動できるようになりました。
(図313)
(3-2) エラー対応2:ウィンドウが起動するも画面が真っ黒
(3-2-1) 事象概要
上記(2-1) ~(2-5)までの各種設定を実施したのち、クライアント端末からTigerVNC Viewerを用いてリモート接続を試行すると、ウィンドウは起動するも画面が「真っ黒」となりデスクトップが表示されていない。
(図321)
(3-2-2) 原因
gnome-sessionを起動できていない事が原因でした。
根本原因としては最初のパッケージインストールの段階で「GNOME Desktop」のインストールが漏れていたため、gnome-session等のシェルスクリプトも存在していなかったため、起動対象のgnome-sessionが見つからないためエラーとなっていました。
(図322)
(3-2-3) 対処方法
「GNOME Desktop」をインストールする事により起動に成功しました。
yum groupinstall "GNOME Desktop"
下記は”GNOME Desktop”のインストール時に導入される名前がgnome-xxxxのパッケージですが、今回起動したい「gnome-session」も含まれている事が確認できます。
(図323)
(3-3) その他:障害調査の方法
もしリモートデスクトップが正常に起動しない場合の確認ポイントをいくつか記載します。
(3-3-1) サービスの起動ログの確認
「systemctl start vncserver@:[Your Number].service」でVNCサーバのサービス起動を行うと、「/home/[VNC User]/.vnc」配下に起動のログファイルが作成されます。もしエラーが出たらこのログをチェックする事でヒントが見つかる可能性があります。
ログは以下のパスに格納されています。
$ cd ~/.vnc
(図331)①
下記は実際のログの例です。私はここのログを見てgnome-sessionが起動していない事に気がつきました。
vncext: VNC extension running! vncext: Listening for VNC connections on all interface(s), port 5901 vncext: created VNC server for screen 0 /home/admin/.vnc/xstartup: line 2: gnome-session: command not found
( 図331)②