Real VNC auf Ubuntu 10.04 LTS über xinetd

1282
Alex Gitelman

Ich versuche, einen Real VNC-Server unter Ubuntu 10.04 LTS 64 Bit zu erhalten.

Ich habe 2 Optionen ausprobiert. Zuerst habe ich die Real VNC Free Edition erhalten und funktioniert, nachdem alle 32-Bit-Bibliotheken, Konfigurations-Hacking usw. benötigt wurden. Es ist fast gut mit einem kleinen Problem, nachdem ich die Verbindung zwischen Client, Server Abortedund Server abgebrochen habe. Ich habe viele Kombinationen von Parametern ausprobiert und konnte es nicht verstehen.

Dies ist ungefähr eine Befehlszeile, die ich verwendet habe (ich habe jedoch viele Parameterkombinationen ausprobiert).

Xvnc :2 -desktop user-desktop -query localhost -geometry 1920x1200 -depth 16 -AcceptCutText -SendCutText -rfbauth /home/user/.vnc/passwd -SecurityTypes None -DisconnectClients 

Zweite Option. Ich habe eine Testversion von Real VNC Enterprise 4.6.1 bekommen und diese installiert. Jetzt kann ich es gerne als Standalone-Server starten und meine Clients können die Verbindung trennen, ohne den Server zu töten, aber wenn ich versuche, es mit -inetdOption zu verwenden, wird es einfach still beendet. Wenn ich die Free Edition probiere, würde ich in den Stdio-Modus wechseln und eine Handshake-Nachricht drucken

RFB 003.008 

Bei der Enterprise Edition nicht der Fall. Es geht einfach ab. Keine Nachricht und keine Protokolle.

Hat irgendjemand eine Idee, wie eine der beiden Optionen funktioniert?


Auf Empfehlung von @Grawity laufe ich straceund ltrace. Hier ist die interessanteste Ausgabe von ltrace (ich habe Daten in einer Datei mit dem Namen abc und nur eingefügte Zeilen gesammelt, die ich interessant finde):

$cat abc | egrep 'strchr|print'  fprintf(0x7f330223e860, "\n%s", "Sun Jul 10 13:07:30 2011\n") = 26 strchr("inetd client gone, exiting", ' ') = " client gone, exiting" strchr("client gone, exiting", ' ') = " gone, exiting" strchr("gone, exiting", ' ') = " exiting"   $ cat abc | egrep 'strchr|print' | grep socket strchr("getpeername: Socket operation on"..., ' ') = " Socket operation on non-socket "... strchr("Socket operation on non-socket ("..., ' ') = " operation on non-socket (88)" strchr("operation on non-socket (88)", ' ') = " on non-socket (88)" strchr("on non-socket (88)", ' ') = " non-socket (88)" strchr("non-socket (88)", ' ') = " (88)"  
0

1 Antwort auf die Frage

1
grawity

Versuchen Sie es unter ltraceoder auszuführen strace.

Es kann sein, dass der inetd- Modus erfordert, dass stdin und stdout Sockets sind. Dies ist beispielsweise erforderlich, um die IP-Adresse des Clients zu ermitteln. Es ist wahrscheinlich, dass RealVNC nicht darauf vorbereitet ist getpeername(), einen Fehler zurückzugeben.

Alternativ können Sie Xvnc verwenden.

Danke, dass du strace und ltrace erwähnt hast. Sie haben vielleicht recht mit Steckdosen. Ich habe meine Frage mit der Ausgabe von ltrace aktualisiert. Aber was mache ich als nächstes, um es zu lösen? Alex Gitelman vor 13 Jahren 0
@Alex: Das Problem sollte nicht auftreten, wenn RealVNC unter * real * xinetd ausgeführt wird. Hast du das schon probiert? grawity vor 13 Jahren 0
Ich habe es mit echtem Xinetd versucht. Ich kann eine Verbindung herstellen, X-Bildschirm für eine Sekunde sehen und dann stirbt er. Ich kann auch nicht verstehen, wie man sich von vnc loggen lässt. Alex Gitelman vor 13 Jahren 0
Versuchen Sie einen Paket-Sniffer. Fehlermeldungen gehen normalerweise an stderr, das von xinetd über denselben Socket gesendet wird. Überprüfen Sie `dmesg` auf Programmabstürze und` / var / log / messages` | `/ var / log / syslog` |` / var / log / everything.log` auf VNC-Protokolle. grawity vor 13 Jahren 0
Eigentlich habe ich aus Versehen :( habe VNC-Protokoll gefunden. Ich bin mir nicht sicher, warum meine Versuche, es an einen bestimmten Ort zu leiten, fehlschlagen. Es heißt immer, dass der inetd-Client weg ist. Aber anscheinend gibt es ein Berechtigungsproblem config file für mich und jetzt kann ich eine Verbindung herstellen, aber es stirbt immer noch, wenn ich den Client trenne. Ich denke, es gab eine Option für xinetd, die es steuert. Ich browse durch docs und werde es wahrscheinlich finden, aber erinnerst du dich noch an dein Kopf? Alex Gitelman vor 13 Jahren 0
@Alex: Was ist, wenn Sie den Benutzer in "root" ändern? Im inetd-Modus soll der Server * nach einem Verbindungsverlust die TCP-Verbindung * beenden. grawity vor 13 Jahren 0
Wenn der Server nach dem Verbindungsabbau stirbt, würde dies den Zweck von vnc für mich vereiteln. Ich arbeite zum Beispiel an meinem Laptop, schließe die Verbindung an und steige dann zum Kaffee aus. Laptop geht in den Energiesparmodus und ich verliere meine Sitzung. Ich bin mir ziemlich sicher, dass mir das bei Red Hat-Setups nicht passiert ist. Ich werde root versuchen, obwohl vnc docs eindeutig sagt, dass dies nicht getan werden sollte. Alex Gitelman vor 13 Jahren 0
@Alex: Dann verwende es nicht im inetd-Modus. Führen Sie es als Dämon aus. grawity vor 13 Jahren 0
root macht keinen Unterschied. Es ist immer noch vorhanden. Alex Gitelman vor 13 Jahren 0
Ich wollte es als Dämon benutzen. Aber zum Schluss habe ich 'wait = yes' gesetzt und es scheint mein Problem anzugehen. Hurra! Was eigentlich Sinn macht, da ich mich immer mit derselben Instanz meines Servers verbinden möchte. Alex Gitelman vor 13 Jahren 0