Wat is Linux’s Native GUI API?

Beide Windows (Win32 API) en OS X (Cocoa) hebben hun eigen API’s om Windows, evenementen en andere OS-dingen te hanteren. Ik heb nooit echt een duidelijk antwoord gekregen over welk Linux-equivalent is?

Ik heb gehoord dat sommige mensen GTK + zeggen, maar GTK + cross-platform zijn. Hoe kan het native zijn?


Antwoord 1, Autoriteit 100%

In Linux is de grafische gebruikersinterface geen onderdeel van het besturingssysteem. De grafische gebruikersinterface die op de meeste Linux-desktops wordt gevonden, wordt verstrekt door software die de x venstersysteem , dat definieert, die definieert een apparaat onafhankelijke manier om te handelen met schermen, toetsenborden en aanwijzerapparaten.

X-venster definieert een netwerkprotocol voor communicatie en elk programma dat weet hoe “spreken” Dit protocol kan gebruiken. Er is een C-Bibliotheek genaamd XLIB die het gemakkelijker maakt om dit protocol te gebruiken, dus XLIB is zo De native GUI API. XLIB is niet de enige manier om toegang te krijgen tot een X-venster-server; Er is ook xcb .

Toolkit-bibliotheken zoals gtk + (gebruikt door GNOME ) en qt (gebruikt door KDE ), gebouwd bovenop XLIB, worden gebruikt omdat ze gemakkelijker te programmeren zijn. Ze geven je bijvoorbeeld een consistente uitstraling en feel over applicaties, maakt het gemakkelijker om Drag-and-druppel te gebruiken, componenten standaard te leveren aan een moderne desktop-omgeving, enzovoort.

Hoe X-trekkingen op het scherm intern is afhankelijk van de implementatie. x.org heeft een apparaat onafhankelijk deel en een apparaatafhankelijke deel. De voormalige beheert schermbronnen, zoals Windows, terwijl de laatste communiceert met de grafische kaartstuurprogramma, meestal een kernelmodule. De communicatie kan gebeuren via Directe geheugentoegang of via systeemgesprekken naar de kernel. De bestuurder vertaalt de opdrachten in een formulier dat de hardware op de kaart begrijpt.

Vanaf 2013, een nieuw venstersysteem genaamd Wayland begint bruikbaar te worden en veel distributies hebben gezegd Ze zullen op een gegeven moment migreren, hoewel er nog steeds geen duidelijk schema is. Dit systeem is gebaseerd op OpenGL / ES API, wat betekent dat OpenGL in de toekomst de “Native GUI API” in Linux zal zijn. Er wordt werk gedaan naar Port Gtk + en Qt naar Wayland, zodat de huidige populaire toepassingen en desktopsystemen minimale veranderingen nodig zouden hebben. De toepassingen die niet kunnen worden geporteerd, worden ondersteund door een X11-server, net als OS X ondersteunt X11-apps via Xquartz. De GTK + -poort is verwacht binnen een jaar te worden afgewerkt , terwijl QT 5 al een volledige ondersteuning voor Wayland heeft.

Om de zaken te compliceren, heeft Ubuntu aangekondigd aangekondigd dat ze een nieuw systeem ontwikkelen dat wordt genoemd mir vanwege problemen ze waarnemen met Wayland. Dit venster systeem is ook gebaseerd op de OpenGL / ES API.


Antwoord 2, Autoriteit 14%

Linux is een kernel, niet een volledige besturingssysteem. Er zijn verschillende windowing systemen en gui’s die worden uitgevoerd op de top van Linux window-aan te bieden. Typisch X11 het venstersysteem gebruikt Linux distributies.


Antwoord 3, Autoriteit 10%

Wayland is ook het vermelden waard omdat het meestal wordt aangeduid als een “future X11 killer”.

Merk ook op dat Android en andere mobiele besturingssystemen omvatten niet X11 hoewel ze een Linux kernel, dus in die zin X11 is niet afkomstig uit alle Linux-systemen.

Cross-platform zijn heeft niets te maken met native zijn. Cocoa is ook overgezet naar andere platforms via GNUStepmaar het is nog steeds native voor OS X / macOS.


Antwoord 4, autoriteit 4%

Strikt genomen bestaat de API van Linux uit zijn systeemaanroepen. Dit zijn alle kernelfuncties die kunnen worden aangeroepen door een gebruikersmodus (niet-kernel) programma. Dit is een interface op zeer laag niveau waarmee programma’s dingen kunnen doen zoals het openen en lezen van bestanden. Zie http://en.wikipedia.org/wiki/System_callvoor een algemene inleiding.

Op een echt Linux-systeem zal ook een hele “stapel” andere software draaien om een ​​grafische gebruikersinterface en andere functies te bieden. Elk element van deze stapel biedt zijn eigen API.


Antwoord 5, autoriteit 3%

Om te helpen bij wat al is genoemd is er een zeer goed overzicht van de Linux graphics stack op deze blog: http://blog.mecheye.net/2012/06/the-linux-graphics-stack/

Dit verklaart X11/Wayland etc en hoe het allemaal in elkaar past. Naast wat al is genoemd, denk ik dat het de moeite waard is iets toe te voegen over de volgende API’s die je kunt gebruiken voor afbeeldingen in Linux:

Mesa– “Mesa is veel dingen, maar een van de belangrijkste dingen het zorgt ervoor dat het het meest bekend staat om zijn OpenGL-implementatie. Het is een open-source implementatie van de OpenGL API.”

Cairo– “cairo is een tekenbibliotheek die wordt gebruikt door applicaties zoals Firefox rechtstreeks, of via bibliotheken zoals GTK+, om vectorvormen te tekenen.”

DRM (Direct Rendering Manager)– Ik begrijp dit het minst, maar het zijn eigenlijk de kerneldrivers waarmee je afbeeldingen rechtstreeks naar framebuffer kunt schrijven zonder door X te gaan


Antwoord 6, autoriteit 2%

Ik veronderstel dat de vraag meer lijkt op “Wat is de native GUI API van Linux”.

In de meeste gevallen zal X (ook bekend als X11) daarvoor worden gebruikt: http://en.wikipedia. org/wiki/X_Window_System.

Je kunt de API-documentatie hier

vinden


Antwoord 7

XWindows komt waarschijnlijk het dichtst in de buurt van wat ‘native’ genoemd zou kunnen worden 🙂


Antwoord 8

Het dichtst bij Win32 in linux zou de libc zijn, aangezien je niet alleen de gebruikersinterface noemt, maar ook gebeurtenissen en “andere os-dingen”


Antwoord 9

De grafische bewerkingen van de linux-kernel staan ​​in /include/linux/fb.h als struct fb_ops. Uiteindelijk is dit waar add-ons zoals X11, Wayland of DRM naar lijken te verwijzen. Aangezien deze bewerkingen alleen voor videokaarten zijn en niet voor vector- of rasterhardcopy of tty-georiënteerde eindapparaten, is hun bruikbaarheid als GUI beperkt; het is gewoon niet helemaal waar dat je die add-ons nodig hebt om grafische uitvoer te krijgen als je het niet erg vindt om een ​​assembler te gebruiken om syscall te omzeilen als dat nodig is.


Antwoord 10

GUI is een abstractie van mogelijkheden op hoog niveau, dus bijna alles, van XOrg-server tot OpenGL, wordt platformonafhankelijk geporteerd, ook voor Windows-platform. Maar als je met GUI API *nix grafische API bedoelt, dan zou je kunnen ronddwalen in “Direct Rendering Infrastructure”.


Antwoord 11

Wayland

Zoals je misschien hoort, is waylandde aanbevolen keuze van veel distro’s tegenwoordig is het protocol eenvoudiger dan de X.

Toolkits van Wayland

Toolkits of gui-bibliotheken die Wayland suggereertzijn:

  • QT 5
  • GTK+
  • LSD
  • Rommel
  • EFL

Other episodes