web-dev-qa-db-ja.com

LinuxのネイティブGUI APIとは何ですか?

これがばかげた質問として出てこないことを願っていますが、それはいつも私が疑問に思っていたことです。 Windows(Win32 API)とOS X(Cocoa)の両方に、ウィンドウ、イベント、およびその他のOS関連のものを処理するための独自のAPIがあります。私は、Linuxと同等のものについて明確な答えを得たことは一度もありません。

私は何人かの人々がGTK +と言うのを聞いたことがありますが、GTK +はクロスプラットフォームなので、どうすればネイティブにできますか?

422
DavidColson

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

X Windowは通信用のネットワークプロトコルを定義しており、このプロトコルを「話す」方法を知っているプログラムならどれでも使用できます。このプロトコルを使いやすくする Xlib というCライブラリがあるので、Xlibは一種のtheネイティブGUI APIです。 XlibはX Windowサーバーにアクセスする唯一の方法ではありません。 XCB もあります。

GTK +GNOME で使用)や QtKDEで使用)などのツールキットライブラリXLIBの上に構築された )は、プログラミングが簡単なので使用されます。たとえば、アプリケーション間で一貫したルックアンドフィールを提供したり、ドラッグアンドドロップを簡単に使用したり、最新のデスクトップ環境に標準的なコンポーネントを提供したりすることなどができます。

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

2013年現在、 Wayland と呼ばれる新しいウィンドウシステムが使用可能になり始めており、まだ明確なスケジュールはありませんが、多くのディストリビューションではいつか移行する予定です。このシステムはOpenGL/ES APIをベースにしているため、将来的にはOpenGLがLinuxの「ネイティブGUI API」になります。 GTK +とQTをWaylandに移植する作業が行われているので、現在普及しているアプリケーションとデスクトップシステムは最小限の変更で済みます。 OS XがXquartzを介してX11アプリケーションをサポートするように、移植できないアプリケーションはX11サーバーを介してサポートされます。 GTK +の移植版は 年以内に完成する予定です 、Qt 5はすでにWaylandを完全にサポートしています。

さらに問題を複雑にするために、UbuntuはWaylandで問題を認識しているため、 Mir という新しいシステムを開発していると発表しました。このウィンドウシステムもOpenGL/ES APIに基づいています。

581
Joni

Linuxはカーネルであり、完全なオペレーティングシステムではありません。ウィンドウを提供するためにLinux上で動作するさまざまなウィンドウシステムとGUIがあります。通常 X11 はLinuxディストリビューションで使用されるウィンドウシステムです。

83
Chris Thompson

Wayland も「将来のX11キラー」と呼ばれているので、言及する価値があります。

また、Androidや他のモバイルオペレーティングシステムはLinuxカーネルを持っていますがX11を含まないので、その意味でX11はすべてのLinuxシステムにネイティブではありません。

クロスプラットフォームであることは、ネイティブであることとは関係ありません。 Cocoaは GNUStep によって他のプラットフォームにも移植されていますが、それでもOS X/macOSにネイティブです。

57
none

厳密に言えば、LinuxのAPIはそのシステムコールで構成されています。これらは、ユーザーモード(非カーネル)プログラムから呼び出すことができるすべてのカーネル関数です。これは、プログラムがファイルを開いたり読んだりすることを可能にする非常に低レベルのインタフェースです。一般的な紹介は http://en.wikipedia.org/wiki/System_call をご覧ください。

実際のLinuxシステムでは、グラフィカルユーザーインターフェースやその他の機能を提供するために、他のソフトウェアの「スタック」全体が実行されています。このスタックの各要素は独自のAPIを提供します。

22
nibot

すでに述べたことを手助けするために、このブログでLinuxグラフィックスタックの非常に良い概説があります: http://blog.mecheye.net/2012/06/the-linux- graphics-stack /

これはX11/Waylandなどとそれがどのように一緒に収まるかを説明します。すでに述べたことに加えて、Linuxのグラフィックに使用できる次のAPIについて少し追加する価値があると思います。

Mesa - "Mesaは多くのものですが、最も有名なのはそのOpenGLの実装です。それはopen-の実装です。 OpenGL APIのソース実装」

Cairo - "cairoは、Firefoxなどのアプリケーションで直接使用されるか、GTK +などのライブラリを介してベクトル図形を描画するための描画ライブラリです。"

DRM(Direct Rendering Manager) - これはほとんど理解できませんが、基本的にはXを経由せずにグラフィックを直接フレームバッファに書き込むことができるカーネルドライバです。

19
Matt

私はその質問が「LinuxのネイティブGUI APIとは何か」のようなものだと思います。

ほとんどの場合、X(別名X11)がそのために使用されます。 http://en.wikipedia.org/wiki/X_Window_System

APIドキュメント はこちら にあります。

9
Mark

XWindowsはおそらく「ネイティブ」と呼ばれるものに最も近いものです:)

5
Sergey Sirotkin

あなたがUIだけでなくイベントや "その他のOSのもの"を言及したように、LinuxでWin32に最も近いものはlibcでしょう

1
Midhat

GUIは高レベルの機能の抽象化であるため、XOrgサーバーからOpenGLまでのほとんどすべてが、Windowsプラットフォームを含むクロスプラットフォームに移植されています。しかし、GUI APIとは、* nixグラフィックスAPIを意味するのであれば、 "Direct Rendering Infrastructure"をさまようかもしれません。

0
Chawathe Vipul

ウェイランド

ご存知かもしれませんが、最近では、waylandが、多くのディストリビューションで採用されています。 Xよりも単純です。

ウェイランドのツールキット

ウェイランド が示唆している ツールキットまたはGUIライブラリは次のとおりです。

  • QT 5
  • GTK +
  • LSD
  • クラッタ
  • EFL
0
Amir Forsati

Linuxカーネルのグラフィカル操作は/include/linux/fb.hにstruct fb_opsとしてあります。結局これはX11、Wayland、またはDRMのようなアドオンが参照するように見えるものです。これらの操作はビデオカードのみを対象としているため、ベクターやラスターのハードコピーやtty指向の端末機器ではないため、GUIとしての有用性は限られています。必要に応じてアセンブラを使用してsyscallをバイパスしてもかまわないのであれば、グラフィカルな出力を得るためにこれらのアドオンが必要になることはまったく本当ではありません。

0
M. Ziegast