Linuxディスプレイシステムはさまざまな技術を使用しています。、プロトコル、拡張、アプリケーション、サーバー(デーモン)、ドライバー、および概念ウィンドウシステムの実装例:
Xorg、Wayland、X11、OpenGL、RandR、XrandR、画面解像度、DPI、ディスプレイサーバーなど
完全な写真がないと、膨大な量の情報が圧倒的または混乱する可能性があります。 Linuxはシステムの各側面に複数のドキュメントを表示しますが、世界中で正確にどのように機能しますか?
答え1
Linuxディスプレイ
さまざまな技術、プロトコル、拡張、アプリケーション、サーバー(デーモン)、ドライバー、コンセプトを使用して、Xorg、Wayland、X11、OpenGL、RandR、XrandR、画面解像度、DPI、ディスプレイサーバーなどを完全に理解するのは難しいかもしれませんが、目的を果たし、同時にすべて一緒に機能するわけではありません。
X-プロトコル
Xウィンドウシステム、X11(Xバージョン11)は、Unixシリーズオペレーティングシステムで一般的に使用されるビットマップ表示用のウィンドウシステムです。 Xはディスプレイデバイス上でウィンドウを移動し、マウスやキーボードと対話するGUI環境のための基本的なフレームワークを提供します。 Xはユーザーインターフェイスを必要とせず、これは別のプログラムによって処理されます。その結果、Xベースの環境の視覚的なスタイルは非常に多様であり、さまざまなプログラムはまったく異なるインターフェースを提供できます。 Xは1984年、MIT(マサチューセッツ工科大学)のAthenaプロジェクトで始まりました。 Xプロトコルは1987年9月からバージョン11(したがって「X11」という名前)になりました。 X.Org財団はXプロジェクトをリードしており、現在参照実装であるX.Org Serverは、MITライセンスおよび同様のライセンスに基づいて無料のオープンソースソフトウェアとして提供されています。
Xの実装
ほとんどのLinuxディストリビューションではX.Orgサーバーこれは、X.Org Foundationが管理するX Window System(X11)ディスプレイサーバーの無料のオープンソース実装です。 Xorg/Xは、スケーリングやレンダリングなど、提供されている多くの機能をネイティブにサポートしていないため、到来の牙使用拡大する例えばX補正、ランドR(RandRは以下で管理します。xrandr
たとえば、ファン、解像度、またはズームを設定できます。GLX(OpenGL拡張),それを作るまたは人工これにより、ウィンドウ階層のサブツリー全体がオフスクリーンバッファとしてレンダリングされます。その後、アプリケーションはそのバッファの内容を取得し、オフスクリーンバッファを自動的に親ウィンドウにマージできます。またはという外部プログラムによってマージされました。構成マネージャー他の人と同じように、独自の合成を作成してみてください。ウィンドウマネージャCompiz、Enlightenment、KWin、Marco、Metacity、Muffin、Mutter、Xfwmなどのタスクを実行します.他の人のために」非合成ウィンドウマネージャでは、スタンドアロン複合マネージャを使用できます。たとえば、次のようになります。ピカン、Xcompmgrまたはウナギ。Xorgサポート拡張リストできるもの:xdpyinfo -display :0 -queryExtensions | awk '/^number of extensions:/,/^default screen number/'
。
一方、ウェイランドXorg / X11のより簡単な代替案として、開発とメンテナンスが容易になるように意図されていますが、2020年現在、Gnome以外のWaylandのデスクトップサポートはまだ完全に準備されていません(例:KDE KwinとWaylandのサポート)ディストリビューションの観点から、Fedoraは以下を使用します。基本的にWayland。 WaylandとXorgを参照してください。同時に作業可能、これは使用される構成によって異なります。XウェイランドWaylandプロトコルで実行されるXサーバーを実装するためのX.Orgサーバーコードベースへの一連のパッチ。このパッチは、Waylandへの移行中にX11アプリケーションとの互換性のためにWayland開発者によって開発および維持され、2014年にX.Org Serverバージョン1.16で主流化されました。ユーザーがWeston内でXアプリケーションを実行すると、XWaylandを呼び出して要求を処理します。
フルレンジ
ㅏサーバーの表示あるいは、Windowsサーバーは、クライアントと残りのオペレーティングシステム、ハードウェア、および相互の入力と出力を調整することが主な作業であるプログラム(XorgまたはWaylandなど)です。ディスプレイサーバーは、ネットワーク透過またはネットワーク専用の通信プロトコルであるディスプレイサーバープロトコルを介してクライアントと通信します。たとえば、X11とWaylandはディスプレイサーバー通信プロトコルです。
図のようにウィンドウマネージャデスクトップ環境のもう1つの重要な要素は、グラフィカルユーザーインターフェースのウィンドウシステムでウィンドウの配置と外観を制御するために使用されるシステムソフトウェアです。ほとんどのウィンドウマネージャはデスクトップ環境を提供するように設計されています。これは基本的なグラフィックシステムと連携してグラフィックハードウェア、ポインティングデバイス、キーボードに必要な機能サポートを提供し、通常はウィジェットツールキットを使用して作成および作成されます。 KDEはカイウェンウィンドウマネージャ(2020年現在のWaylandのサポートが制限されている)として、Gnome 2も同様に以下を使用します。慰安庁Gnome 3で使用愚かウィンドウマネージャとして。
ウィンドウマネージャのもう一つの重要な側面はシンセサイザーまたは合成ウィンドウマネージャは、アプリケーションの各ウィンドウにオフスクリーンバッファを提供するウィンドウマネージャです。ウィンドウマネージャは、ウィンドウバッファを画面を表す画像に合成し、その結果をディスプレイメモリに書き込む。コンポジションウィンドウマネージャは、バッファウィンドウに対して追加の処理を実行し、混合、フェージング、サイズ変更、回転、コピー、曲げ、ねじり、混合、ぼかし、アプリケーションリダイレクトとウィンドウを複数に変換するなどの2Dおよび3Dアニメーション効果を適用できるディスプレイの1つです。そして仮想デスクトップ。コンピュータグラフィックス技術を使用すると、シャドウ、リアルタイムプレビュー、複雑なアニメーションなどの視覚効果をリアルタイムでレンダリングできます。画面が出るから二重バッファリング、アップデート中は点滅しません。最も一般的に使用される合成ウィンドウマネージャには、Linux、BSD、Hurd、OpenSolaris-Compiz、KWin、Xfwm、Enlightenment、Mutterが含まれます。それぞれはKDEのような独自の実装を持っています。KWinのシンセサイザーアニメーションの速度、引き裂き防止(vsync)、ウィンドウのサムネイル、サイズ変更方法など、多くの機能/設定があり、使用できます。OpenGLv2/OpenGLv3またはXレンダリングとしてレンダリングバックエンドXorgと。 (XRレンダリング/レンダリング混同しないでくださいXランドR/ランドR)。
OpenGL(オープングラフィックライブラリ)2Dおよび3Dベクトルグラフィックをレンダリングするためのクロス言語、クロスプラットフォームAPI(アプリケーションプログラミングインターフェイス)。このAPIは通常、ハードウェアアクセラレーションレンダリングのためにGPU(グラフィックス処理デバイス)と対話するために使用されます。 OpenGLは、Xorg、Wayland、またはそれらを実装するすべてのアプリケーションで使用できるレンダリングライブラリです。 OpenGLのインストールがチェックに合格しましたglxinfo | grep OpenGL
。
監視装置解決するコンピュータモニタまたはディスプレイデバイスの表示モードまたは表示モードは、表示できる各次元のさまざまなピクセル数を表します。通常、幅×高さで表され、単位はピクセルです。たとえば、1024×768は、幅が1024ピクセル、高さが768ピクセルであることを意味します。xrandr
使用することができる次へ追加またはレンダリング/シミュレーション新しいディスプレイ解像度。
これディープPIインチあたりのドット数を示します。スペース印刷/表示指標、特に1インチ(2.54cm)の範囲内で整列できる個々の点の数。コンピュータ画面にはドットはありませんが、ピクセルがあり、密接に関連する概念はインチあたりのピクセル数(PPI)なので、DPIはPPIの概念を通じて達成されます。デフォルト96
のDPI測定値は垂直および水平で96x96です。またX DPI(インチあたりのドット数)設定は、テキストのサイズ変更にのみ適用されますか?QAは非常に有益です。
ノート
いくつかのKDE GUIツール: systemsettings5
>ディスプレイkcmshell5 xserver
とkinfocenter
。
引用する
答え2
この質問は非常に広範であり、この回答で扱うよりもトピックについてはるかに多くの内容を書くことができます。私はLinuxグラフィックの進化の歴史的な視点を提供しようとしてきました。 Linuxのグラフィック、Windowsシステム、およびグラフィカルユーザーインターフェース(GUI)は、1990年代初頭にX Window System(X11)がLinuxに移植されて以来、多くの変化を経験しました。
Xウィンドウシステム
Xウィンドウシステムは1980年代のMITで開発されました。 X11という名前はXプロトコルのプロトコルバージョン11を表しますが、X10は1987年バージョン11に置き換えられる前にMITの外部でも使用されました。
X Windowsシステムは、1980年代の最先端のグラフィックシステムで使用するように設計されています。一般的なワークステーションには、ディスプレイモニタにフレームバッファの内容を表示する単純なCRTコントローラに接続された単一のフレームバッファがあります。 PCとワークステーションの時代以前のコンピューティングは、コンピュータルームの中央コンピュータに接続されたシリアル回線(「愚かな」)端子を介して行われていました。これらの歴史的背景はX11の設計に影響を与えました。グラフィカルアプリケーションはリモートコンピュータ上で実行することができ、ユーザはグラフィカルサポート端末を使用してプログラムと対話することができる。 「ターミナル」はワークステーションまたは専用のX端末です。
X11はサーバークライアントシステムとして設計されています。 Xサーバーはグラフィックハードウェアと直接通信する唯一の部分です。 Xクライアントは、Xプロトコル(ローカルUnixドメインソケットまたはTCP / IP接続を使用)を使用してサーバーと通信するアプリケーションです。クライアントはXプロトコルを使用してサーバーに要求を送信し、サーバーからイベントメッセージを受け取ります。
リクエストには次のメッセージが含まれます。
- ウィンドウの作成
- ウィンドウのマッピング/マッピング解除:ウィンドウの表示/非表示
- ウィンドウに描画:ピクセル、線、円弧、楕円、ピクセルマップなどを描画します。
- 指定したフォント、サイズ、スタイルを使用したテキストの表示
- ウィンドウの移動とサイズ変更、ウィンドウの積み重ね順序の変更などの操作を実行できます。
クライアントはメッセージを受け取ります(完全なリストではありません)。
- リクエストに応答
- キー押下とマウスクリックイベント
- 公開イベント(再描画するウィンドウ領域)
- フォーカスゲイン/損失イベント
ユーザーがウィンドウの移動、サイズ変更、閉じる、上げる、下げるなど、画面上でウィンドウを処理できるように、ウィンドウマネージャと呼ばれる特定のアプリケーションが提供されています。ウィンドウマネージャは、境界線、タイトルバー、グローバルメニューなどのウィンドウ装飾を表示することもできます。
X11サーバーは、ウィンドウ、フォント、ピックスマップ、カラーマップ、グラフィックスコンテキスト(たとえば、前景/背景色、線幅など)などのさまざまなリソースを処理(または少なくとも伝統的に処理)するという点で、かなり「高水準」と言えます。 。 .).また、サーバーはウィンドウの親と子の関係、ウィンドウのスタックの順序などを担当します。
Xプロトコルはスケーラブルに設計されています。 Xサーバーは新しいトリックを実行するように学習し、サーバーがこれらのトリックを実行するようにプロトコルに新しいオペコードを追加できます。たとえば、XRender拡張には透明度を処理する方法(「アルファブレンディング」)が導入されました。この拡張は主にアンチエイリアスフォントをサポートするために導入されましたが、ウィンドウの影などのデスクトップ効果にも使用されます。 RandR(「サイズ調整と回転」)拡張機能を使用すると、サイズ変更、ルートウィンドウの回転、および画面に反映できます。これにより、反転プロジェクターを使用して画面を投影したり、傾斜したモニターを使用したりできます。
これGLXExtension(OpenGL Extension to the X Window System)は、Xサーバーが提供するWindowsでOpenGLを使用できるようにします。 OpenGL への呼び出しは X プロトコル要求に含まれます。
X11 開発のある時点で、フォント処理はクライアント側で処理されるように移動されました。このような変化の理由は次のとおりです。Xウィンドウシステムの新たな発展。
直接レンダリング
2000年代初頭のディスプレイハードウェアは、1980年代のX開発が始まったときに存在していた単純な白黒ビットマップディスプレイで大きく発展しました。ローカルソケットを使用しても、プロセス間通信(IPC)モデルのX11相対オーバーヘッドが大きすぎます。解決策は、Xサーバーがハードウェアと直接通信する唯一の部分であるという原則を捨て、クライアントがグラフィックカードと直接通信できるようにすることです。これ直接レンダリングインフラ(DRI)が誕生しました。
DRIを使用すると、XクライアントアプリケーションはXサーバーをバイパスし、グラフィックアダプタから直接レンダリングできます。既存のXサーバーに加えて、複数の直接レンダリングアプリケーションを同時にアクティブにすることができるため、ハードウェアへのアクセスを調整するために、直接レンダリングマネージャと呼ばれるカーネルコンポーネントが導入されました。 DRIアーキテクチャには、元のDRI(旧式)、DRI2、およびDRI3の3つのバージョンがあります。
合成ウィンドウマネージャ
Linuxグラフィックス分野に参入するための次のイノベーションは、合成ウィンドウマネージャです。従来、各Xクライアントアプリケーションは、必要に応じてウィンドウ(ウィンドウの一部または全部)を再描画することを担当していました。ウィンドウが画面にマップされ、再描画する必要がある場合、またはウィンドウがもう別のウィンドウによって隠されていない場合、XサーバーはExposeイベントをアプリケーションに送信します。重なっているウィンドウを削除すると、その下のウィンドウが公開されます。領域を再描画できない場合、以前のコンテンツは引き続き表示されます。https://en.wikipedia.org/wiki/Visual_artifact
ㅏ合成ウィンドウマネージャこれを変えてください。アプリケーションは独自のオフスクリーンバッファにレンダリングされ、各バッファは別々の画面であり、所有するアプリケーションに排他的にアクセスできます。合成ウィンドウマネージャの使命は、これらのバッファを実際の画面のウィンドウに表示し、他のウィンドウによって隠された、または部分的に画面から離れたウィンドウを切り取ることです。ウィンドウマネージャはウィンドウの「グループ」を表示します。
コンポジションマネージャは、ウィンドウのサイズ変更、ねじり、フェージング、回転、ぼかしなどのアニメーション効果を表示することもできます。たとえば、ウィンドウを移動すると、ウィンドウが揺れたり回転したりするキューブの横に仮想デスクトップが表示されることがあります。
カーネルモード設定
さらに、Xサーバーは従来、解像度、リフレッシュレートなど、グラフィックアダプタのモード設定を担当しています。その後、モード設定はKMS(カーネルモード設定)と呼ばれるLinuxカーネルコンポーネントに移動されました。これはLinux間の移行時に多くの問題を解決します。仮想コンソール。
evdev
Xサーバーは入力デバイスについても知っています。たとえば、マウスの種類はX構成で指定する必要があります。 Xサーバーの導入により、これが軽減されました。evdev汎用入力イベントインタフェースを提供するLinuxカーネルのサブシステムです。
ウェイランド
これらの開発のすべてにより、Xサーバーで行われた多くのタスクがXサーバーの外部に移動しました。直接レンダリングを使用すると、クライアントはXプロトコルを使用しなくなります。 KMSのおかげで、Xサーバーはグラフィックアダプタの低レベルプログラミングを処理する必要はありません。 evdev を使用すると、X サーバーの入力デバイスの処理が簡素化されます。ウィンドウを再配置して歪めるために合成ウィンドウマネージャを使用すると、Xサーバーは画面上で何が起こっているのかわかりません。 「ウィンドウマネージャは新しいXサーバーです」
Waylandは、Xサーバープロセスが行うことはほとんどなく、中間者(Xサーバー)を削除することで、より単純なデスクトップグラフィックシステムを達成できることに気付いたので、誕生しました。以前のバージョンとの互換性は、以下を介して提供されます。エクスウェランド、Waylandサーフェスを使用してトップレベルのXウィンドウを表示する修正されたXorgサーバー。
厳密に言えば、Waylandはクライアントがディスプレイサーバーと通信する方法を定義するプロトコルです。 WaylandプロトコルはXプロトコルとは全く異なります。 Waylandプロトコルは、グラフィックやテキストを描画するためのメッセージを定義せず、フォントを処理しません。
Waylandアーキテクチャでは、ウィンドウマネージャとディスプレイサーバーは単一のソフトウェアコンポーネントである複合ウィンドウマネージャに結合されます。顧客はWaylandプロトコルを使用してソフトウェアライブラリを介してサーフェスを描画するように依頼することができます。 「ㅏ」サーフェスは、位置、サイズ、ピクセルコンテンツで定義される画面の長方形の領域を表すオブジェクトです。」。
クライアントはオフスクリーンバッファとしてレンダリングし、サーフェスに接続して画面に出力を生成します。クライアントは、OpenGL、OpenGL ESなど、さまざまなレンダリングAPIを使用できます。 (「図面APIとは何ですか?欲しいものは何でも") は二重バッファリングを使用します。つまり、ウィンドウが破れたり、点滅したり、光沢がありません。
Waylandの入力処理はシンセサイザを介して行われます。マウスカーソルがどのウィンドウにあるかを知る唯一のコンポーネント(コンポジタがウィンドウを歪める可能性があることに注意してください。)シンセサイザは、画面座標をそのウィンドウのウィンドウ - ローカル座標に変換し、イベントをクライアントに送信します。
Waylandの創作物語に興味があれば、Daniel Stoneの楽しいプレゼンテーションを見ることをお勧めします。ウェイランドとXの実物語。
答え3
* nixには、ラスターディスプレイとしてレンダリングされるメモリビットマップであるフレームバッファプリミティブがあります。ハードウェアの改善により、あるメーカーのKhronos API拡張であるEGLOutput / EGLDeviceと他のメーカーのGEMは妥協の結果であり、DISPLAYスタックの革新的なオープンソースソリューションの著作権依存性を偽装するためにXと作業するための直接レンダリングインフラストラクチャに広く結合されました。