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

Wat is de juiste manier om een vncsessie in linux te doden?

Als ik het volgende commando uitvoer in mijn remote linux box waarmee ik verbinding maak vanaf mijn windows 7 laptop via VNC krijg ik het volgende :

[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

Hoe kan ik deze sessie op een elegante manier doden? Ik weet dat kill -9 <pid> het zou doen maar ik denk dat dit een krachtige schoonmaakbeurt is en kan leiden tot corrupte bestanden .

P.S: Ik lees ook van deze bron om de kill optie van vncserver te gebruiken maar weet niet zeker hoe ik display# moet uitzoeken.

Antwoorden (2)

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

Zoals u gemerkt heeft, is vanaf de 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.

het display nummer verbonden met het poortnummer van het display als men dat niet handmatig (en anders) heeft ingesteld, waarbij

Display number = (Port number) ‒ 5900

bijv. poort 5901 → display :1. Deze informatie is te vinden in man Xvnc (vncserver is slechts een wrapperscript dat deze tool aanroept) waar staat:

-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.

Als je het nummer niet uit je hoofd kent (maar je moet het wel weten als je toch verbinding gaat maken met de server), kun je bijv. ps ax | grep vnc controleren voor informatie. Als ik dat lokaal doe, zie ik de processen

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

en weet ik dus dat ze de VNC-servers met display-nummers :1 respectievelijk :2 vertegenwoordigen, en kunnen worden gedood door

vncserver -kill :1
vncserver -kill :2

In jouw geval zie je dat het display-nummer :1 is voor de server die in jouw ps-uitgang staat vermeld.

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

Ik probeerde het antwoord hierboven en het werkte niet voor mij. Het gaf me een foutmelding zoals in deze vraag Killing VNC Process Manually

Dus ik moest ze handmatig doden. Ik probeerde -9 te doden, en toen kon ik niet meer inloggen met rdp. Ik kreeg xrdp_mm_process_login_response: login failed toen ik probeerde in te loggen.

Het antwoord werd hier gevonden http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

In principe is er een sessiebestand niet opgeschoond als de Xvnc server wordt gedood. Het bestand is vernoemd naar het scherm, dus als je in beeld bent :12, is het /tmp/.X11-unix/X12. Verwijder dat bestand na kill -9 en je bent weer terug in bedrijf.