2013-02-11 05:50:52 +0000 2013-02-11 05:50:52 +0000
25
25

Was ist der korrekte Weg, eine vncsession unter Linux abzubrechen?

Wenn ich den folgenden Befehl in meiner linux Remote-Box ausführe, mit der ich mich von meinem windows 7 Laptop aus über VNC verbinde, erhalte ich folgendes :

[subhrcho@slc04lyo ~]$ ps -ef|grep vnc
subhrcho 20113 19804 0 21:40 pts/8 00:00:00 grep vnc
subhrcho 27486 1 0 Jan28 ? 00:05:35 Xvnc :1 -desktop slc04lyo:1 (subhrcho) -httpd /usr/share/vnc/classes -auth /home/subhrcho/.Xauthority -geometry 1680x1050 -depth 16 -rfbwait 30000 -rfbauth /home/subhrcho/.vnc/passwd -rfbport 5901 -pn
subhrcho 27493 1 0 Jan28 ? 00:00:00 vncconfig -iconic

Wie kann ich diese Sitzung elegant beenden ? Ich weiß, dass kill -9 <pid> es tun würde, aber ich denke, das ist eine gewaltsame Säuberung und könnte zu beschädigten Dateien führen.

P.S.: Ich habe auch gelesen aus dieser Quelle , um die Kill-Option von vncserver zu verwenden, aber ich bin mir nicht sicher, wie man Display# herausfinden kann.

Antworten (2)

30
30
30
2013-02-11 07:00:49 +0000

Wie Sie bemerkt haben, ist von der man vncserver:

-kill :display#
          This kills a VNC desktop previously started with vncserver. It does
          this by killing the Xvnc process, whose process ID is stored in the
          file "$HOME/.vnc/host:display#.pid". It actually ignores anything
          preceding a ":" in its argument. This can be useful so you can write
          "vncserver -kill $DISPLAY", for example at the end of your xstartup
          file after a particular application exits.

die Display-Nummer mit der Port-Nummer des Displays verbunden, wenn man das nicht manuell (und anders) eingestellt hat, wobei

Display number = (Port number) ‒ 5900

z.B. Port 5901 → display :1. Diese Information kann in man Xvnc gefunden werden (vncserver ist nur ein Wrapper-Skript, das dieses Tool aufruft), wo es sagt:

-rfbport port
          Specifies the TCP port on which Xvnc listens for connections from
          viewers (the protocol used in VNC is called RFB - "remote
          framebuffer"). The default is 5900 plus the display number.

Wenn Sie die Nummer nicht auswendig kennen (aber Sie müssen sie wissen, wenn Sie sich trotzdem mit dem Server verbinden wollen), können Sie z.B. ps ax | grep vnc nach Informationen suchen. Wenn ich das lokal mache, sehe ich die Prozesse

25697 ? S 55:38 Xvnc4 :1 [...]
[...]
30481 ? S 17:57 Xvnc4 :2 [...]

und weiß daher, dass sie VNC-Server mit den Anzeigenummern :1 bzw. :2 darstellen und durch

vncserver -kill :1
vncserver -kill :2

beendet werden können.

1
1
1
2016-06-23 18:47:39 +0000

Ich habe es mit der obigen Antwort versucht, und sie hat bei mir nicht funktioniert. Es gab mir eine Fehlermeldung wie in dieser Frage Killing VNC Process Manually

Also musste ich sie manuell töten. Ich versuchte kill -9, und dann konnte ich mich nicht mehr mit rdp einloggen. Ich erhielt xrdp_mm_process_login_response: login failed, als ich versuchte, mich anzumelden.

Die Antwort fand sich hier http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

Im Grunde genommen gibt es eine Sitzungsdatei, die nicht bereinigt wird, wenn der Xvnc-Server beendet wird. Die Datei ist nach der Anzeige benannt, wenn Sie also auf der Anzeige :12 sind, lautet sie /tmp/.X11-unix/X12. Löschen Sie diese Datei nach kill -9, und Sie sind wieder im Geschäft.