web-dev-qa-db-ja.com

WindowsからLinuxへの移行:理解-X Window System、X Server、Xorg、Xfree86

私はWindowsからLinuxに移行するWindows開発者(Win32api)です。 Linuxをインストールする際には、X11、X Window System、X Server、Xorg、Xfree86などについて知っておくべきことがたくさんあります。

どうして私たちはウィンドウズでそのようなことに気づかないのですか?これらに関するWikiの記事は私を怖がらせます。誰かがこれらのことを説明できますか?それらはどのように機能しますか?なぜそれはWindowsではなくLinuxでそれほど複雑なのですか?

良い参考資料もありがたいです。

PS:私は内部を知るのが大好きです、深く掘り下げることを躊躇しないでください。

10
claws

Windowsは、単一のAPI /フレームワークの単一の実装に加えて、単一のデスクトップの単一の実装を提供します。これらはすべてMicrosoftによって行われます。

Unixシステムでは、複数の実装(Xorg、Xfree86)が存在するAPI /フレームワーク(X11/X Window System)を取得し、その上にさまざまな「高レベル」API /フレームワーク(GTK +、Qt、... )生のX11は非常に原始的であり、その上にさまざまなデスクトップ(Gnome、KDEなど)があり、すべて異なる人によって作成されているためです。

さらに、X11システムは、リモートGUI(つまり、リモートで実行されているアプリケーションのGUIを表示するlokalマシン)を念頭に置いてゼロから設計されており、「Xサーバー」と「Xクライアント」の概念が導入されています。

次に、初心者にとって間違った方法を「感じる」という命名法があります。ローカルマシンは「GUIの表示」サービスを提供する「Xサーバー」を実行し、リモートマシンはサービスを利用する「Xクライアント」です。マシン上でGUIを表示します。

さて、それは簡単な概要です。それを整理すると、その主題に関する記事やフォーラムの投稿を理解するのがはるかに簡単になるはずです。

編集:OPの最初の2つのコメントに答えます。

はい、「X11」は単なるプロトコルであり、Xorg/XFree86は2つの実装です。基本的なレベルでは、X11は線と点を描くことだけを目的としており、GUIを実行する場合はそれほど便利ではありません。

X11プロトコルに加えて、人々は多くのことを実装しました。Microsoftが実際に物事を分離することを決して気にしなかったため、Windowsと1:1の比較を行うことはかなり困難です。また、私はGUIタイプの開発者ではありません。つまり、どちらかシステムでの実際の経験は最小限です。

下部にある「ウィンドウマネージャー」は、ウィンドウ(境界線の処理、ボタンの閉じる/最小化/最大化、サイズ変更など)を提供し、ウィンドウ内の「領域」をウィジェットツールセットに提供します。多くのウィンドウマネージャーがあり、一部は他のシステム(Windows、MacOS、AmigaOSなど)を模倣しており、残りのシステムに対してほとんど互換性があります。

「ウィジェットツールセット」は、GUIを構築するためのボタン、スライダー、テキストフィールドなどを提供します。これは、(アプリケーション開発者として)実際にAPIに関して「見る」ことができるものであり、アプリケーションの「ルックアンドフィール」の大部分を決定するものです。

「デスクトップ」は、一貫したルックアンドフィールを提供するために、特定のウィジェットツールセット/ウィンドウマネージャーの組み合わせの上に多数のアプリケーションを構築します。実際にデスクトップ自体を開発したいのでなければ、これらを気にする必要はありません。

デスクトップ「Gnome」は、ウィンドウマネージャー「Metacity」の上にあるウィジェットツールセット「GTK +」を使用します。

デスクトップ「KDE」は、ウィンドウマネージャー「KWin」の上にあるウィジェットツールセット「Qt」を使用します。

特に、GTK +とQtの2つは、単純な「ウィジェットツールセット」をはるかに超えて「アプリケーション開発フレームワーク」に進化したことに注意してください。 Linux用のGUIアプリを開発する場合は、効果的に、これら2つのうちどちらを使用するかを選択する必要があります。より「軽量」なアプリ(大きなライブラリの依存関係を必要としない)が必要な場合は、より多くの選択肢がありますが、今日、ほとんどのシステムには、GTK +とQtライブラリがすでにインストールされています。

GnomeデスクトップでQtアプリを使用したり、KDEデスクトップでGTK +アプリを使用したりすることは完全に可能であるため(常にそうとは限りませんでした)、互換性についてほとんど心配する必要はありません。同等の機能を持つ2つのアプリのどちらかを選択すると、人々は通常、選択したデスクトップの「ネイティブ」ウィジェットを使用するアプリを好むでしょうが、私はそれについて心配しません。

「ウィジェットツールセット」の選択におけるその他のより重要な箇条書き:ライセンス条項、選択した言語のサポート、クロスプラットフォームの互換性。


Post Scriptum:数年後、私は自分のGUIプログラミングの経験をいくつか身に付けましたが、上記の説明に1つ欠けていることがわかりました。 「どちらに行くか」のアドバイスを探している場合: wxWidgets 。これは、ネイティブで使用しているもののon topを構築し、透過的に移植可能GUI開発を可能にするフレームワークです。 、パフォーマンスを犠牲にすることなく、またはライセンスストリングを接続することなく。 C++ API。これは私がGUIのニーズに合わせて選択したパスであり、完全を期すためにshouldと言及する必要があると感じました。

13
DevSolar

http://en.wikipedia.org/wiki/X_Window_System の説明を理解するのが難しい理由がわかりませんが、とにかく:

X Window Systemは通常、次の2つの部分で構成されます。

  • サーバー(XServerと呼ばれる)
  • クライアント(.. XClientsと呼ばれます:))

サーバーはハードウェア(グラフィックカード、入力デバイス)に接続し、クライアントがこれらのリソースを使用できるようにします。クライアントはxserverに接続し、提供されたリソースを使用します。

Unix用のサーバー(Xorg、macの人々は独自のものなど)とWindows用のサーバー(Hummingbird、CygwinのXorgの移植版など)があります。

あるOS上のクライアントを別のOSで実行されているサーバーに接続できます。

サーバーとクライアント間の通信は、 Xlib-API または(より最近の) xcb-API のいずれかを介して行われます。

単純なアプリケーションを作成するには、通常、次のようにします。

  • xserverに接続します
  • xserverにウィンドウの作成を要求します(これにより「ハンドル」が提供されます)
  • xserverにウィンドウを表示するように指示します
  • プロセスイベント(マウス、キーボード、露出、モーションなど)
  • ウィンドウにものを描画します(テキスト、グラフィックなど)
  • xserverにすべてのリソースを解放するように指示してアプリを終了します

そして..完了。

3
akira