第7章 X Window システム

目次

7.1. 重要パッケージ
7.2. デスクトップ環境の設定
7.2.1. Debian メニュー
7.2.2. Freedesktop.org メニュー
7.2.3. Freedesktop.org メニューからの Debian  メニュー
7.3. サーバー/クライアント関係
7.4. X サーバー
7.4.1. X サーバーの (再)設定
7.4.2. X サーバーへの接続方法
7.5. X Window システムの起動
7.5.1. gdm3 で X セッションをスタート
7.5.2. X セッションのカスタム化 (古典的方法)
7.5.3. X セッションのカスタム化 (新方法)
7.5.4. リモート X クライアントを SSH 経由で接続
7.5.5. インターネット経由のセキュアーな X ターミナル
7.6. X Window でのフォント
7.6.1. 基本的フォント
7.6.2. 追加のフォント
7.6.3. CJK フォント
7.7. X アプリケーション
7.7.1. X オフィスアプリケーション
7.7.2. X ユーティリティーアプリケーション
7.8. X トリビア
7.8.1. クリップボード
7.8.2. X でのキーマップとポインターボタンのマッピング
7.8.3. 古典的 X クライアント
7.8.4. X ターミナルエミュレーター — xterm
7.8.5. X クライアントを root で実行
[警告] 警告

本章は、2013年にリリースされた Debian 7.0 (Wheezy) に基づいているため、内容が陳腐化しつつあります。

Debian システム上の X Window システムX.Org 由来のソースに基づいています。

インストールを簡略化するための (メタ)パッケージが少々あります。

表7.1 X Window のためのキーとなる (メタ)パッケージのリスト

(メタ)パッケージ ポプコン サイズ 説明
xorg I:512 52 X ライブラリー、X サーバー、フォントセット、基本的な X クライアントとユーティリティーの集合 (メタパッケージ)
xserver-xorg V:165, I:555 238 X サーバーのフルスイーツとその設定
xbase-clients I:76 46 X クライアントの雑多な集合 (メタパッケージ)
x11-common V:411, I:808 305 X Window システムのためのファイルシステムインフラ
xorg-docs I:8 2040 X.Org ソフトウエアースイーツの雑多な文書
menu V:128, I:339 1786 メニューに対応しているアプリケーションに関して Debian メニューを生成
gksu V:56, I:291 460 su(1)sudo(8) の Gtk+ フロントエンド
menu-xdg V:28, I:148 76 Debian メニュー構造を freedesktop.org の xdg メニュー構造に変換
xdg-utils V:253, I:573 306 freedesktop.org によって提供される統合デスクトップ環境のためのユーティリティー
task-gnome-desktop I:220 6 標準の GNOME デスクトップ環境 (メタパッケージ)
task-kde-desktop I:65 6 コアの KDE デスクトップ環境 (メタパッケージ)
task-xfce-desktop I:89 6 Xfce 軽量デスクトップ環境 (メタパッケージ)
task-lxde-desktop I:44 6 LXDE 軽量デスクトップ環境 (メタパッケージ)
fluxbox V:3, I:13 3739 Fluxbox: 自由自在に設定可能でリソース消費が少ない X ウィンドウマネージャー

X の基本に関しては、X(7)the LDP XWindow-User-HOWTO を参照下さい。

デスクトップ環境は、通常 X ウィンドウマネージャーとファイルマネージャーと互換性あるユーティリティープログラムのスイートの組み合わせです。

GNOMEKDEXfceLXDE 等の充実したデスクトップ環境aptitude のタスクメニューを使って設定できます。

[ヒント] ヒント

タスクメニューは Debian の unstable/testing 環境下では最新のパッケージの変遷状態を反映していないかもしれません。そのような状況ではパッケージ間のコンフリクトを避けるために aptitude(8) のタスクメニューの下でいくつかの (メタ)パッケージを非選択にする必要があります。(メタ)パッケージを非選択にする場合には、それらに依存関係を提供しているパッケージが自動削除されないように特定のパッケージを手動選択しなければいけません。

上記と違う方法として、Fluxbox 等の X ウィンドウマネージャーだけを使って簡単な環境を設定する事もできます。

X ウィンドウマネージャーやデスクトップ環境のガイドは X のためのウィンドウマネージャーを参照下さい。

Debian メニューシステムmenu パッケージの update-menus(1) を使って、テキストと X の両指向のプログラムに関して一般化されたインターフェースを提供します。各パッケージは "/usr/share/menu/" ディレクトリーにメニューデーターをインストールします。"/usr/share/menu/README" を参照下さい。

GNOME や KDE のような Freedesktop.org メニュー 準拠のウィンドーマネージャー環境から伝統的な Debian メニューにアクセスするのには、menu-xdg パッケージをインストールしなければいけません。

X Window システムはサーバーとクライアントのプログラムの組み合わせとして起動されます。ローカルリモートと言う言葉に対応するサーバークライアントと言う言葉の意味に注意を払う必要があります。


最近の X サーバーは MIT 共有メモリー拡張 機能があり、ローカルの X クライアントとローカルの共有メモリーを使って通信します。これはネットワーク透過性の Xlib プロセス間通信チャンネルをバイパスし、大きなイメージを扱う際の性能が得られるようにしています。

X サーバーの情報は xorg(1) を参照下さい。

"X サーバー " (ディスプレー側) が"X クライアント" (アプリケーション側) からの接続を許可するようにするにはいくつかの方法があります。


[警告] 警告

暗号手法を使っている等といった非常に良い理由無しには、X 接続のためにセキュアーされていないネットワーク経由のリモート TCP/IP 接続を使ってはいけません。暗号化無しのリモート TCP/IP ソケット接続は盗聴の被害に会いやすく、Debian システムではデフォールトで無効化されています。"ssh -X" を使います。

[警告] 警告

セキュアーされていないネットワーク経由で XDMCP 接続も使ってはいけません。XDMCP 接続は、UDP/IP 経由で暗号化せずデーターを送信するので盗聴攻撃を受けやすいです。

[ヒント] ヒント

LTSP は、Linux ターミナルサーバープロジェクトのことです。

X Window システムは X サーバーとそれに接続する X クライアントの組み合わせの X セッションとしてよく起動されます。通常のデスクトップ環境ではそれらの両方ともワークステーション上で実行されます。

X session は次のようにして起動されます。

  • コマンドラインからの startx コマンド

  • "/etc/rc?.d/" ディレクトリー ("?" はランレベルに対応) 中の最後にある起動スクリプトから起動される X ディスプレーマネージャーデーモンプログラム *dm の1つ

[ヒント] ヒント

ディスプレーマネージャーデーモンの起動スクリプトは実際に実行される前に "/etc/X11/default-display-manager" ファイルの内容を確認します。こうすることで X ディスプレーマネージャーデーモンプログラムが1つだけが実行されることを確実にします。

[ヒント] ヒント

X ディスプレーマネージャーの初期環境変数に関しては、「X Window の下でのみ特定ロケール」を参照下さい。

本質的にこれらすべてのプログラムは "/etc/X11/Xsession" スクリプトを実行します。そうすることで、"/etc/X11/Xsession" スクリプトは、"/etc/X11/Xsession.d/" ディレクトリー中のスクリプトを run-parts(8) 風に実行します。これは本質的に次の順番で見つかる最初のプログラムを exec builtin コマンドで実行することです。

  1. もし定義されていた場合には、X ディスプレーマネージャーにより "/etc/X11/Xsession" の引数として指定されたスクリプト。

  2. もし定義されていた場合には、"~/.xsession" か "~/.Xsession" スクリプト。

  3. もし定義されていた場合には、"/usr/bin/x-session-manager" コマンド。

  4. もし定義されていた場合には、"/usr/bin/x-window-manager" コマンド。

  5. もし定義されていた場合には、"/usr/bin/x-terminal-emulator" コマンド。

このプロセスは "/etc/X11/Xsession.options" の内容に影響されます。これらの "/usr/bin/x-*" コマンドが指し示すプログラムが正確に何であるかは Debian の alternative システムにより決定され、"update-alternatives --config x-session-manager" 等によって変更されます。

詳細は Xsession(5) 参照ください。

gdm3(1) はメニューから X セッションのセッションのタイプ (デスクトップ環境: 「デスクトップ環境の設定」) とか、言語 (ロケール: 「ロケール」) を選択できるようにします。それは "~/.dmrc" の中に選択されたデフォールト値を次のように保存します。

[Desktop]
Session=default
Language=ja_JP.UTF-8

2002年に、Fontconfig 2.0 がフォントアクセスの設定とカスタム化のためのディストリビューション非依存のライブラリーとして作られました。Debian はsqueeze 以降 Fontconfig 2.0 だけをそのフォント設定に使います。

X Window システムのフォントサポートは次のように要約できます。

  • 旧来の X サーバー側フォントサポートシステム

    • 旧式バージョンの X クライアントアプリケーションとの下位互換性ためにオリジナルの中核 X11 フォントシステムが提供されています。

    • オリジナルの中核 X11 フォントは X サーバーにインストールされます。

  • 現代的な X クライアント側フォントサポートシステム

    • 現代的な X システムはこの後にリストされる (「基本的フォント」「追加のフォント」「CJK フォント」) 全てのフォントをアンチエリアシングなどの先進的機能とともにサポートします。

    • Xft 2.0 はGNOMEKDELibreOffice 由来等の現代的な X アプリケーションを FreeType 2.0 ライブラリーと結びつけます。

    • FreeType 2.0 はフォントのラスター化ライブラリーを提供します。

    • FontconfigXft 2.0 のためのフォント規定を提供します。その設定は fonts.conf(5) を参照下さい。

    • 現代的な Xft 2.0 を使う X アプリケーションは現代的な X サーバーに X レンダリング拡張を使って話しかけます。

    • X レンダリング拡張はフォントアクセスとグリフイメージ生成を X サーバーから X クライアントに移動します。


フォント設定情報は次のようにして確認できます。

  • 中核 X11 フォントパスに関しては "xset q"

  • fontconfig のフォントデフォールトに関しては "fc-match"

  • fontconfig で利用可能なフォントに関しては "fc-list"

[ヒント] ヒント

"The Penguin and Unicode" は現代的な X Window システムの良い概論です。http://unifont.org/ にある他の文書も Unicode フォントや Unicode 化されたソフトや国際化や Unicode のフリー (英語で自由と無償という意味)/ リブレ (仏語等で自由の意味、無償という意味は無い)/ オープンソース (FLOSS) オペレーティングシステム上での使い勝手の問題に関する良い情報源です。

コンピューターフォントには大きくわけて2つのタイプがあります。

  • ビットマップフォント (低解像度のラスター化で良好)

  • アウトラインやストロークフォント (高解像度ラスター化で良好)

ビットマップフォントを拡大するとギザギザのイメージになってしまいますが、アウトラインやストロークフォント拡大するとスムーズなイメージになります。

Debian システム上のビットマップフォントは、".pcf.gz" というファイル拡張子を持った圧縮された X11 pcf ビットマップフォントファイルとして提供されます。

Debian システム上のアウトラインフォントは次で提供されます。

  • ".pfb" (バイナリーフォントファイル) と ".afm" (フォントメトリクスファイル) というファイル拡張子を持った PostScript Type 1 フォントファイル。

  • ".ttf" というファイル拡張子を通常持った TrueType (もしくは OpenType) フォントファイル。

[ヒント] ヒント

OpenTypeTrueTypePostScript Type 1 の両方を置き換えることを目指しています。

表7.5 PostScript Type 1 フォントへの対応表

フォントパッケージ ポプコン サイズ サンセリフフォント セリフフォント モノスペースフォント フォントの起源
PostScript N/A N/A Helvetica Times Courier Adobe
gsfonts I:708 4439 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L URW (Adobe 互換サイズ)
gsfonts-x11 I:135 96 Nimbus Sans L Nimbus Roman No9 L Nimbus Mono L PostScript Type 1 フォントでの X フォントサポート。
t1-cyrillic I:23 4882 Free Helvetian Free Times Free Courier 拡張 URW (Adobe 互換サイズ)
lmodern I:152 33270 LMSans* LMRoman* LMTypewriter* Computer Modern (TeX 由来) に準拠したスケーラブルな PostScript と OpenType のフォント

表7.6 TrueType フォントへの対応表

フォントパッケージ ポプコン サイズ サンセリフフォント セリフフォント モノスペースフォント フォントの起源
ttf-mscorefonts-installer V:1, I:92 125 Arial Times New Roman Courier New Microsoft (Adobe 互換サイズ) (これは non-free データーをインストールします)
fonts-liberation I:577 2093 Liberation Sans Liberation Serif Liberation Mono Liberation フォントプロジェクト (Microsoft 互換サイズ)
fonts-freefont-ttf V:39, I:388 10747 FreeSans FreeSerif FreeMono GNU freefont (Microsoft 互換サイズ)
fonts-dejavu I:470 39 DejaVu Sans DejaVu Serif DejaVu Sans Mono DejaVu、Unicode 対応 Bitstream Vera
fonts-dejavu-core V:285, I:679 2954 DejaVu Sans DejaVu Serif DejaVu Sans Mono DejaVu、Unicode 対応 Bitstream Vera (sans, sans-bold, serif, serif-bold, mono, mono-bold)
fonts-dejavu-extra I:490 7217 N/A N/A N/A DejaVu、Unicode 対応 Bitstream Vera (oblique, italic, bold-oblique, bold-italic, condensed)
ttf-unifont I:23 16901 N/A N/A unifont GNU Unifont、Unicode 5.1 基本多言語面 (BMP) 中の全印刷可能文字

[ヒント] ヒント

DejaVu フォントは Bitstream Vera フォントに基づきそれを包含します。

CJK (中日韓)文字のフォントに焦点を当てキーポイントを記します。


"P" の付いた "VL PGothic" のようなフォント名は、固定幅フォントの "VL Gothic" フォントに対応するプロポーショナルフォントです。

例えば、Shift_JIS コードテーブルには 7070文字があります。それらは次のように分類できます。

  • JIS X 0201 1バイト文字 (191文字、別名: 半角文字)

  • JIS X 0208 2バイト文字 (6879文字、別名: 全角文字)

2バイト文字は CJK 固定幅フォントを使うコンソールターミナル上で倍の幅を占めます。このような状況に対応するために、ファイル拡張子 ".hbf" を使う Hanzi ビットマップフォント (HBF) ファイルが1バイトと2バイトの文字を含むフォントのために使えます。

TrueType フォントファイルのための空間を節約するために、ファイル拡張子 ".ttc" を持つ TrueType フォントコレクションファイルを使う事ができます。

文字の複雑なコード空間をカバーするために、CID でキーされた PostScript Type 1 フォントは "%!PS-Adobe-3.0 Resource-CMap" で始まる CMap ファイルとともに使われます。これは通常の X ディスプレーではほとんど使われませんが PDF のレンダリング等では使われます (「X ユーティリティーアプリケーション」参照下さい)。

[ヒント] ヒント

ハン(漢)統一のために複数のグリフがいくつかの Unicode コードポイントに対して期待されています。最も気になることの一つは CJK 国間で文字の位置が異なる "U+3001 IDEOGRAPHIC COMMA" と "U+3002 IDEOGRAPHIC FULL STOP" です。"~/.fonts.conf" を使って日本語中心のフォントを中国語中心のフォントより優先順位を上げるよう設定することで日本人は安心できるようになります。

基本的なオフィスアプリケーションのリストを記します (LO は LibreOffice)。


著者の目に止まった基本的ユーティリティーアプリケーションのリストを記します。


[注意] 注意

evinceokular によって CJK の PDF 文書を Cmap データー (「CJK フォント」) を使って表示する際には poppler-data パッケージ (以前は non-free だった、「Ghostscript」参照下さい) が必要です。

[注記] 注記

scribus (KDE) のようなソフトウエアーを GNOME デスクトップ環境にインストールすることは、同様の機能が GNOME デスクトップ環境下で利用でき無いのでまったく問題ありません。ただ、機能が重複するパッケージをインストールしすぎるとあなたのメニューが忙しくなってしまいます。

[警告] 警告

gdm3 のようなディスプレーマネージャーのプロンプトに root と入力して X ディスプレー・セッションマネージャーを root アカウントの下で実行してはいけません。なぜなら、たとえシステム管理業務を行おうとしている時ですら、こういう行為は安全でない (インセキュアー) と認識されているからです。X アーキテクチャ全てが root として実行するとインセキュアーと認識されています。通常ユーザーのような、可能な限り最低レベルの特権を使うように常にするべきです。

例えば "foo" 等の特定の X クライアントを root として実行する最も簡単な方法は次に記すように sudo(8) を使うことです。

$ sudo foo &
$ sudo -s
# foo &
$ gksu foo &
$ ssh -X root@localhost
# foo &
[注意] 注意

この目的だけのために上記のように ssh(1) を使うことはリソースの無駄遣いです。

X クライアントが X サーバーに接続するためには次のことに注意下さい。

  • 元のユーザーの "$XAUTHORITY" と "$DISPLAY" 環境変数の値は新たなユーザーの環境変数値にコピーされなければいけません。

  • "$XAUTHORITY" 環境変数の値で指示されるファイルが新たなユーザーによって読めなければいけません。

gksu パッケージ (ポプコン: V:56, I:291) はルート特権を獲得することに特化した GTK+ の GUI パッケージです。それが su(1) または sudo(8) をバックエンドに使うように "/apps/gksu/sudo-mode" gconf キーを使って設定できます。gconf キーを編集するには gconf-editor(1) を使えばできます (メニュー: "Applications" → "System Tools" → "Configuration Editor")。