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

18

Quand j'exécute la commande suivante dans ma télécommande linux boîte que je connecte à partir de mon windows 7 ordinateur portable via VNC Je reçois 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 connais kill -9 <pid> le ferait, mais je pense que c'est un nettoyage puissant et pourrait conduire à des fichiers corrompus.

P.S: J'ai aussi lu de cette source d’utiliser l’option kill de vncserver mais vous ne savez pas comment comprendre display #.

Geek
la source

Réponses:

25

Comme vous l'avez remarqué, de la 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 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 des 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 ps sortie.

Daniel Andersson
la source
1

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 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 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. Supprimer ce fichier après kill -9 et vous êtes de retour dans les affaires.

Mnebuerquo
la source
Script que j'ai écrit pour tuer automatiquement les sessions inactives: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo