WindowsからLinuxへの移行:理解-Xウィンドウシステム、Xサーバー、Xorg、Xfree86


10

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

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

良い参考文献もありがたいです。

PS:私は内部を知るのが大好きです、深く掘り下げるのをためらわないでください。


1
回答を読んだ後、この記事「Xプロトコルに関する考えととりとめのないこと」を読んでください 。julien.danjou.info/blog/…

1
変更されたとしてリンクjulien.danjou.info/blog/2010/...
fstamour

回答:


13

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

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

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

次に、新参者に間違った方法を「感じる」という命名法があります。ローカルマシンは「Xサーバー」を実行しており、「GUIを表示」サービスを提供していますが、リモートマシンはサービスを利用する「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」を使用します。

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

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

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


ポストScriptumは:数年後に戻って来て、私は自分自身のいくつかのGUIプログラミングの経験をピックアップし、あなたがアドバイスを「どこへ行くどの方法」を探している場合は、1つの事は上記の説明に欠けて実現しました:wxWidgetsの。これは、ネイティブで使用しているもののに構築するフレームワークであり、パフォーマンスを犠牲にしたり、licensind文字列をアタッチしたりすることなく、透過的に移植可能 GUI開発を可能にします。C ++ API。これはGUIのニーズに合わせて選択したパスであり、完全を期すために言及する必要があると感じました。


+1し、フレームワーク(Qtなど)を選択できた場合は、すべてのX要素についてそれほど気にする必要はありません(ただし一部)。
ピータージャリック

+1&So Windows APIのGUI部分はQt&GTK +と同等です。次に、windowsのX Window Systemに相当するものは何ですか?KDEとGnomeが存在する理由と方法

@DevSolar:あなたは正しい方向に進んでいます。もう少し説明してください。X11はPOSIXのような仕様ですか?xorgとxfree86は2つの実装ですか?GTK +とQtがある場合、GnomeとKDEの必要性は何でしたか?各ステップ/レベルをウィンドウと比較してください。それは私には理解しやすいです。

At the bottom, a "window manager"Xウィンドウシステム上にウィンドウマネージャーが構築されていますか?もしそうなら、Windowsシステムは右下にありますか?あなたは私にウィンドウマネージャとウィンドウシステムを混同させています。

「Xorg」/「XFree86」によって実装された「X11」/「Xウィンドウ(システム)」は、一番下にあり、点と線を提供します。「ウィンドウマネージャー」(「Metacity」/「Kwin​​」)はウィンドウ(フレーム、ドラッグ、サイズ変更、閉じるなど)を提供します。
DevSolar 2010年

3

http://en.wikipedia.org/wiki/X_Window_Systemによって提供される説明を理解することがなぜ難しいと思うのか、私にはわかりません が、とにかく:

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

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

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

Unix(Xorg、macの人々は独自のものなど)とWindows(Hummingbird、XorgのCygwinのポートなど)用のサーバーが存在します。

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

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

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

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

そして..完了。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.