PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Remote X Applikation nach Unterbrechung der Verbindung weiterführen



N0rdmann
21.12.04, 03:29
So da ich daran jetzt eine ganze Zeit drann rumnagte und von vielen Seiten nur "Sag mir mal wie, falls du es gelöst hast" gehört hab poste ich mal kurz ein kleines Tutorial ;)

Es richtet sich eigentlich an den Linux Einsteiger wobei man schon wissen sollte was screen ist oder wie man ein Archiv entpackt :)

Problem:
Man will ein X Programm, wie ein Consolen Programm mit Screen, in den Hintergrund bringen und später wieder aufrufen oder man hat (wie ich) einen Server auf dem kein X-Server läuft und braucht aber trozdem X Programme die man dann z.B. via SSH Tunnel auf einem lokalen X-Server startet, diese dann aber abbrechen sobald man die SSH Verbindung trennt oder den lokalen X-Server beendet!

Lösung:
Das ein wenig verstaubte und scheinbar unbekannte xmove.

Woher:
ftp://ftp.cs.columbia.edu/pub/xmove/
Am besten die 2er Beta verwenden da ihr erst mit dieser Programme mit 16bit oder 24bit Farben verwenden könnt :o

Vorbereitung:
Ihr entpackt das Archiv in ein belibiges Verzeichniss und wechselt in ./xmove
(Ich hatte anfänglich das Problem das ich es nicht kompilieren konnte da ich kein eingerichtetes Imake hatte.)

Vor dem make Befehl "xmkmf" ausführen. Damit wird das Imakefile in ein Makefile umgewandelt.
(xmkmf findet man im Packet XFree86-devel)
Dann ganz normal "make" und "make install".
Er wird dann am Ende meckern das er keine Rule für die .man Pages hat was uns aber egal sein kann.
Das gleiche dann nochmal im Verzeichniss ./xmovectrl und wir wären soweit.

Prinzip:
X-move fungiert quasi als Proxyserver. Man startet xmove welches dann als X-Server angesprochen wird, es benötigt aber einen bereits existierenden X-Server welchen man beim starten mit angeben muss.

xmovectrl, das Gegenstück . Damit kontrolliert man den x-move "Server" man kann Programme zwischen X-Servern hinunderherschieben oder wie mit screen "detachen" was dann hier suspenden heisst.

Im Prinzip startet ihr dann alle X-Programme nicht direkt auf eurem X-Server sonder auf dem x-move "Server" und dieser leitet das Programm dann an den gewünschten X-Server weiter (oder stellt es in den Hintergrund)

genauer Ablauf:
Ich gehe hier jetzt von meiner Situation aus:
-Server auf dem die X-Anwendung laufen soll ohne X-Server.
-Client, mein lokaler PC mit X-Server und SSH Verbindung zum Server ohne X.

Ich öffne zum ersten Test 3 SSH Verbindungen (mit X Forwarding "ssh -X server") zu meinem Server.

In der ersten Verbindung starte ich "xmove meineClientIP:0 -port 0"
Dieser Befehl erstellt auf meinem Server einen "X-Server" auf localhost:0 der alles zu meinem lokalen X- Server (meineClientIP:0) weiterleitet.

In der zweiten Verbindung setze ich dann die $Display Variable auf localhost:0 (DISPLAY=localhost:0)
-> Das Programm wird jetzt auf dem Server gestartet und gibt seine Ausgaben auf meinem lokalen X-Server aus (soweit so gut).

In der dritten Verbindung frage ich dann mit "xmovectrl localhost:0 -list" ab was auf dem lokalen xmove "X-Server" (localhost:0) läuft und an welchen X-Server er es weiterleitet. Wichtig ist sich hierbei die ID vor dem Program zu merken.

Und nun der Hauptteil: Ich detache mein X-Programm mit "xmovectrl localhost:0 -move -suspend IDdesProgramms" Dies lässt das Programm ohne eigentlichen X-Server lokal auf dem xmove "X-Server" ohne Ausgabe weiterlaufen. Ich kann nun meinen lokalen X-Server beenden ohne das meine Programme auf dem Server beeinflusst werden!

Nun jetzt hab ich aber immernoch 2 offen SSH Verbindungen mit laufenden Programmen und egal welche ich schliesse, alles bricht ab :D
-> Lösung: den "xmove" Server und das eigentliche X-Programm jeweils mit dem herkömmlichen "screen" vornedrann starten und ich kann alles detachen und mich komplett vom Server trennen ohne das mein X-Programm beendet wird ;)

(wenn man von vornerein mit Screen arbeitet benötigt man auch nur 2 SSH Sessions da man mit dem 2. immer detachen kann ;))

Wenn man nun evtl. noch lokal auf dem Server einen richtigen X-Server auf localhost:0 laufen hat und Programme zwischen SSH client Pc und Server verschieben will so gibt man bei "xmovectrl localhost:0 -move -suspend IDdesProgramms" statt -suspend einfach die X-Serveradresse (localhost:x) an auf die das Programm verschoben werden soll....

Ich hoffe ich konnte euch das halbwegs näherbringen :cool:
Könnt es auch gern bewerten das ist mein erstes "richtiges" HowTo *g*

**edit**
xmove gibts aktuell noch unter:
http://hpux.cs.utah.edu/ftp/hpux/X11/Networking/xmove-2.0b2/