Rainbow Engine

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

Linux

VNC ServerとGNOMEデスクトップの概念や基本的な仕組みについて

投稿日:2020年5月22日 更新日:

(0)目次&概説

(1) 記事の目的・概要
(2) アーキテクチャ
 (2-1) VNC Serverとは?
 (2-2) Graphical Desktop Environmentとは?
 (2-3) Display Server Protocolとは?
 (2-4) Display Serverとは?
 (2-5) Window Managerとは?
 (2-6) 全体的な処理の流れ
(3) その他・補足
 (3-1) vnc-server関連のファイル

(1) 記事の目的

Unix系のOSにおけるGUIの仕組みやアーキテクチャについて、例を用いた説明により理解を深める事を目的としています。

(注意)
私自身、細かい処理の流れを知っている訳ではなく、むしろ知りたいと思って色々調査をしながら自分なりの理解を記録している状況です。内容には十分注意しているつもりですが、もし違っていたりする部分があれば指摘してもらえると助かります。

(表)今回の説明では下記の例を用いて行います。

コンポーネント名 使用コンポーネント
①VNC Viewer TigerVNC Viewer
②VNC Server tigervnc-server
③Graphical Desktop Environment GNOME
④Display Server Protocol X11
⑤Display Server X Window System
⑥Window Manager Mutter or Metacity

目次にもどる

(2) アーキテクチャ

(図260)

(2-1) VNC Serverとは?

イメージとしては「ネットワーク越しにリモート接続するためのサービス」でしょうか。

(概要)
・VNCはデスクトップ共有のためのシンクライアント・プロトコルでRBF(Remote Frame Buffer protocol)を使ってコンピュータの遠隔操作を可能にします。
・このプロトコルはフレームバッファ(画面の表示内容を記憶するメモリ領域)レベルで動作する事により、全てのウィンドウシステム及びアプリで動作するように設計されています。
・具体的にはマウスやキーボードの操作をネットワーク越しのコンピュータに伝達し、その操作結果(ピクセル情報)を逆方向にクライアントに戻す事(画面転送)などを指します。

(動作)
・VNCサーバのモジュールの一つである「vncserver」はPerlのスクリプトでXvncサーバ(VNC Server)の起動を簡素化しています(Xvncサーバのラッパースクリプト)。
・具体的にはxstartupの実行を中心とした各種処理(※VNC起動時のジオメトリ=x,yの大きさ設定、ピクセル形式設定、ディスプレイ番号のセット、VNC認証の補助等)
・Xvncサーバ(VNC Server)を適切なオプションで実行し、VNCデスクトップ上にてウィンドウマネージャを起動します。

(備考)
・オプションを指定しないと、デフォルトの設定(例:ディスプレイ番号=1)で実行される
・「$HOME/.vnc/xstartup」を編集する事で起動するアプリを設定できる(GNOMEを起動するのか?別のアプリを起動するのか?等)

目次にもどる

(2-2) Graphical Desktop Environmentとは?

イメージとしては「デスクトップ環境(クライアントから見える部分)」でしょうか。

(概要)
・初期の頃にGUIが誕生した背景として「デスクトップメタファー」の概念があります。「デスクトップメタファー」はコンピュータ画面を現実世界の机に見立てた比喩のデザインです。
・Desktop Environmentはそのデスクトップメタファーを実装したもので、OS上で動作する共通のGUIを描画するためのプログラムを束ねています(元々は方式を表現を表す言葉であったが、転じて実装されたソフトを総称する意味も持つようになった)

(例)
・具体的なソフト例として、今回の例に挙げている「GNOME」や「K Desktop Environment」などがあります。
・GNOMEの代表的なモジュールとして、①グラフィカルシェル(OSをGUIで操作するためのインターフェイス。例:GNOME shell)、②ファイルブラウザ、③World(地図や時計や天気)、④システム(ディスクやターミナル)など。GNOME3のGNOME Shellは主のWindow ManagerとしてMutterを採用しています。

目次にもどる

(2-3) Display Server Protocolとは?

(概要)
・Unix系のOS向けに作られたネットワークプロトコルで、遠隔(ネットワーク越し)からのGUIベースのリモートアクセスを可能にします=network-transparent。
・初期のX windowing systemはアメリカのMITにて1984年に開発されました。
・遠隔より起動するアプリケーションの処理等はすべてクライアント側で処理が行われ、画面のみがクライアントへ転送されます。
・「X.Org Server」は「X11」プロトコルを実装したものです。

目次にもどる

(2-4) Display Serverとは?

イメージとしては「フレームワーク・GUI全体の骨格+HWとの通信」でしょうか。

(概要)
・クライアントとOS・HW間の入出力制御の仲介役となるプログラムで、ウィンドウシステム(Window System)の重要なコンポーネントの一つで、その一つである「X」(≒X Window System)はUnix系のOSにおいて頻繁に使われています。
XはGUI環境における基本フレームワークを提供するもので、例えばウィンドウの描画やマウスによる移動等を実装する事ができます(他にもウィンドウ・アイコン・メニュー・スクロールバー等を制御するなど)
ウィンドウシステムではプロトコルや描画の根幹の部分をつかさどっている一方で、ボタンやメニュー等の実際の仕様がある訳ではなく(実際の描画は行っていない)、UI部分はX Window Systemに対して実装されるアプリの種類により広く見た目雰囲気が異なります(※あくまでライブラリやツールキットの管理、カーネルとの通信を担当しています)。

目次にもどる

(2-5) Window Managerとは?

・GUIにおいて、ウィンドウシステム内(X11等)でウィンドウの配置や見た目を制御するソフトを「Window Manager」と呼びます。
・具体的にはタイトルバーの配置やウィンドウのリサイズといった、画面の見た目配置に関わる部分をグラフィックライブラリ(Clutter等)制御しています。
・ウィンドウマネージャ自体はハードウェアとは直接連携しておらず、マウスやキーボードとの連絡は別途「Display Server」にて実施しています。

・またウィンドウマネージャはGNOMEといったデスクトップ環境と対になる形で存在するケースが多いものの、異なる組み合わせで利用する事も出来るようです(Xfceデスクトップ環境+KWinウィンドウマネージャ)

目次にもどる

(2-6) 全体的な処理の流れ

各コンポーネントの説明も踏まえて、全体の処理について記述します。

(図261)全体像

①VNC Viewer←→VNC Server
クライアント端末にてVNC Viewer(TigerVNC Viewer)からログインし、リモートデスクトップのセッション確立を開始します。

②VNC Server←→Graphical Desktop Environment
VNC Server(tigervnc-server)はxstartupファイルに記述されたデスクトップ環境のセッション(gnome-session)を起動します。

③Graphical Desktop Environment←→Display Server
デスクトップ環境(GNOME)はディスプレイサーバプロトコル(X11)を用いて、ディスプレイサーバ(X Window System)と通信します。

④Display Server←→WindowManager
ディスプレイサーバ(X Window System)とWindowManager(Mutter)の間でも通信が発生しています。Wayland等ではここの区別がなく同一のモジュールの中ですが、X Window Systemにおいては完全に独立した部品になっている。

⑤Display Server←→OS←→HW
ディスプレイサーバ(X Window System)はGUIを実装するフレームワークのみならず、HWとの通信する役割も果たしています。具体的にはマウスやキーボード、ディスプレイからの指令をアプリに伝えたり、その逆をしたりです。

⑥クライアントHW←→サーバHW
クライアント側にて操作した情報が、サーバ側のHWにも伝達されます。

目次にもどる

(3) その他・補足

(3-1) vnc-server関連のファイル

(表)

<ファイル名> <説明>
$HOME/.vnc/xstartup ・VNCのデスクトップを開始する際に、どのXアプリケーション(≒X Window System)?セッションマネージャ?を起動するかを指定するためのシェルスクリプトです。
・例えば「gnome-session &」と記載した場合はvnc-serverの起動時にGNOMEのセッションを起動します。
・もしこのファイルが存在しない場合、vncserverは自動でxstartupスクリプトを作成し、設定されている「ウィンドウマネージャ」を起動しようとします。
/etc/tigervnc/vncserver-config-defaults ・「$HOME/.vnc/config」の代替となるファイルで、内容的には同様に起動オプションの設定が記載されています。
・もし本ファイルがあれば、本ファイルがデフォルト設定となりますが、もし「$HOME/.vnc/config」が存在すれば、そちらの設定が優先されます。
・設定の優先度としては以下の順番で優先されます(読込みの順序は逆に③→②→①の順)
①/etc/tigervnc/vncserver-config-mandatory
②$HOME/.vnc/config
③/etc/tigervnc/vncserver-config-defaults
$HOME/.vnc/config ・XVncに渡すオプションを記述しているファイルです。
(例)
securitytypes=vncauth,tlsvnc
desktop=sandbox
geometry=2000×1200
$HOME/.vnc/passwd ・VNCのパスワードを記録したファイルです。
$HOME/.vnc/host:display#.log ・Xvnc及びxstartupより起動されたアプリケーションのログファイル
$HOME/.vnc/host:display#.pid ・XvncのプロセスIDを保持したファイルです。
・プロセスを「-kill」等で終了させる際に指定するIDになります。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Linux

執筆者:


comment

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

関連記事

GitHubのアカウント作成の手順と初期設定をご紹介

  <目次> (1) GitHubのアカウント作成の手順と初期設定をご紹介  (1-1) STEP1:GitHubアカウント作成  (1-2) STEP2:SSH Keyの設定 (1) Gi …

Linux:定期的に再起動するスクリプト

Linuxサーバーを定期的に再起動するスクリプトを紹介します。定期的に再起動するという処理はシステム構築においては、運用の中で定義される「死活監視」に関連してくる話になります。 ●シェルとは?シェルス …

Tomcatのサービスが起動しない場合の想定原因と対処(Linux系OSの例)

<目次> (1) Tomcatのサービスが起動しない場合の想定原因と対処(Linux系OSの例)  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 (1) Tomca …

GDBの使い方をC++のプログラムのデバッグを例にご紹介

  <目次> (1) GDBの使い方をC++のプログラムのデバッグを例にご紹介  (1-1) GDBのデバッグのシナリオ概要(例)  (1-2) GDBのデバッグ手順(例)  (1-3) そ …

CentOS6の日本語入力の設定中に起きた「Unable to keep Input Method running」エラーや文字化けの対処方法について

(0)目次&概説 (1) 記事の目的 (2) 日本語化の対応手順 (3) 各パッケージの補足説明 (4) エラー対処:IBusの”Unable to keep Input Method R …

  • English (United States)
  • 日本語
Top