Eine kleine Erklärung zum Verständnis:
Bei Unix ist die Grafikausgabe eine optionale Funktion - weit weniger
fest ins System eingeklöppelt, als bei Windows. Was bei Windows der
Grafiktreiber macht, das macht bei Unix der X-Server. Der heißt so, weil
er traditionell über Netzwerk angesprochen wird. Darauf ergibt sich bei
Unix die Möglichkeit, die Bildschirmausgabe auf einem ganz anderen
Rechner zu machen, als wo das eigentliche Programm läuft.
Wenn du den Raspberry Pi remote nutzt, sieht das dann so aus:
1 | Raspi <-------Netzwerk (SSH Port 22)---------- PC (= Text Konsole)
|
2 | |
|
3 | |
|
4 | +------------Netzwerk (X11 Port 6000)-------> PC (= Grafischer X-Server)
|
Du loggst dich per SSH auf den Respi ein und stellt zugleich einen
X-Serer bereit, auf den die Programme (die du auf dem Raspi ausführst)
ihre grafischen Ausgaben machen dürfen.
Grafische Linux Programme gehen standardmäßig davon aus, dass lokal
mindestens ein X-Server mit Kanalnummer 0 läuft. Der heisst dann
"localhost:0" oder einfach :0. Im TCP/IP Protokoll ist die entsprechende
Portnummer üblicherweise 6000.
Wenn dein PC Linux ausführt, muss du dem X-Server mitteilen, dass er
Verbindungen von außen zulassen soll. Das geht mit dem Befehl "xhost +".
Bei Windows entfällt dieser Schritt.
Du willst die Bildschirmausgabe auf deinem PC haben, deswegen setzt du
vor dem Start des Programmes auf dem Raspi eine Umgebungsvariable
"DISPLAY=meinpc:0". Nun spricht das Programm den X-Server auf deinem PC
an, auf Port 6000.
Sinnvollerweise verschlüsselt man die X11 Kommunikation ebenfalls, was
beim SSH Client die Option -X erledigt und Serverseitig durch die
Konfiguration "X11UseForwarding" erlaubt wird. Dann wird die X11
Verbindung durch die bestehende SSH Verbindung (aber in umgekehrte
Richtung!) getunnelt:
1 | Raspi <-------Netzwerk (SSH Port 22)---------- PC (= Text Konsole)
|
2 | | / \
|
3 | | / \
|
4 | +---X11-+ +------> PC (= Grafischer X-Server)
|
In diesem Fall setzt SSH die DISPLAY Variable automatisch richtig. Bei
meiner Kombi (Rapi und PC mit Debian Linux) ist das
DISPLAY=localhost:10.0.
In diesem Fall richtet SSH einen minimalen TCP-Server auf dem Raspi auf
Port 6010 ein, der einfach alles Daten durch die SSH Verbindung an den
PC auf Port 6000 weiter leitet. So wird die Grafikausgabe an den
X-Server der auf dem PC läuft umgeleitet.
Andere Baustelle: VNC
VNC simuliert auf dem Server (Raspi) einen Bildschirm samt Grafikkarte
und Treiber und leitet das Bild in komprimierter Form an den VNC Client
(dein PC) weiter. Dort wird das Bild dann in einem Fenster dargestellt.
Bei langsamen Netzwerkverbindungen (z.B durch das Internet) arbeitet
diese Methode meistens wesentlich flüssiger, obwohl das Datenvolumen und
der technische Aufwand (auf Seite des Raspi) höher ist.
VNC kommuniziert üblicherweise auf Port 5900 für den ersten virtuellen
Bildschirm, 5901 für den zweiten, usw.
Während du bei X11 normalerweise nur die Ausgabe einzelner Fenster an
den PC überträgst und die Programme per Kommandozeile (ssh) startest,
bekommst du bei VNC üblicherweise einen kompletten Desktop samt
Startmenü angezeigt.