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

Quelle est la bonne façon de tuer une vncsession dans linux ?

Lorsque j'exécute la commande suivante dans ma boîte linux à distance à laquelle je me connecte depuis mon ordinateur portable windows 7 via VNC, j'obtiens ce qui suit :

[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 je pense que c'est un nettoyage en force et que cela pourrait conduire à des fichiers corrompus .

P.S : J'ai aussi lu from this source pour utiliser l'option kill de vncserver mais je ne sais pas trop comment comprendre display#.

Réponses (2)

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

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 lié au numéro de port de l'écran si on ne l'a pas réglé manuellement (et différemment), où

Display number = (Port number) ‒ 5900

par exemple le port 5901 → display :1. Cette information peut être trouvée dans man Xvnc (vncserver est juste un script 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 coeur (mais vous devez le connaître si vous allez vous connecter au serveur de toute façon), vous pouvez vérifier par exemple ps ax | grep vnc pour information. Si je fais cela localement, je vois les processus

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

et je sais donc 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 indiqué dans votre sortie ps.

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

J'ai essayé la réponse ci-dessus et ça n'a pas marché pour moi. J'ai reçu un message d'erreur comme dans cette question Killing VNC Process Manually

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 quand 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 y a un fichier de session qui n'est pas nettoyé quand 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 en activité.