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

¿Cuál es la forma correcta de matar una sesión de VNC en Linux?

Cuando ejecuto el siguiente comando en mi caja remota linux a la que me conecto desde mi portátil windows 7 a través de 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 de forma elegante? Sé que kill -9 <pid> lo haría, pero creo que es una limpieza enérgica y podría conducir a archivos corruptos.

P.S: También leí de esta fuente para usar la opción de matar desde el vncserver pero no estoy seguro de cómo averiguar el display#.

Respuestas (2)

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

Como has notado, desde el 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 la pantalla está conectado al número de puerto de la pantalla si uno no lo ha configurado manualmente (y de forma diferente), donde

Display number = (Port number) ‒ 5900

por ejemplo puerto 5901 → pantalla :1. Esta información se puede encontrar en man Xvnc (vncserver es sólo un script de envoltura 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 sabes el número de memoria (pero necesitas saberlo si vas a conectarte al servidor de todos modos), puedes comprobar por ejemplo ps ax | grep vnc para obtener información. Si lo hago localmente, veo los procesos

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

y así sé que representan servidores VNC con los números de pantalla :1 y :2 respectivamente, y pueden ser matados por

vncserver -kill :1
vncserver -kill :2

En tu caso, ves que el número de pantalla es :1 para el servidor listado en tu salida ps.

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

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

Así que tuve que matarlos manualmente. Intenté matar a -9, y luego no pude entrar más con rdp. Obtuve xrdp_mm_process_login_response: login failed cuando intenté entrar.

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 tiene el nombre de la pantalla, así que si estás en la pantalla :12, es /tmp/.X11-unix/X12. Borra ese archivo después de kill -9 y estarás de vuelta en el negocio.