{"id":117,"date":"2009-03-30T23:12:14","date_gmt":"2009-03-30T22:12:14","guid":{"rendered":"http:\/\/www.instruyete.org\/?p=117"},"modified":"2009-03-30T23:12:14","modified_gmt":"2009-03-30T22:12:14","slug":"das-x-windows-universum-auf-linux","status":"publish","type":"post","link":"https:\/\/www.instruyete.org\/?p=117","title":{"rendered":"Das X-Windows Universum auf Linux"},"content":{"rendered":"<p>Wenn alle Tage neue Features eingef\u00fchrt werden, Buzzwords inflation\u00e4r auftauchen, alte Gewohnheiten nicht mehr gelten\u00a0 und dadurch Probleme bei der t\u00e4glichen Arbeit entstehen wird es mal wieder Zeit sich einen \u00dcberblick \u00fcber den Stand der Technik zu verschaffen.<\/p>\n<p>Wie jeder weiss ist Linux nur der Betriebssystemkern. Alle graphischen Anwendungen, sei es das komplette Desktopsytem wie KDE oder Gnome, als auch einzelne Anwendungen, wie Grafikprogramme oder Spiele ben\u00f6tigen ein X-Window System.<\/p>\n<p><strong>X.Org<\/strong> ist unter Linux die <em>Referenzimplementierung<\/em> dieses Systems und liegt derzeit in der Version <strong>7.4<\/strong> vor. Die <em>X.Org Foundation<\/em> sah sich urspr\u00fcnglich nur f\u00fcr X-Standards verantwortlich, w\u00e4hrend <strong>XFree86<\/strong> das Projekt war, dass die eigentliche Implementierung mit dem <strong>xserver<\/strong> als Kernbestandteil, zur Verf\u00fcgung stellte.<br \/>\nDie Entwicklung im XFree86 Projekt war allerdings recht tr\u00e4ge und f\u00fchrte dazu, dass der Innovationsabstand zwischen X-Windows auf UNIX Systemen gegen\u00fcber MS Windows und Mac OS X immer gr\u00f6sser wurde. Als im Jahr 2003 dann Streitigkeiten \u00fcber eine neue Lizenz aufkeimten, zogen viele Entwickler die Notbremse und gr\u00fcndeten die neue X.Org-Stiftung die nun ebenfalls eine X-Window Implementation herausbrachte.<br \/>\nInnerhalb k\u00fcrzester Zeit erschien <strong>X.Org 6.8<\/strong> auf Basis von XFree86 4.4, welches dann nacheinander von allen Distributionen als Standard X-Windows System installiert wurde.<\/p>\n<p>Erstes Ziel war die <em>Modularisierung<\/em> um die Grafiktreiberprogrammierung zu erleichtern und eine ausbauf\u00e4hige Grundlage f\u00fcr zuk\u00fcnftige Modernisierungen zu schaffen. Dieses Ziel wurde mit <strong>X.Org 7.0<\/strong> erreicht.<\/p>\n<p>Mit dem Aufkommen der <em>Composite Window Manager<\/em> einerseits und dem Eintreten von <strong>Intel<\/strong> als GPU Hersteller andererseits kam eine f\u00fcr dieses Projekt ungekannte Dynamik ins Spiel. Daf\u00fcr sind jetzt eine Reihe von Begriffskl\u00e4rungen notwendig:<\/p>\n<h4>xserver<\/h4>\n<p>W\u00e4hrend X.Org die Agglomeration aller am X-Windows System beteiligten Komponenten ist, also inkludierte Grafiktreiber, Keyboard Treiber, X-Video Erweiterung, stellt der xserver die zentrale Komponente des Systems dar.<br \/>\nMit erscheinen von X.Org 7.4 wurde xserver in Version 1.5.2 mitgeliefert. Im Februar 2009 erschien dann aber xserver 1.6.0 ohne ein gleichzeitiges Minor Update von X.Org. Der neue xserver integriert sich stattdessen in X.Org 7.4 und stellt neue Features, allen voran <strong>DRI2<\/strong> bereit.<\/p>\n<h4>Direct Rendering Interface (DRI)<\/h4>\n<p>Komponenten, die es Applikationen erlauben, innerhalb des X-Window Systems, die Video Hardware <em>direkt<\/em>, unter Umgehung des xservers, anzusprechen.<\/p>\n<p>Die Beteiligten Komponenten sind:<br \/>\n&#8211; <em>Kerneltreiber<\/em> (<strong>Direct Rendering Manager<\/strong>, <strong>DRM) <\/strong>der eine Schnittstelle zur Grafikkarte bereitstellt<br \/>\n&#8211; <em>Userland Treiber<\/em> innerhalb des <strong>MESA<\/strong> Projektes.<\/p>\n<p>Seit 2000 (XFree86 4.0) war <strong>DRI1<\/strong> die Major Revision, welches OpenGL Applikationen veranlasst direkt auf den Framebuffer zu zeichnen. Mit Erscheinen des xservers 1.6 wurde <strong>DRI2<\/strong> released. Dies erlaubt jetzt die Umleitung auf ein <em>Offscreen Memory<\/em>, so dass der Compositing Manager verschiedene Str\u00f6me zusammen verarbeiten kann. DRI2 erfordert aber ein neues Grafik-Speichermanagement, names <strong>GEM.<\/strong><\/p>\n<p>Derzeit unterst\u00fctzen alle Open-Source Treiber sowie der propriet\u00e4re AMD\/ATI Grafiktreiber DRI1. Intel unterst\u00fctzt seit der Intel Grafiktreiberversion 2.6 auch DRI2, ben\u00f6tigt aber damit GEM und implizit damit mindestens Kernel 2.6.28.<\/p>\n<p>Der propriet\u00e4re <strong>nVIDIA<\/strong> Grafiktreiber hat ein v\u00f6llig eigenst\u00e4ndiges Direct Rendering Konzept welches im Kerneltreibermodule realisiert wird.<\/p>\n<h4>MESA<\/h4>\n<p>Mesa ist eine Open Source 3D Grafikbibliothek welche eine generische OpenGL Implementation zur Verf\u00fcgung stellt.<\/p>\n<p>Eine OpenGL Anwendung linkt dabei gegen <strong>\/usr\/lib\/libGL.so.X<\/strong><\/p>\n<p>Mesa sorgt daf\u00fcr, dass diese Datei ein softlink zur MESA (OpenGL) Bibliothek darstellt. Weiterhin st\u00fctzt sich diese Bibliothek entweder auf eine passende DRI Bibliothek der Grafikkarte &#8211; und damit <em>direktes (hardwareunterst\u00fctztes) Rendering<\/em> oder er f\u00e4llt auf<em> indirektes (softwaregest\u00fctztes) Rendering<\/em> zur\u00fcck.<\/p>\n<p>Da der propriet\u00e4re nVIDIA Treiber die DRI Architektur nicht unterst\u00fctzt, muss allein schon deshalb der softlink von \/usr\/lib\/libGL.so.X auf die eigene OpenGL Biblitohek zeigen, welche die OpenGL Kommandos dann in Hardwarebefehle umsetzen kann.<\/p>\n<h4>Memory Management \/ GEM<\/h4>\n<p>Bis xserver 1.6 haben ausnahmslos alle Grafiktreiber die Verwaltung des Grafikspeichers selbst implementiert.<br \/>\nMit DRI2 wird jetzt erstmals &#8211; mit dem <strong>Graphics Execution Manager<\/strong> (<strong>GEM<\/strong>)<strong> <\/strong>&#8211; ein generischer Memory Manager f\u00fcr GPU&#8217;s vom Kernel (ab 2.6.28) bereitgestellt. Er kontrolliert den Ausf\u00fchrungskontext und managt <strong>NUMA<\/strong> auf modernen Grafikkarten. Verschiedene Applikationen k\u00f6nnen nun GPU Ressourcen teilen ohne GPU <em>state changes<\/em> selber verwalten zu m\u00fcssen.<br \/>\nGEM wird derzeit nur vom <strong>Intel Treiber 2.6.0<\/strong> verwendet.<\/p>\n<h4>X Rendering Extension (XRender)<\/h4>\n<p>Stellt eine Komponente f\u00fcr <em>Porter-Duff Image Compositing<\/em> und <em>Alpha-Blending<\/em> bereit. Gedacht war diese Erweiterung v.a. f\u00fcr Antialiased Schriften, wird aber auch f\u00fcr alle m\u00f6glichen Desktop Effekte genutzt. XRender st\u00fctzt sich massgeblich auf die 2D Beschleunigungsarchitektur von X.Org ab.<\/p>\n<p>Unter den <em>KDE4 Systemeinstellungen<\/em> kann man w\u00e4hlen, ob die Desktop Effekte via <strong>OpenGL<\/strong> (also DRI, oder nVIDIA Direct Rendering) oder <strong>XRender<\/strong> ausgef\u00fchrt wird.<\/p>\n<h4>2D Beschleunigung<\/h4>\n<p>W\u00e4hrend mit DRI+MESA bzw. nVIDIA&#8217;s eigener Architektur, die 3D Funktionalit\u00e4t bereitgestellt wird, gibt es im 2D Bereich eine eigene Subkomponente.<br \/>\nSeit 1996 exisitert mit dem Modul <strong>XAA<\/strong> (<strong>XFree86 Acceleration Architecture<\/strong>) eine Treiberarchitektur die es erm\u00f6glicht auf die 2D Hardwarebeschleunigung von GPU&#8217;s zuzugreifen.<br \/>\nDa XAA viele 2D Operationen sowie XRender nicht mehr gen\u00fcgend beschleunigte und zus\u00e4tzlich erhebliche Probleme mit Compositing Window Manager hat (siehe <strong>xVideo<\/strong>) wurde mit X.Org 7.0 <strong>EXA<\/strong> als \u00dcbergangsl\u00f6sung bis zum vollst\u00e4ndigen 3D Desktop vorgestellt. EXA sollte schlank sein und XRender so gut wie m\u00f6glich unterst\u00fctzen. Mittlerweile unterst\u00fctzen viele Grafiktreiber dieses Modul.<br \/>\nGanz neu ist <strong>UXA<\/strong>, eine EXA Reimplementation , entwickelt von<strong> Intel<\/strong> &amp; <strong>Tungsten Graphics<\/strong>, unter Zuhilfenahme von <strong>GEM<\/strong>.<\/p>\n<p>nVIDIA unterst\u00fctzt defaultm\u00e4ssig direkt die hardwarebeschleunigung der XRender Extension und damit die 2D Befehle.<\/p>\n<h4>X Video extension (Xv\/XVideo)<\/h4>\n<p>Video Ausgabe Mechanismus des X-Window Sytems. Haupt Usecase ist die Skalierung von Videowiedergabe in der Video Controller Hardware, bspw. f\u00fcr <em>Vollbilddarstellung<\/em>.<br \/>\nWenn allerdings die Compositing Erweiterung des Window Managers eingestellt ist, werden Programme die <strong>Xv in Kombination mit XAA<\/strong> benutzen &#8211;\u00a0 wie VLC &#8211; sofort mit folgender Meldung <strong>terminieren<\/strong>:<\/p>\n<pre>X11 error: BadAlloc (insufficient resources for operation)<\/pre>\n<p>Grund daf\u00fcr ist, dass der XAA Beschleuniger kein Mechanismus beherscht um Pixmaps vom <strong>Systemspeicher<\/strong> in das <strong>Video RAM<\/strong> zu laden.<\/p>\n<h4>X Resize and Rotate Extension (XRandR)<\/h4>\n<p>Erlaubt es <strong>X clients<\/strong> dynamisch <strong>X Screens<\/strong> zu vergr\u00f6\u00dfern\/verkleinern und zu rotieren. Generell geht es darum die Display Charakteristik zu ver\u00e4ndern, ohne den xserver neu starten zu m\u00fcssen.<br \/>\nXRandR <em>unterst\u00fctzt (derzeit) nicht<\/em> Multi-Screens, bei denen ein WindowManager mehrere Screens verwaltet, die allerdings nicht durchg\u00e4ngig sind. <strong>Xinerama<\/strong> Mode wird dagegen unterst\u00fctzt. Bei diesem Mode spannen mehrere Monitore einen grossen <strong>virtuellen Screen<\/strong> auf. Dieser Mode heisst bei nVIDIA <strong>TwinView<\/strong> und kann \u00fcber das nVIDIA eigene Setting Tool angew\u00e4hlt werden.<br \/>\nDa Xinerama\/TwinView einen grossen virtuellen Screen aufspannt, ben\u00f6tigt man dadurch wesentlich mehr VRAM. Auch wenn die Menge an verf\u00fcgbarem VRAM stark gestiegen ist, muss man sich im klaren sein, dass bei eingeschaltetem Antialiasing der Memory sehr schnell ausgesch\u00f6pft sein wird (siehe <a href=\"http:\/\/www.instruyete.org\/?p=113\" title=\"Full Screen Antialiasing\">Full Screen Antialiasing<\/a>)<\/p>\n<p><strong>XRandR<\/strong> lag lange Zeit in Version <strong>1.2<\/strong> vor und wurde mit xserver 1.6 auf Version <strong>1.3<\/strong> upgedatet. Neu ist u.a. das <em>Panning Feature<\/em>.<br \/>\nXRandr l\u00e4sst sich mit dem gleichnamigen (kleinschreibung beachten) Kommandotool bedienen. Ein Generisches GUI oder die Integration in die bekannten Desktop Systeme &#8211; <strong>Gnome<\/strong> und <strong>KDE<\/strong> &#8211; l\u00e4sst auf sich warten. Einzelne Features lassen sich aus GPU Settings Applikationen der Hersteller bedienen, so bspw. TwinView mittels <strong>nvidia-settings<\/strong>.<\/p>\n<h4>X Input Extension<\/h4>\n<p>Zust\u00e4ndig f\u00fcr Einrichtung und Abfrage von Eingabeger\u00e4ten. Mit xserver 1.6 wurde <strong>X Input 1.5<\/strong> vorgestellt, welches neben Vereinfachungen auch <em>Predictable Pointer Acceleration<\/em> einf\u00fchrt, welches verbesserte und beschleunigte Darstellung des Mauszeigers bietet.<\/p>\n<h4>Gallium 3D<\/h4>\n<p>Eines der vielversprechendsten Projekte innerhalb des X-Window System seit langen. Unter der Federf\u00fchrung von <strong>Tungsten Graphics<\/strong>, welche im Auftrag von Intel deren Grafiktreiber erstellt, entsteht langfristig ein neuer Layer anstatt der <strong>MESA&lt;-&gt;DRI<\/strong> Kombination.<\/p>\n<p>Das Gallium API kann als Input <em>unterschiedliche<\/em> Grafikbibliotheken &#8211; OpenGL, Direct3D.. &#8211; verarbeiten und hat nur noch ein backend, den sog.<em> State Tracker<\/em>.<br \/>\nGrafikkartentreiber m\u00fcssen nur noch diesen State-Tracker verarbeiten &#8211; bisher muss f\u00fcr jeden Grafikkartentreiber ein angepasstes <strong>mesa-DRI Modul<\/strong> geschrieben werden. Zudem benutzt Gallium3D unter Linux auch das Kernel Memory Management &#8211; GEM &#8211; wobei Gallium selber plattformneutral ist.<br \/>\nMit einem dummy-Treiber lassen sich sogar Ergebnisse von nicht vorhandener GPU-Hardware simulieren.<br \/>\nOb dieses Modul tats\u00e4chlich in den Produktiveinsatz kommt und ev. sogar \u00fcber die Grenzen von X.Org\/Linux sich durchsetzt kann derzeit noch nicht abgesch\u00e4tzt werden.<\/p>\n<h4>Kernel Mode Settings<\/h4>\n<p>Dies ist die Bestrebung die bisher im Userland des xservers angesiedelten Modecodes in den Linux Kernel zu transferieren.<br \/>\nNeben der wiederholten Redundanzvermeidung wird es substantielle Verbesserungen geben:<\/p>\n<ul>\n<li> Verbesserte (oder erstmals verl\u00e4sslich eingef\u00fchrte) Unterst\u00fctzung f\u00fcr <em>Suspend<\/em> und <em>Resume<\/em><\/li>\n<li>Verl\u00e4ssliches <em>Virtual Terminal (VT) Switching<\/em><\/li>\n<li> Flickerfreies booten \/ einloggen in die Desktop Umgebung<\/li>\n<\/ul>\n<p>Diese Featureset wird seit <strong>Kernel 2.6.29<\/strong> angeboten und wird erstmals von der Intel Treiber Serie 2.6.x genutzt (Einstellungsm\u00f6glichkeit)<\/p>\n<p>X.Org erlebt derzeit seine aufregendste &#8211; der Enduser eventuell seine nervigste &#8211; Zeit. Probleme gibt es derzeit mit<\/p>\n<ul>\n<li>Instabilit\u00e4t des Intel Treiber 2.6 mit UXA<\/li>\n<li><a href=\"http:\/\/bugs.freedesktop.org\/show_bug.cgi?id=17638\" title=\"Ring of Death bug auf freedesktop.org\">Ring of Death<\/a> Probleme des Intel Treibers 2.x mit X.Org 7.4 und EXA<\/li>\n<li>nVIDIA&#8217;s 2D Beschleunigung unter Composite Window Manager<\/li>\n<li>Generell 3D Performance auf Composite Window Manager<\/li>\n<\/ul>\n<p>Sollten sich die Beteiligten nicht irrational verhalten, wird X.Org wahrscheinlich als bestes Window System auf dem gesamten Desktop Markt hervorgehen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn alle Tage neue Features eingef\u00fchrt werden, Buzzwords inflation\u00e4r auftauchen, alte Gewohnheiten nicht mehr gelten\u00a0 und dadurch Probleme bei der t\u00e4glichen Arbeit entstehen wird es mal wieder Zeit sich einen \u00dcberblick \u00fcber den Stand der Technik zu verschaffen. Wie jeder weiss ist Linux nur der Betriebssystemkern. Alle graphischen Anwendungen, sei es das komplette Desktopsytem wie &hellip; <a href=\"https:\/\/www.instruyete.org\/?p=117\" class=\"more-link\"><span class=\"screen-reader-text\">Das X-Windows Universum auf Linux<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,7],"tags":[],"class_list":["post-117","post","type-post","status-publish","format-standard","hentry","category-linux","category-unix"],"_links":{"self":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=117"}],"version-history":[{"count":1,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":751,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions\/751"}],"wp:attachment":[{"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.instruyete.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}