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

Qual è il modo corretto per eliminare una vncsession in linux?

Quando eseguo il seguente comando nel mio box linux remoto a cui mi collego dal mio portatile windows 7 via VNC ottengo quanto segue :

[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

Come posso eliminare questa sessione in modo elegante? So che kill -9 <pid> lo farebbe, ma penso che sia una pulizia energica e potrebbe portare a file corrotti.

P.S: Ho anche letto da questa fonte per usare l'opzione kill da vncserver ma non sono sicuro di come capire display#.

Risposte (2)

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

Come si è notato, dal 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.
``` ```
Display number = (Port number) ‒ 5900

Il numero del display è collegato al numero di porta del display se non si è impostato manualmente (e in modo diverso), dove

-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.
``` ```
25697 ? S 55:38 Xvnc4 :1 [...]
[...]
30481 ? S 17:57 Xvnc4 :2 [...]

ad es. porta 5901 → display :1. Questa informazione può essere trovata in man Xvnc (vncserver è solo uno script wrapper che chiama questo strumento) dove dice:

vncserver -kill :1
vncserver -kill :2
``` &001 


Se non si conosce il numero a memoria (ma è necessario saperlo se ci si connette comunque al server), si può controllare ad esempio `ps ax | grep vnc` per informazioni. Se lo faccio localmente, vedo i processi 


&001 &001 


e quindi so che rappresentano i server VNC con i numeri di visualizzazione `:1` e `:2` rispettivamente, e possono essere uccisi da 


&001 


Nel vostro caso, vedete che il numero di visualizzazione è `:1` per il server elencato nella vostra uscita `ps`.
1
1
1
2016-06-23 18:47:39 +0000

Ho provato la risposta di cui sopra e non ha funzionato per me. Mi ha dato un messaggio di errore come in questa domanda Uccidere manualmente il processo VNC

Quindi ho dovuto ucciderli manualmente. Ho provato ad uccidere -9, e poi non sono più riuscito ad accedere con rdp. Ho ricevuto xrdp_mm_process_login_response: login failed quando ho provato ad accedere.

La risposta è stata trovata qui http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html &003

Fondamentalmente, c'è un file di sessione non ripulito quando il server Xvnc viene ucciso. Il file ha un nome per il display, quindi se sei sul display :12, è /tmp/.X11-unix/X12. Cancella quel file dopo kill -9 e sei di nuovo in attività.