Jaki jest właściwy sposób na zabicie vncsession w systemie Linux?

23

Po uruchomieniu następującego polecenia w zdalnym urządzeniu linux, z którym łączę się z windows 7laptopa za pośrednictwem VNC, otrzymuję:

 [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

Jak mogę elegancko zabić tę sesję? Wiem, kill -9 <pid>że to zrobię, ale myślę, że jest to bardzo czyste i może prowadzić do uszkodzenia plików.

PS: Przeczytałem również z tego źródła, aby użyć opcji kill z vncserver, ale nie jestem pewien, jak wymyślić display #.

Maniak
źródło

Odpowiedzi:

28

Jak zauważyłeś, z 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.

Numer wyświetlacza jest podłączony do numeru portu wyświetlacza, jeśli nie ustawiono go ręcznie (i inaczej), gdzie

Display number = (Port number) ‒ 5900

np. port 5901 → wyświetlacz: 1. Informacje te można znaleźć w man Xvnc( vncserverjest to tylko skrypt otoki, który wywołuje to narzędzie), gdzie mówi:

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

Jeśli nie znasz numeru na pamięć (ale musisz go znać, jeśli i tak chcesz się połączyć z serwerem), możesz sprawdzić np ps ax | grep vnc. Informacje. Jeśli robię to lokalnie, widzę procesy

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

a więc wiem, że reprezentują one serwerów VNC z numerami wyświetlania :1i :2odpowiednio, i mogą być zabite przez

vncserver -kill :1
vncserver -kill :2

W twoim przypadku widać, że wyświetlany numer dotyczy :1serwera wymienionego w danych pswyjściowych.

Daniel Andersson
źródło
1

Wypróbowałem powyższą odpowiedź i to nie zadziałało. Dał mi komunikat o błędzie, jak w tym pytaniu: Zabijanie procesu VNC ręcznie

Musiałem więc ich zabić ręcznie. Próbowałem zabić -9, a potem nie mogłem się już zalogować za pomocą rdp. Dostałem, xrdp_mm_process_login_response: login failedkiedy próbowałem się zalogować.

Odpowiedź znaleziono tutaj: http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

Zasadniczo plik sesji nie jest czyszczony po zabiciu serwera Xvnc. Plik jest nazwany na wyświetlaczu, więc jeśli jesteś na wyświetlaczu: 12, to jest /tmp/.X11-unix/X12. Usuń ten plik później kill -9i wrócisz do pracy.

Mnebuerquo
źródło
Skrypt, który napisałem do automatycznego zabijania bezczynnych sesji: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo