X11設定とプログラミングです。
X11のソースコードは以下から参照できる。カーネルと併せてコードを見ることで、実際のところどんなプログラムが低レベルな領域で動いているのかを確認できる。GTK/GNOMEやQt/KDEの開発がしたい時も、ウィンドウシステムのコードを知ることで、実際にどんなことがデスクトップ環境で行われているのか、全貌を概観できる。
X11とXアプリケーションのやり取りをするライブラリ。これを使うことで、Xプロトコルの詳細を知らなくてもXアプリケーションが作れる。GTK+やQtはこれを使って実現されている。内容はWindowsプログラミングと良く似たメッセージループを利用する。
Wikipedia
以下はXlibのサンプルコード。
まず、XNextEvent()関数にXEvent型の変数eventのポインタを渡す。これによって次のイベント(マウスやキーボード、ウィンドウの変化などでイベントが発生した時にメッセージを与える)を取り出すことができる。
event.typeがExpose(再描画要求)になった時やButtonPress(マウスボタンが押された)になった時などに応じて、適切な処理を実行するように記述する。
イベント駆動を参照のこと。
Xlibでは、グラフィックスの描画のためにグラフィックコンテキスト(GC)を作成・設定・解放する。
GCには描画する色や線や背景のスタイルなどの情報が含まれる。
GCの作成にはXCreateGC()を、GCの解放にはXFreeGC()を、GCの設定には構造体のXGCValuesやXSet*系の関数を用いる。
2023.07.02
Xはイベント駆動で動作する。XNextEvent()によって次のイベントを取得できる。中でも特別なのがExposeイベントで、ウィンドウの再描画が必要になった時に発生する。
2023.07.02
以下が参考になります。
XCB(X C Binding)は、Xlibを置換するための、XのC言語によるバインディング。
サイズをできるだけ小さくし、シンプルにした上で、直接Xプロトコルを操作できるようなライブラリを目標としている。
X11の設定ファイルです。
最近はハードウェアを自動認識するため、あまりいじることはありませんが、昔から超複雑で、一番厄介な設定ファイルです。
Section "section-name"~EndSectionは各セクションを表し、各セクションはエントリ行から成り立つ。エントリはオプション名と1つ以上のオプションから成り立つ。
セクション | 説明 |
---|---|
ServerLayout | 1つのスクリーン(Screen)と2つの入力デバイスすなわちキーボードとマウス(InputDevice)を指定する。 |
Files | FontPathでフォントのパスを指定する。 |
Module | ロードされるX11のモジュールを指定する。 |
InputDevice | それぞれの入力デバイスのドライバ(Driver)やオプションなどの設定をする。 |
Monitor | モニタの設定をする。 |
Device | ビデオカードの設定をする。ドライバはDriverで指定する。 |
Screen | DeviceセクションとMonitorセクションで設定した内容を指定し、ひとつのスクリーンとして設定する。 |
DRI | オプション設定。DRI(Direct Rendering Infrastructure)を設定する。 |
以下のページが参考になります。
DRIについてはOpenGLを参照のこと。
DRIはXサーバを経由せず、Xクライアントが直接GPUにアクセスできるようにするための仕様。高速な描画が可能となる。OpenGLライブラリであるMesaなどが利用している。
UNIXシステム管理(システム情報と設定)やBash(シェルスクリプト)も参照のこと。
startxやxinitはXサーバーを起動するコマンド。.xinitrcや起動スクリプトを実行する。
.xinitrcはカスタマイズすることで、Xサーバーが起動する時に実行するアプリケーションやウィンドウマネージャを設定できる。
スクリプト | 説明 |
---|---|
.xsession | 端末のX画面(ディスプレイマネージャ)にログインした時に実行される初期化スクリプト。 |
.xinitrc | startxコマンドやxinitコマンドでXを起動した時に実行される初期化スクリプト。 |
2024.10.06編集
.xinitrcあるいは.xsessionをカスタマイズすることで、Xサーバーを起動させたい時に行わせたい処理を記述できる。
たとえば、Window Makerを起動したければ.xinitrcに以下のように記述する。
exec wmaker
これで、コンソール画面(CUIでログインしたシェルのプロンプト)から
$ startx
を実行すれば、Xサーバーと一緒にWindow Makerが起動する。
必要に応じて日本語入力メソッドなどの設定を.xinitrcに記述する。Linux日本語入力を参照のこと。
詳しくはxinitrc - ArchWikiにサンプルコードなどがあるため、そちらを参照のこと。
複数のデスクトップ環境をインストールしている場合、GDMなどのディスプレイマネージャでログインする時に、セッションを選択することができる。
.Xdefaultsあるいは.Xresourcesは、リソースファイルと呼ばれる設定ファイル。
X11を使って作られたアプリケーションの設定パラメータ(リソース)を編集することができる。
たとえば、端末エミュレータのktermなどについて、文字色や背景色といった表示スタイルを変更できる。
.Xmodmapは、X11におけるキーマップを変更できる設定ファイル。
非常にシンプルな、X11標準のウィンドウマネージャ。
FVWM (twm亜種)も参照のこと。
同じくシンプルな、X11標準のターミナルエミュレータ。
Linux端末も参照のこと。
ktermは日本語の表示ができるX11のターミナルエミュレータ。X11/twm環境などで利用される。
また、日本語入力についてはkinput2-cannaなどを利用することが多い。Linux日本語入力を参照のこと。
xclockは時計。xlogoはXロゴ。xeyesはマウスカーソルを見つめる目玉。xcalcは電卓。xsnowは雪を降らせる。xpenguinsはペンギンがやってくる。
X11にはこうしたさまざまなオマケアプリケーションがある。twmで使うと面白いのでぜひ体験してほしい。Xはtwmでxtermやxclockなどを使うと、軽くてカッコいい。
リモートのXプログラムを実行する方法。
X11はネットワーク透過なクライアント・サーバーシステムであるため、SSHと同じようにリモートにあるGUIプログラムをローカルから通信して起動することができる。ローカルで動いているXアプリケーションと全く同じように操作することができる。
基本的に、Xサーバー側でアクセス許可を行い(xhostコマンド)、Xクライアント側で接続するXサーバーのホスト名を設定する(DISPLAY環境変数)だけでよい。
また、「WindowsからLinux上のリモートのXアプリケーションを実行したい」といった場合は、Cygwin/Xが使える(ただし僕は使ったことがないので良く分からない)。Cygwin/XはUNIXアプリケーションをWindowsで動かすことのできるCygwinに含まれているX Window Systemで、Windows上にUNIXのAPIを構築し、その上でXを動かす。Cygwinも参照のこと。
VNCを参照のこと。
GUIの開発全般についてはGUI開発を参照のこと。
X11のman-pagesは以下から閲覧できます。
たとえば、以下のようなマニュアルが存在します。
X11の設定。
昔は、xorg.confはXF86Configという名前でした。