KDEアプリケーションはGnomeでどのように実行されますか?


19

GnomeがGTK +を使用し、KDEがQtを使用する場合、どうしてKDEアプリケーションをGnomeの下で実行できますか?

回答:


30

GTKとQtはどちらも、グラフィカルインターフェイスを構築するためのツールキットです。各UIツールキットは、ウィジェット(ボタン、テキストボックスなど)を作成するプログラム用の独自の機能を提供し、グラフィカルプログラムがリンクするライブラリの形式で提供されます。GNOME用に作成されたプログラムはGTK(libgdkおよびlibgtk)を使用し、KDEプログラムはQt(libQtCoreおよびlibQtGui)を使用し、EnlightenmentプログラムはEFLなどを使用します。

ただし、これらのツールキットはすべて同じXウィンドウシステムと同じX11プロトコルを使用します。画面に表示するために、ツールキットは実行中のXサーバー(通常はXFree86と呼ばれる通常Xorg)に接続し、X11コマンドを送信(ウィンドウを作成、ウィンドウに何かを描画)、X11入力イベント(マウス、キーボード、ウィンドウサイズ変更、&​​c)戻る。

(GTK、Qt、またはEFLなどの最新のツールキットは、自分で空想的な描画を実行し、X11を使用してウィンドウ全体の完成した画像を送信します。Xサーバーは単に画面に表示します。lXawやMotifなどの古いツールキットは、 X11は、線、長方形、テキストなどのプリミティブを描画し、Xサーバーはすべてのレンダリングを実行します。)

Xサーバーは、すべてをまとめ、グラフィックカードと通信するなどの作業を行います。このように、最終的には同じOS機能を使用するだけなので、さまざまなツールキットのさまざまなバージョンを使用するプログラムを実行できます。

ポリシーではなくメカニズム

複数ツールキットの状況は、Xに固有のものではありません。たとえば、標準を使用するWindowsプログラムcomctl32だけでなく、WPF、.NET WinForms、ChromeのAura、FirefoxのXUL、さらには同じGTKまたはQtもあります。ほとんどのゲームは、独自のスタイル付きコントロールを使用します。本当に、これは上で可能である任意のあなたが全体のウィンドウ全体に画像を描画することができますグラフィックスシステム。

ただし、X原則の 1つは「ポリシーではなくメカニズム」でした。これは、Xサーバーがそのクライアント(グラフィカルプログラム)にさまざまなことを行うためのメカニズムを提供するだけで、必要なルールを課さないことを意味します。言い換えれば、Xはこれを他のどのグラフィックスシステムよりも大幅に強化しています。

たとえば、グラフィックシステムの不可欠な部分の1つは、ウィンドウ管理です。各ウィンドウの周囲にフレーム(別名装飾)を描画したり、ウィンドウを移動およびサイズ変更したりできます。WindowsとOS Xにはシステムに組み込まれたウィンドウマネージャーがありますが、Xでは別個のプログラムとして実行されtwmます。 gnome-shell; KDEにはKWinがあります)それぞれのデスクトップ環境との統合を提供します。

(ツールキットと同様に、現代の「合成」ウィンドウマネージャーは、実際にすべてのウィンドウを最終的な画面イメージに合成するXorgの仕事を引き継ぎ、シャドウやエフェクトなどを追加できるようにします。)

最新のデスクトップ環境では、これも実際に問題を引き起こしています。最も一般的な例を使用するには、同じ「グラブキーボード」機能がホットキーで使用されます。ポップアップメニュー。スクリーンセーバーを使用します。一度に使用できるプログラムは1つだけです。つまり、ポップアップメニューが開いている間は画面をロックしたり、画面がロックされている間は曲をスキップしたりできません。これは、WaylandがX11の代替として作成されているいくつかの理由の1つです。

サイドノート

技術的には、これは別のコンピューターでXプログラムを実行し、ネットワーク上のマシンのXサーバーと通信できることを意味します。確かに、これは初期の主な使用例であり、そもそも「X サーバー」という名前の由来です。MacでXサーバーを実行し、Linux、FreeBSD、OpenVMSなどで実行されるプログラムによって作成されたウィンドウを表示することができます。

ただし、上記のように、最新のツールキットはすべてのクライアント側の描画を実行し(X11プリミティブでは派手なグラフィックスときれいなフォントを作成するのは非常に困難です)、最終的な画像をXサーバーにプッシュするだけです。ネットワーク帯域幅のかなりのビット。

(RFB(別名VNC)やMicrosoftの「リモートデスクトップ」など、他のプロトコルはこのために設計されており、ウィンドウイメージを圧縮する非常に効率的な方法があります。)


1
QtのイベントループはGTKをラップするため、同じアプリケーションでQtとGTKのコードを組み合わせることができます(通常、これはプラグインのようなものです)。
アレックスP 14年

@Alex:QtのイベントループがイベントをGTKに配信できるという意味で「ラップ」できますか、それともQtが実際にイベントループをGLibに依存していると言っていましたか?
grawity

1
Qtは独自の純粋なイベントループ実装も使用できますが、デフォルトではGlibを​​ラップします(少なくとも、Qt4では-Qt5がどのように実行するかについては見ていません)。実行時にそれを制御する隠しフラグ($ QT_NO_GLIB)があります。
アレックスP

7

答えの一部は、主要なデスクトップ環境(Gnome、KDE、XFCE、おそらくその他)がhttp://freedesktop.orgの下で連携してこのような相互運用を可能にしていることです。FD.oが公開している仕様の1つにEWMHがあります。これは、ウィンドウマネージャー間の一定レベルの互換性を保証します(基本的なウィンドウ管理だけでなく、最新の機能用)。


4

GNOMEで実行すると、KDEアプリケーションは依存する共有Qtライブラリを呼び出します。他のデスクトップ環境でアプリケーションを実行している場合も同様です。呼び出すことができるものとできないものに制限はありません。

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