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

Qual é a forma correcta de matar uma vncsessão no linux?

Quando corro o seguinte comando na minha caixa remota linux à qual me ligo a partir do meu portátil windows 7 via VNC obtenho o seguinte :

[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

Como posso matar esta sessão elegantemente ? Eu sei que o kill -9 <pid> o faria mas penso que é uma limpeza forçada e pode levar a ficheiros corrompidos .

P.S: Também li a partir desta fonte para usar a opção kill do vncserver mas não tenho a certeza de como descobrir o display#.

Respostas (2)

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

Como notou, dos 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.

O número do visor está ligado ao número da porta do visor se não se tiver definido isso manualmente (e de forma diferente), onde

Display number = (Port number) ‒ 5900

e.g. porta 5901 → display :1. Esta informação pode ser encontrada em man Xvnc (vncserver é apenas um script que chama esta ferramenta) onde diz:

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

Se não sabe o número de cor (mas precisa de o saber se se vai ligar ao servidor de qualquer forma), pode verificar, por exemplo, ps ax | grep vnc para informação. Se eu fizer isso localmente, vejo os processos

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

e assim sei que eles representam servidores VNC com números de display :1 e :2 respectivamente, e podem ser mortos por

vncserver -kill :1
vncserver -kill :2

No seu caso, vê que o número de display é :1 para o servidor listado na sua saída ps.

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

Eu tentei a resposta acima e não funcionou para mim. Deu-me uma mensagem de erro como nesta pergunta Killing VNC Process Manually

Então eu tive que matá-los manualmente. Tentei matar -9, e depois já não conseguia entrar no sistema com a rdp. Eu consegui xrdp_mm_process_login_response: login failed quando tentei entrar.

A resposta foi encontrada aqui http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

Basicamente, existe um ficheiro de sessão que não é limpo quando o servidor Xvnc é morto. O ficheiro é nomeado para o ecrã, por isso se estiver no ecrã :12, é o /tmp/.X11-unix/X12. Elimine esse ficheiro depois do kill -9 e está de volta ao negócio.