Mit der Cygwin-Umgebung laufen unter Windows mehr Linux-Anwendungen als anders herum unter Wine. Auch das Ausführen grafischer Programme eines Linux-Rechners über das Netz gelingt mit wenig Aufwand.
Auch wenn Microsoft Linux nicht mehr wie früher vollständig totschweigt, so herrscht zwischen Windows- und Linux-Rechnern von Haus aus immer noch Funkstille: Das unter Linux ohne Weiteres mögliche Starten von grafischen Linux-Programmen über SSH klappt von Windows aus nicht.
Dies ändert sich, sobald Sie die Cygwin-Umgebung [1] installieren. Dabei handelt es sich um eine Windows-Laufzeitumgebung für Linux-Programme (Abbildung 1), also eine Art Gegenstück zur Linux-Software Wine [2]. Es besteht jedoch ein grundlegender Unterschied: Während Wine fertige Windows-Binaries startet, gilt es, Linux-Programme für die Cygwin-Umgebung anzupassen und neu zu kompilieren (siehe Kasten “Wie Cygwin funktioniert”).

Abbildung 1: Wie bei Wine handelt es sich auch bei Cygwin um eine Laufzeit-Zwischenschicht, die zwischen System-Calls von Windows und Linux vermittelt. Anders als bei Wine müssen die Programme die benötigte Laufzeitumgebung jedoch selbst mitbringen.
Wie Cygwin funktioniert
Linux-Programme laufen vor allem deshalb nicht unter Windows, weil sich Linux- und Windows-System-Calls voneinander unterscheiden, also die Schnittstellen, über die Programme mit dem Betriebssystem interagieren. Die Cygwin-Umgebung schiebt eine Schicht zwischen Anwendung und Betriebssystem ein, welche die Linux-System-Calls in die passenden Windows-Äquivalente übersetzt.
Anders als bei Wine, das originale Windows-Programmdateien quasi Huckepack startet, muss man die Cygwin-Zwischenschicht in die ausführbare Datei jedes Programms einkompilieren. Dazu gibt es in der Cygwin-Umgebung eine modifizierte GCC-Fassung, die aus dem nur geringfügig modifizierten Quellcode eines Unix-Programms Windows-EXE- und DLL-Dateien erzeugt.
Das Cygwin-Projekt bringt Pakete für die Bash, SSH und den X-Server und viele weitere Komponenten gebrauchsfertig mit, die Sie über einen grafischen Installer mit wenigen Mausklicks installieren und aktuell halten. So statten Sie Windows ohne großen Aufwand mit SSH und einem X-Server aus.
OpenSSH und das X-Window-System sind gefragte Highlights der für Cygwin verfügbaren Linux-Programme. Da Linux-Ports mit Cygwin-Unterstützung oft sehr leicht gelingen, stehen Windows-Versionen vieler weiterer Linux-Programme zum Einsatz bereit (siehe Kasten “Cygwin Ports”).
Cygwin Ports
Cygwin Ports spielen Sie mit dem gleichen Installer ein wie das Cygwin-Grundsystem selbst. Allerdings dürfen Sie die Einrichtungsroutine dazu nicht mit einem Doppelklick aus dem Explorer heraus starten, sonst akzeptiert diese die Signatur des Cygwin-Ports-Repositorys nicht. Teilen Sie dem Installer diese daher auf der Cygwin-Konsole mit
$ cygstart -- /Pfad/zu/setup-x86.exe -K http://cygwinports.org/ports.gpg
Bei der Frage nach dem Download-Mirror geben Sie ftp://ftp.cygwinports.org/pub/cygwinports ein, und klicken Sie auf Add. Falls Sie einen deutschen Mirror [7] nutzen möchten, darf dieser nicht auf demselben Server liegen wie der zuletzt benutzte Download, sonst erkennt ihn der Cygwin-Installer nicht als neue Quelle. Die Download-URL muss auf das Verzeichnis cygwinports/ auf dem Server zeigen.
Noch sind nicht alle Programme für die 64-Bit-Architektur konvertiert [8], sodass es sich eventuell lohnt, auch auf einem 64-Bit-System die 32-Bit-Variante zu installieren.
Zu den Highlights in der Liste der portierten Programme zählen Abiword, Amarok, Apache2, Avidemux, Bluefish, Calligra Office, Dia, Digikam, Dvdauthor, Emacs, Espeak, Evolution, Ffmpeg, Filezilla, Fluidsynth, Gimp, Git, Gnucash, Gnumeric, Gnuchess, Inkscape, Jokosher, Kate, Kmail, Kontact, Kstars, Monodevelop, Mplayer, Scribus und Xmms2.
Außerdem stehen die Desktop-Umgebungen Gnome, KDE, LXDE, Mate, ROX und XFCE inklusive vieler zugehöriger Komponenten als Ports bereit.
Nur ein paar Mausklicks
Bei der Bedienung kommt Cygwin Windows-Anwendern ohne Konsolenerfahrung entgegen: Mit einem Klick auf setup_x86.exe [3] (oder setup_x86_64.exe [4] für 64-Bit-Systeme) starten Sie das grafische Installationsprogramm. Danach erfragt das Setup-Programm das Root-Verzeichnis, wofür es C:\cygwin vorschlägt. Alle installierten Dateien liegen später unterhalb dieses Ordners, und zwar in einem gewöhnlichen Linux-Filesystem-Layout.
Nicht mehr ganz so Windows-typisch ist die eingebaute automatische Auflösungen von Paketabhängigkeiten. Dank dieser genügt es, zum Einrichten einer Umgebung zum Ausführen von Remote-X-Programmen die Pakete xinit, openssh und xterm auszuwählen (Abbildung 2). Alle Abhängigkeiten, wie etwa den X-Server oder die Cygwin-Laufzeitumgebung, installiert das Setup-Programm dann automatisch. Dabei kommt ein Download von etwa 70 MByte Umfang zusammen.

Abbildung 2: Der grafische Installer von Cygwin löst die Abhängigkeiten ausgewählter Komponenten automatisch auf.
Beim Auffinden dieser Pakete in der langen Liste hilft das Suchfeld am oberen Fensterrand. Ein Klick auf Skip wechselt zwischen Installieren, Updaten, Deinstallieren oder Überspringen. Zum Aktualisieren aller installierten Pakete starten Sie das Setup-Programm, ohne die Paketauswahl zu verändern.
Erste Schritte
Sofern Sie das nicht explizit abgewählt haben, erstellt der Installer einen Starter für die Cygwin-Konsole auf dem Desktop und im Windows-Startmenü. Im Startmenü-Ordner Cygwin-X landet außerdem ein Eintrag zum Starten des X-Servers ohne Umweg über die Cygwin-Konsole.
Öffnen Sie zunächst das Cygwin Terminal. Im Konsolenfenster (Abbildung 3) begrüßt Sie eine weitgehend unmodifizierte Bourne Again Shell. Die Cygwin-Bash versteht allerdings neben Unix-Dateipfaden auch die Windows-Version mit Backslash und Laufwerksbuchstaben. Die gewohnte Shell lässt sich daher uneingeschränkt für Dateioperationen und Skripting innerhalb der Windows-Umgebung nutzen.

Abbildung 3: Linux unter Windows: In der Cygwin-Umgebung fühlen sich Linux-Geeks dank der gewohnten Bash heimisch.
Absolute Unix-Pfadangaben wie /home übersetzt die Cygwin-Variante der Shell in Pfade relativ zum Installationsordner von Cygwin (c:\cygwin respektive c:\cygwin64). Entscheidend ist dabei auch, dass EXE-Dateien sich ohne Endung aufrufen lassen: Alle nach Cygwin portierten Programmdateien müssen diese Namenserweiterung zwar erhalten, damit sie sich unter Windows ausführen lassen. Dennoch funktionieren auf der Cygwin-Konsole Aufrufe wie /usr/bin/xterm, und auch alle für Linux geschriebenen Bash-Skripte bleiben verwendbar.
Der Cygwin-X-Server basiert auf dem Original von X.org, wurde bei der Portierung allerdings leicht erweitert. Die Linux-Programme, die über das Netz auf ihn zugreifen, merken davon aber nichts, sodass es beim Remote-Arbeiten mit Linux-Rechnern keine Probleme gibt.
Windows als Fenstermanager
Sie starten den X-Server am einfachsten über den Startmenü-Eintrag Cygwin-X/XWin Server. Dabei öffnet sich ein Xterm-Fenster (Abbildung 4). Der X-Server erscheint zwar in der Taskleiste, jedoch ohne Zuordnung eines Programmfensters.

Abbildung 4: Remote-X unter Windows: Ein Eintrag im Startmenü öffnet ein X-Terminal und einen X-Server im Hintergrund. Eine SSH-Verbindung zu einer Linux-Maschine samt X-Forwarding zaubert dann Linux-Programme in Windows-Fensterdekoration auf den Desktop.
Melden Sie sich nun mit ssh -X IP-Linux-PC auf ihrer Linux-Maschine an. Der Parameter -X sorgt für das X11-Forwarding. Nun dürfen Sie auf dem entfernten Rechner beliebige grafische Anwendungen starten. Die Programmfenster öffnen sich mit der Windows-Fensterdekoration.
Das eben beschriebene Vorgehen nutzt den sogenannten Multi-Window-Modus, der entfernt gestartete Programme aber auch für das lokal ablaufende Xterm in separaten Windows-Fenstern anzeigt. In der Cygwin-Umgebung installierte Ports von Linux-Anwendungen fügen sich ebenso wie die remote per SSH gestarteten Anwendungen organisch in den Windows-Desktop ein.
Auch lokal installierte Ports von X-Anwendungen benötigen Zugriff auf einen X-Server. Sie rufen diese ohne vorherigen Aufbau einer SSH-Verbindung im beschriebenen Xterm-Fenster auf, denn dort ist, anders als auf der normalen Cygwin-Konsole, die Shell-Variable DISPLAY bereits gesetzt.
Gesamtpaket
Alternativ importiert der Cygwin-X-Server statt einzelner Anwendungen auch einen ganzen Linux-Desktop. Mit VNC mag dies etwas einfacher gehen, doch Remote-X bringt eine bessere Bildqualität und die Anzeige reagiert zügiger – zumindest im lokalen Netz. Außerdem startet eine eigenständige Desktop-Session. Ein auf dem entfernten Rechner lokal angemeldeter Benutzer kann daher ungestört weiterarbeiten.
Der X-Server und auch dessen Cygwin-Port bringt für diesen Zweck ein eigenes Protokoll namens XDMCP (X Display Manager Control Protocol) mit. Dabei erscheint im X-Server unter Windows der Login-Schirm des Display Managers (KDM, GDM oder LightDM, Abbildung 5). Allerdings wandern dabei Passwörter im Klartext durch das Netz. Da XDMCP das UDP-Protokoll nutzt, lässt es sich nicht über SSH tunneln, wie die (für sich genommen ebenfalls unsichere) Remote-X-Verbindung.

Abbildung 5: Per XDMCP verknüpft sich ein Cygwin-X-Server direkt mit dem Display-Manager eines Linux-Rechners. Allerdings taugt diese unsicherere Kommunikation wegen der im Klartext transferierten Passwörter nur für ein geschütztes privates Netzwerk.
Das Verfahren eignet sich also nur für das vertrauenswürdige Heimnetzwerk. Selbst dort wird es zum Risiko, sobald es einem Angreifer etwa bei einer WLAN-Verbindung gelingt, den Netzwerkverkehr abzuhören. Deswegen deaktivieren Sie die gängigen Distributionen XDMCP.
Um es einzuschalten verändern Sie in der Sektion [Xdmcp] der Display-Manager-Konfigurationsdatei den Wert der Variablen Enabled zu true. Für KDM erledigen Sie das in /usr/share/config/kdm/kdmrc, für LightDM unter Ubuntu in /etc/lightdm/lightdm.conf. Bei GDM editieren Sie /etc/gdm/custom.conf.
Starten Sie nun den Display-Manager-Dienst (kdm, gdm oder lightdm) neu. Danach geben Sie in der Cygwin-Konsole X -query Server-IP ein, um das gewohnte Look & Feel bei der Anmeldung am Linux-Rechner zu erhalten.
Sicherer Tunnel
Eine Remote-Desktop-Sitzung lässt sich aber auch über einen sicheren SSH-Tunnel initiieren. Dazu starten Sie in der Cygwin-Konsole zunächst mit X & einen lokalen X-Server. Das & schickt den Dienst in den Hintergrund und sorgt dafür, dass Sie die Konsole weiter benutzen können.
Da der Befehl das X-Binary direkt aufruft, startet nur der X-Server in einem großen Fenster, in dem es kein Terminal zum Aufbau einer SSH-Session gibt. So vermeiden Sie innerhalb der Desktop-Umgebung ein Fenster, dessen Schließen alle offenen Anwendungen ebenfalls beendet. Wechseln Sie nach dem Öffnen des X-Window-Fensters zur Cygwin-Konsole zurück, und starten Sie mit folgendem Befehl remote eine KDE-Desktop-Umgebung:
DISPLAY=:0.0; ssh -Y -f IP-Linux-PC; startkde
Nach dem Setzen von DISPLAY folgt ein SSH-Aufruf, der nach Ausführen eines Befehls auf dem entfernten Rechner die Konsole wieder freigibt (Option -f). Der Parameter -Y initiiert das X-Forwarding im Trusted-Modus, damit der Fenstermanager aus der Ferne die X-Instanz nutzen darf.
Für XFCE ersetzen Sie startkde durch startxfce4, LXDE hört auf startlxde. Problematisch gab sich im Test Gnome 3 beim Startbefehl gnome-session: Die Desktop-Umgebung scheitert wegen der fehlenden 3D-Unterstützung. Eine allgemeingültige Methode, sie über das Netzwerk in den Fallback-Modus zu zwingen, scheint nicht zu existieren.
Alles von zu Hause aus
Als dritte Variante bietet es sich an, eine portierte Desktop-Umgebung (oder wenigstens einen Fenstermanager) lokal in die Cygwin-Umgebung zu installieren. Wie im Mehrfenster-Modus starten Sie dann remote nur noch die eigentlichen Anwendungen. Trotzdem wartet der Desktop mit dem Look & Feel von Linux auf – für Remote-Anwendungen, aber auch für lokal installierte Ports.
Aus dem Standard-Cygwin-Repository lassen sich immerhin Windowmaker sowie die Fenstermanager Fwm und Twm installieren. Auf Cygwin-Ports [5] stehen Gnome, KDE, LXDE, Mate, ROX, XFCE und die Sugar-Desktop-Umgebung zur Verfügung.
Nach der Installation von KDE fehlte im Test allerdings die Abhängigkeit libqt4, weil sie zwar im normalen Repo bereitsteht, nicht aber in jenem von Cygwin Ports. Erst ein Neustart des Installers und das Einbinden des entsprechenden Repositories behob das Problem. Danach konnten wir der Cygwin-Umgebung einen KDE-Desktop entlocken (Abbildung 6), allerdings erst nach einer vergleichsweise langen Startzeit.

Abbildung 6: Portiert, nicht remote ausgeführt: In der Cygwin-Umgebung läuft hier ein vollwertiger KDE-Desktop.
Der Gnome-Desktop ließ sich im Test allerdings nicht starten, da die Gnome Shell auf dem Server nicht zu finden war. Die spartanische Windowmaker-Umgebung (Abbildung 7) funktionierte dagegen auf Anhieb. Der entsprechende Download fällt recht klein aus, außerdem steht Windowmaker bereits im Standard-Cygwin-Repository zur Verfügung.

-mwextwm des Cygwin-X-Servers erlaubt es, eine lokale Windowmaker-Umgebung zu starten, die den Windows-Desktop durchscheinen lässt. In dieser Konfiguration setzt sich die Fensterdekoration X-Anwendungen deutlich von Windows-Programmen ab.” width=”300″ height=”244″ />
Abbildung 7: Der noch als experimentell gekennzeichnet Parameter-mwextwm des Cygwin-X-Servers erlaubt es, eine lokale Windowmaker-Umgebung zu starten, die den Windows-Desktop durchscheinen lässt. In dieser Konfiguration setzt sich die Fensterdekoration X-Anwendungen deutlich von Windows-Programmen ab. Wie unter Linux dient auch in der Cygwin-Umgebung das Startskript startx zum konzertierten Starten von X plus einem Display-Manager. Folgender Befehl öffnet also eine KDE-Session:
$ startx /usr/bin/startkde -- -nodecoration
Die Startskripte der anderen Desktop-Umgebungen sind dieselben wie beim Remote-Aufruf. Vor dem Starten weiterer Programme müssen Sie DISPLAY per Hand setzen. Weitere Details erläutert der Kasten “Cygwin-X-Server starten”. Mit XLaunch bietet der Cygwin-Installer außerdem eine grafische Oberfläche an, die Anwendern die im Kasten geschilderten Konsolen-Aufrufe abnimmt (Abbildung 8).

Abbildung 8: Das Programm Xlaunch erspart beim Start des Cygwin-X-Servers in allen Varianten die Auseinandersetzung mit Kommandozeilenparametern.
Cygwin-X-Server starten
Über die Eingabe von startxwin in der Cygwin-Konsole oder den dafür vom Installer angelegten Menüpunkt starten Sie den X-Server im Mehrfenster-Modus (ein Fenster pro Anwendung mit Windows-Fensterdekoration).
Ohne Aufrufparameter öffnet das Tool, das die Skripte startxwin.sh und startxwin.bat früherer Cygwin-Versionen ersetzt, ein Xterm-Fenster mit gesetzter DISPLAY-Variable. Sie dürfen sich dort direkt mit ssh -X IP-Linux-PC anmelden und remote grafische Programme starten.
Die Kommandozeilenparameter von startxwin sowie seine Konfigurationsdatei ~/.startxwinrc erläutert die Manpage des Tools [9].
XWin.exe oder X
Der Aufruf X startet nur den X-Server. Programme, die darauf zugreifen, rufen Sie in der Cygwin-Konsole nach Setzen der Shell-Variablen DISPLAY=:0.0 auf. Die Parameter des Cygwin-X-Servers, die teilweise von denen der Linux-Fassung abweichen, nennt die Manpage [10].
Startx
Die Eingabe von startx koppelt den X-Server an einen lokal in der Cygwin-Umgebung laufenden Fenstermanager. So versieht beispielsweise startx /usr/bin/wmaker die Programmfenster mit einer Windowmaker-Fensterdekoration.
Parameter für den X-Server selbst folgen nach dem Trenner --, Text vor dem Trennzeichen interpretiert startx als in der Cygwin-Umgebung zu startendes Programm, gegebenenfalls plus Optionen:
$ startx /usr/bin/wmaker -- -nodecoration
Dieser Befehl initiiert clientseitig eine Windowmaker-Umgebung, die den ganzen Desktop oberhalb der Taskleiste einnimmt. Ganz anders folgender Befehl:
$ startx /usr/bin/wmaker -- -mwextwm
Er verbirgt den Desktop-Hintergrund von Linux, sodass der Windows-Desktop sichtbar bleibt. Weitere Infos liefert die X.org-Manpage von startx [11].
Fazit
Cygwin portiert das X-Window-System, OpenSSH und viele weitere Unix- und Linux-Programme nach Windows. Damit steht dem Remote-Zugriff auf Linux-Rechner nichts mehr im Weg. Zufriedenstellend klappt das allerdings nur über eine schnelle lokale Netzwerkverbindung mit geringen Latenzen – eine Einschränkung, die für Remote-X unter Windows im Moment lediglich der kostenlose, aber nicht freie NX-Client [6] überwindet.
Infos
[1] Cygwin: http://www.cygwin.com
[2] Wine: http://www.cygwin.com
[3] Cygwin-Installer (32 Bit): http://cygwin.com/setup-x86.exe
[4] Cygwin-Installer (64 Bit): http://cygwin.com/setup-x86_64.exe
[5] Cygwin Ports: http://cygwinports.org
[6] NoMachine-Client: https://www.nomachine.com/download
[7] Cygwin-Ports-Mirrors: https://sourceware.org/mirrors.html
[8] Portierte Anwendungen: ftp://sourceware.org/pub/cygwinports/
[9] Manpage zu Startxwin: http://x.cygwin.com/docs/man1/startxwin.1.html
[10] Manpage zum Cygwin-X-Server: http://x.cygwin.com/docs/man1/XWin.1.html
[11] Manpage zu Startx: http://www.x.org/releases/X11R7.5/doc/man/man1/startx.1.html





