library gui creator c++ c linux api user-interface

c++ - gui - qt5



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

Wayland

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

Kits de herramientas de Wayland

Los kits de herramientas o bibliotecas de gui que Wayland suggests son:

  • QT 5
  • GTK +
  • LSD
  • Desorden
  • EFL

Espero que esto no sea una pregunta estúpida, pero siempre es algo que me he preguntado. Tanto Windows (Win32 API) como OS X (Cocoa) tienen sus propias API para manejar ventanas, eventos y otras cosas del sistema operativo. Realmente nunca tengo una respuesta clara sobre cuál es el equivalente de Linux.

He oído a algunas personas decir GTK +, pero GTK + es multiplataforma, ¿cómo puede ser nativo?


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 las computadoras de escritorio de 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 cómo "hablar" puede usarlo. Hay una biblioteca de C llamada Xlib que facilita el uso de este protocolo, por lo que Xlib es una especie de API GUI nativa. Xlib no es la única forma de acceder a un servidor X Window; También hay XCB .

Las bibliotecas del kit de herramientas, como GTK+ (utilizadas por GNOME ) y Qt (utilizadas por KDE ), creadas sobre Xlib, se utilizan porque son más fáciles de programar. Por ejemplo, le brindan una apariencia coherente en todas las aplicaciones, facilitan el uso de arrastrar y soltar, proporcionan componentes estándar para un entorno de escritorio moderno, etc.

Cómo dibuja X en la pantalla internamente depende de la implementación. X.org tiene una parte independiente del dispositivo y una parte dependiente del dispositivo. El primero administra los recursos de la 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 realizarse a través del acceso directo a la memoria o mediante llamadas del sistema al kernel. El controlador traduce los comandos a una forma que el hardware en 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 se basa en OpenGL / ES API, lo que significa que en el futuro OpenGL será la "API de GUI nativa" en Linux. Se está trabajando para trasladar GTK + y QT a Wayland, de modo que las aplicaciones populares actuales y los sistemas de escritorio necesiten cambios mínimos. Las aplicaciones que no pueden ser portadas 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.


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. Vea 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 una interfaz gráfica de usuario y otras características. Cada elemento de esta pila ofrecerá su propia API.


La GUI es una capacidad de abstracción de alto nivel, por lo que casi todo, desde el servidor XOrg hasta OpenGL, se transporta multiplataforma, incluso para la plataforma Windows. Pero si por API GUI te refieres a * nix API gráfica, entonces podrías estar vagando por la "Infraestructura de representación directa".


Las operaciones gráficas del núcleo de Linux están en /include/linux/fb.h como struct fb_ops. Eventualmente, esto es lo que parecen complementos como X11, Wayland o DRM. Debido a que estas operaciones son solo para tarjetas de video, no para impresoras de trama o vectoriales o dispositivos terminales orientados a tty, su utilidad como GUI es limitada; simplemente no es del todo cierto, necesita esos complementos para obtener resultados gráficos si no le importa usar algún ensamblador para omitir syscall según sea necesario.


Linux es un kernel, no un sistema operativo completo. Existen diferentes sistemas de ventanas y gui que se ejecutan sobre Linux para proporcionar ventanas. Normalmente, X11 es el sistema de ventanas utilizado por las distribuciones de Linux.


Lo más parecido a Win32 en Linux sería la libc, ya que mencionas no solo la interfaz de usuario, sino también los eventos y "otras cosas del sistema operativo".


Para ayudar en lo que ya se ha mencionado, hay una muy buena visión general 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 encaja todo. 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 principales cosas por las que es famoso por su implementación de OpenGL. Es una implementación de código abierto de la API de OpenGL".

Cairo - "el cairo es una biblioteca de dibujos utilizada por aplicaciones como Firefox directamente, o por medio de bibliotecas como GTK +, para dibujar formas vectoriales".

DRM (Direct Rendering Manager) : entiendo esto menos, pero son básicamente los controladores del kernel que le permiten escribir gráficos directamente en el framebuffer sin pasar por X


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

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

Puedes encontrar la documentación de la API here


También vale la pena mencionar a Wayland ya que en su mayoría se lo denomina "futuro asesino de X11".

También tenga en cuenta que Android y algunos otros sistemas operativos móviles no incluyen X11, aunque tienen un kernel de 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 se ha portado a otras plataformas a través de GNUStep pero aún es nativo a OS X / macOS.


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