¿Cuál es la API GUI nativa de Linux?


Espero que esto no se vea como una pregunta estúpida, pero siempre es algo que me he preguntado. Tanto Windows (API Win32) como OS X (Cocoa) tienen sus propias API para manejar windows, eventos y otras cosas del sistema operativo. Nunca he conseguido realmente una respuesta clara en cuanto a cuál es el equivalente de Linux.

He escuchado a algunas personas decir GTK+, pero GTK+ siendo multiplataforma, ¿cómo puede ser nativo?

Author: BoltClock, 2012-10-04

11 answers

En Linux la interfaz gráfica de usuario no forma parte del sistema operativo. La interfaz gráfica de usuario que se encuentra en la mayoría de los escritorios Linux es proporcionada por un software llamado X Window System , que define una forma independiente del dispositivo de tratar con pantallas, teclados y dispositivos de puntero.

X Window define un protocolo de red para la comunicación, y cualquier programa que sepa "hablar" este protocolo puede usarlo. Hay una biblioteca de C llamada Xlib que lo hace más fácil para usar este protocolo, Xlib es una especie de la API gráfica nativa. Xlib no es la única forma de acceder a un servidor X Window; también existe XCB.

Bibliotecas de herramientas como GTK+ (utilizado por GNOME) y Qt (utilizado por KDE), construido sobre Xlib, se utilizan porque son más fáciles de programar. Por ejemplo, le dan una apariencia uniforme en todas las aplicaciones, facilitan el uso de arrastrar y soltar, proporcionan componentes estándar a un entorno de escritorio moderno, y así sucesivamente.

Cómo X dibuja internamente en la pantalla depende de la implementación. X.org tiene una parte independiente del dispositivo y una parte dependiente del dispositivo. El primero administra recursos de pantalla como windows, mientras que el segundo se comunica con el controlador de la tarjeta gráfica, generalmente un módulo del núcleo. La comunicación puede ocurrir a través de acceso directo a la memoriao a través de llamadas al sistema al núcleo. El controlador traduce los comandos en una forma que el hardware de la tarjeta entiende.

A partir de 2013, un nuevo sistema de ventanas llamado Wayland está empezando a ser utilizable, y muchas distribuciones han dicho que en algún momento migrarán a él, aunque todavía no hay un calendario claro. Este sistema está basado en la API OpenGL/ES, lo que significa que en el futuro OpenGL será la "API GUI nativa" en Linux. Se está trabajando para portar GTK + y QT a Wayland, para que las aplicaciones populares actuales y los sistemas de escritorio necesiten un mínimo cambio. Las aplicaciones que no se pueden portar serán compatibles a través de un servidor X11, al igual que OS X admite aplicaciones X11 a través de Xquartz. Se espera que el puerto GTK+ esté terminado dentro de un año, mientras que Qt 5 ya tiene soporte completo de Wayland.

Para complicar aún más las cosas, Ubuntu ha anunciado que están desarrollando un nuevo sistema llamado Mir debido a los problemas que perciben con Wayland. Este sistema de ventanas también se basa en la API de OpenGL/ES.

 559
Author: Joni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-14 14:40:10

Linux es un núcleo, no un sistema operativo completo. Hay diferentes sistemas de ventanas y gui que se ejecutan en la parte superior de Linux para proporcionar ventanas. Normalmente X11 es el sistema de ventanas utilizado por las distribuciones de Linux.

 79
Author: Chris Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 21:26:28

Wayland también vale la pena mencionar, ya que se refiere principalmente como un "futuro X11 killer".

También tenga en cuenta que Android y algunos otros sistemas operativos móviles no incluyen X11 aunque tienen un núcleo Linux, por lo que en ese sentido X11 no es nativo de todos los sistemas Linux.

Ser multiplataforma no tiene nada que ver con ser nativo. Cocoa también ha sido portado a otras plataformas a través de GNUstep pero todavía es nativo de OS X / macOS.

 57
Author: none,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-26 23:13:55

Estrictamente hablando, la API de Linux consiste en sus llamadas al sistema . Estas son todas las funciones del kernel que pueden ser llamadas por un programa en modo usuario (no kernel). Esta es una interfaz de muy bajo nivel que permite a los programas hacer cosas como abrir y leer archivos. Véase http://en.wikipedia.org/wiki/System_call para una introducción general.

Un sistema Linux real también tendrá una "pila" completa de otro software que se ejecuta en él, con el fin de proporcionar un usuario gráfico interfaz y otras características. Cada elemento de esta pila ofrecerá su propia API.

 22
Author: nibot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 21:37:37

Para ayudar en lo que ya se ha mencionado, hay una muy buena descripción de la pila de gráficos de Linux en este blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack /

Esto explica X11 / Wayland etc y cómo todo encaja. Además de lo que ya se ha mencionado, creo que vale la pena agregar un poco sobre las siguientes API que puede usar para gráficos en Linux:

Mesa - " Mesa es muchas cosas, pero una de las cosas principales que proporciona es que es más famoso por su implementación de OpenGL. Es una implementación de código abierto de la API de OpenGL."

Cairo - "cairo es una biblioteca de dibujo utilizado ya sea por aplicaciones como Firefox directamente, o a través de bibliotecas como GTK+, para dibujar formas vectoriales."

DRM (Direct Rendering Manager) - Entiendo esto lo menos, pero es básicamente los controladores del núcleo que le permiten escribir gráficos directamente a framebuffer sin pasar por X

 18
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-04 03:40:47

Supongo que la pregunta es más como "Cuál es la API GUI nativa de linux".

En la mayoría de los casos X (también conocido como X11) se utilizará para eso: http://en.wikipedia.org/wiki/X_Window_System .

Puede encontrar la documentación de la API aquí

 9
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-04 09:23:03

XWindows es probablemente el más cercano a lo que podría llamarse 'nativo':)

 5
Author: Sergey Sirotkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-03 21:26:48

Lo más cercano a Win32 en linux sería el libc, ya que mencionas no solo la interfaz de usuario sino los eventos y "otras cosas del sistema operativo"

 1
Author: Midhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-04 00:54:31

La GUI es una abstracción de alto nivel de capacidad, por lo que casi todo, desde el servidor XOrg hasta OpenGL, está portado multiplataforma, incluida la plataforma Windows. Pero si por API GUI te refieres a * nix graphics API, entonces podrías estar vagando por "Infraestructura de renderizado directo".

 0
Author: Chawathe Vipul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-29 09:37:39

Las operaciones gráficas del núcleo linux están en /include/linux/fb.h como estructura fb_ops. Eventualmente esto es lo que los complementos como X11, Wayland o DRM parecen hacer referencia. Como estas operaciones son solo para tarjetas de video, no vectoriales o rasterizados o dispositivos terminales orientados a tty, su utilidad como GUI es limitada; simplemente no es del todo cierto que necesite esos complementos para obtener una salida gráfica si no le importa usar algún ensamblador para omitir syscall según sea necesario.

 0
Author: M. Ziegast,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-27 01:49:06

Wayland

Como se puede oír, wayland es la opción destacada de muchas distribuciones en estos días, debido a su protocolo es más simple que el X.

Conjuntos de herramientas de wayland

Los conjuntos de herramientas o bibliotecas gui que wayland sugiere son:

  • QT 5
  • GTK +
  • LSD
  • Desorden
  • EFL
 0
Author: Amir Forsati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-04 07:39:38