(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。
(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とは?
・またウィンドウマネージャは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になります。 |