Qual é a maneira correta de matar uma sessão vncs no linux?


25

Quando executo o seguinte comando na linuxcaixa remota à qual me conecto no meu windows 7laptop 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 com elegância? Eu sei kill -9 <pid>que faria isso, mas acho que é uma limpeza forte e pode levar a arquivos corrompidos.

PS: Eu também li nesta fonte para usar a opção kill do vncserver, mas não sei como descobrir a exibição #.

Respostas:


30

Como você notou, no 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 da tela é conectado ao número da porta da tela, se não houver uma configuração manual (e diferente), em que

Display number = (Port number) ‒ 5900

por exemplo, porta 5901 → display: 1. Esta informação pode ser encontrada em man Xvnc( vncserveré apenas um script de invólucro que chama essa 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 você não sabe o número de cor (mas precisa saber se deseja se conectar ao servidor de qualquer maneira), pode verificar, por exemplo, ps ax | grep vncinformações. Se eu fizer isso localmente, vejo os processos

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

e, portanto, sei que eles representam servidores VNC com números de exibição :1e :2respectivamente, e podem ser mortos por

vncserver -kill :1
vncserver -kill :2

No seu caso, você vê que o número de exibição é :1para o servidor listado em sua pssaída.


1

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 não consegui mais entrar com o rdp. Cheguei xrdp_mm_process_login_response: login failedquando tentei entrar .

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

Basicamente, há um arquivo de sessão não limpo quando o servidor Xvnc é morto. O arquivo é nomeado para a exibição; portanto, se você estiver na exibição: 12, é /tmp/.X11-unix/X12. Exclua esse arquivo depois kill -9e você estará de volta aos negócios.


Script que escrevi para matar automaticamente as sessões ociosas: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo:
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.