1. ホーム
  2. c++

[解決済み】LinuxのネイティブGUI APIは何ですか?

2022-03-23 14:42:51

質問

Windows (Win32 API) と OS X (Cocoa) は、ウィンドウ、イベント、その他の OS 関連の処理を行う独自の API を持っています。Linuxのそれに相当するものが何なのか、明確な答えが返ってきたことがないのですが?

GTK+という声も聞きますが、GTK+はクロスプラットフォームです。ネイティブであるわけがない。

どのように解決するのですか?

Linuxでは、グラフィカル・ユーザー・インターフェースは、オペレーティング・システムの一部ではありません。ほとんどのLinuxデスクトップで見られるグラフィカル・ユーザ・インターフェイスは Xウィンドウ・システム これは、スクリーン、キーボード、ポインターを扱うデバイスに依存しない方法を定義しています。

X Windowは通信のためのネットワークプロトコルを定義しており、このプロトコルを話す方法を知っているプログラムであれば、誰でも使うことができます。という C ライブラリがあります。 Xlib は、このプロトコルの使用を容易にするもので、Xlib は一種の その ネイティブGUI APIです。Xlib は X Window サーバにアクセスする唯一の方法というわけではありません。 XCB .

などのツールキット・ライブラリは GTK+ (で使用 GNOME ) と Qt (で使用される KDE Xlibの上に構築されたXlibは、プログラミングが容易であるため、使用されています。例えば、アプリケーション間で一貫したルック&フィールを実現し、ドラッグ&ドロップを使いやすくし、モダンなデスクトップ環境に標準的なコンポーネントを提供する、などです。

Xが内部でどのように画面に描画するかは、実装に依存します。 X.org には、デバイスに依存しない部分と、デバイスに依存する部分があります。前者はウィンドウなどの画面資源を管理し、後者はグラフィックカードのドライバ(通常はカーネルモジュール)と通信を行います。通信は ダイレクトメモリアクセス または システムコール をカーネルに送信します。ドライバは、コマンドをカード上のハードウェアが理解できる形に変換します。

2013年現在では、新しいウィンドウシステムである ウェイランド が使えるようになりつつあり、多くのディストリビューションがいつかは移行するとしていますが、まだ明確なスケジュールはありません。このシステムはOpenGL/ES APIをベースにしており、将来的にはLinuxではOpenGLが"native GUI API"となることを意味します。現在、GTK+とQTをWaylandに移植する作業が行われており、現在普及しているアプリケーションやデスクトップシステムには最小限の変更で済むようになっています。移植できないアプリケーションは、OS XがXquartzを通じてX11アプリケーションをサポートするように、X11サーバを通じてサポートされる予定です。GTK+の移植は 1年以内に完成予定 一方、Qt 5はすでにWaylandを完全にサポートしています。

さらに問題を複雑にしているのは、Ubuntuが新しいシステムとして ミール というのも、Waylandに問題があることがわかったからです。このウィンドウシステムもOpenGL/ES APIをベースにしています。