¿Cuál es la forma correcta de matar una vncsession en Linux?

25

Cuando ejecuto el siguiente comando en mi linuxcaja remota a la que me conecto desde mi windows 7computadora portátil VNC, obtengo lo siguiente:

 [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

¿Cómo puedo matar esta sesión con elegancia? Sé que kill -9 <pid>lo haría, pero creo que es una limpieza contundente y podría conducir a archivos corruptos.

PD: también leí de esta fuente para usar la opción de matar de vncserver pero no estoy seguro de cómo descubrir la pantalla #.

Friki
fuente

Respuestas:

30

Como notaron, 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.

El número de pantalla está conectado al número de puerto de la pantalla si no se ha configurado manualmente (y de manera diferente), donde

Display number = (Port number) ‒ 5900

Ejemplo: puerto 5901 → pantalla: 1. Esta información se puede encontrar en man Xvnc( vncserveres solo un script de contenedor que llama a esta herramienta) donde dice:

   -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 no sabe el número de memoria (pero necesita saberlo si se va a conectar al servidor de todos modos), puede consultar, por ejemplo, ps ax | grep vncpara obtener información. Si hago eso localmente, veo los procesos

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

y por lo tanto sé que representan servidores VNC con números de pantalla :1y :2respectivamente, y pueden ser eliminados por

vncserver -kill :1
vncserver -kill :2

En su caso, verá que el número de pantalla es :1para el servidor que figura en su pssalida.

Daniel Andersson
fuente
1

Intenté la respuesta anterior y no funcionó para mí. Me dio un mensaje de error como en esta pregunta: matar manualmente el proceso de VNC

Así que tuve que matarlos manualmente. Intenté matar -9, y luego ya no pude iniciar sesión con rdp. tengoxrdp_mm_process_login_response: login failed cuando intenté iniciar sesión.

La respuesta se encontró aquí: http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

Básicamente, hay un archivo de sesión que no se limpia cuando se mata el servidor Xvnc. El archivo lleva el nombre de la pantalla, por lo que si está en la pantalla: 12, es /tmp/.X11-unix/X12. Elimine ese archivo después kill -9y volverá al negocio.

Mnebuerquo
fuente
Script que escribí para las sesiones inactivas de eliminación automática: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo