Rainbow Planet (GT×IT×SP×SA)

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

01_IT技術 (Technology)

CentOS7でVNC-Serverを使ってリモートデスクトップ環境を構築する手順

投稿日:

(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)②

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-01_IT技術 (Technology)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サーバサイドJava(JSP&サーブレット)のFORM認証を用いたログイン画面の開発

(0)目次&概説 (1) サーバー側JavaのFORM認証  (1-1) 認証の種類  (1-2) FORM認証の特徴  (1-3) FORM認証の実装概要 (2) FORM認証の実装手順  (2-1 …

Linuxサーバ(CentOS6)にEclipse(OXYGEN)をインストールする

0.目次 (1) JDKの概要  (1-1) JDKの種類  (1-2) JDKのバージョン(2018年2月時点) (2) JDKのインストール  (2-1) wget コマンドでJDK の rpm …

JVMの基本アーキテクチャと各サブシステム等の概要説明について

(0)目次&概説 (1) 記事の目的 (2) Javaのアーキテクチャ概要・概観 (3) JVMのアーキテクチャ概要  (3-1) JVMの概観  (3-2) JVMの主要サブシステム1:Class …

日立JP1をLinuxサーバにインストールする手順

JP1評価版(ジョブスケジューラ)インストール簡易手順書です。 (0)目次 (1) 必要な資産の入手 (2) インストールの事前準備 (3) インストーラーの操作#1 (4) インストール後のセットア …

Python開発環境にPandasライブラリをインストールする手順

(0)目次&概説 (1) Pandasの導入  (1-1) Pandasとは? (2) オフラインインストール  (2-1) インストール資源の入手  (2-2) インストール時の諸注意  (2-3) …

Top