web-dev-qa-db-fra.com

Quelle est la bonne façon de tuer une vncsession sous Linux?

Lorsque j'exécute la commande suivante dans ma boîte linux distante à laquelle je me connecte à partir de mon ordinateur portable windows 7 via VNC, je reçois le résultat suivant:

 [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

Comment puis-je tuer cette session avec élégance? Je sais que kill -9 <pid> le ferait, mais j'estime qu'il s'agit d'un nettoyage forcé susceptible de conduire à des fichiers corrompus.

P.S: Je lis aussi depuis cette source pour utiliser l’option kill de vncserver mais je ne sais pas comment comprendre display #.

22
Geek

Comme vous l'avez remarqué, à partir du 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.

Le numéro d’affichage est connecté au numéro de port de l’affichage s’il n’a pas été défini manuellement (et différemment), où

Display number = (Port number) ‒ 5900

par exemple. port 5901 → affichage: 1. Cette information peut être trouvée dans man Xvnc (vncserver est juste un script de wrapper qui appelle cet outil) où il est écrit:

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

Si vous ne connaissez pas le numéro par cœur (mais vous devez le savoir si vous souhaitez quand même vous connecter au serveur), vous pouvez vérifier par exemple ps ax | grep vnc pour information. Si je le fais localement, je vois les processus

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

et donc je sais qu’ils représentent des serveurs VNC avec les numéros d’affichage :1 et :2 respectivement, et peuvent être tués par

vncserver -kill :1
vncserver -kill :2

Dans votre cas, vous voyez que le numéro d'affichage est :1 pour le serveur répertorié dans votre sortie ps.

27
Daniel Andersson

J'ai essayé la réponse ci-dessus et cela n'a pas fonctionné pour moi. Cela m'a donné un message d'erreur comme dans cette question: Tuer le processus VNC manuellement

J'ai donc dû les tuer manuellement. J'ai essayé de tuer -9, et ensuite je ne pouvais plus me connecter avec RDP. J'ai eu xrdp_mm_process_login_response: login failed lorsque j'ai essayé de me connecter.

La réponse a été trouvée ici: http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

En gros, il existe un fichier de session non nettoyé lorsque le serveur Xvnc est tué. Le fichier est nommé pour l'affichage, donc si vous êtes sur l'affichage: 12, c'est /tmp/.X11-unix/X12. Supprimez ce fichier après kill -9 et vous êtes de retour dans les affaires.

1
Mnebuerquo