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

Jaki jest prawidłowy sposób na zabicie vncsesji w linuksie?

Kiedy uruchamiam następującą komendę w moim zdalnym linux boxie, do którego łączę się z mojego windows 7 laptopa przez VNC otrzymuję następujące informacje :

[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ę zabić tę sesję elegancko? Wiem, że kill -9 <pid> zrobiłby to, ale myślę, że to jest mocne oczyszczenie i może prowadzić do uszkodzenia plików .

P.S: Przeczytałem też z tego źródła aby użyć opcji kill z vncservera, ale nie jestem pewien jak wymyślić wyświetlacz#.

Odpowiedzi (2)

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

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 połączony z numerem portu wyświetlacza, jeśli nie ustawiono go ręcznie (i inaczej), gdzie

Display number = (Port number) ‒ 5900

np. port 5901 → wyświetlacz :1. Informacja ta znajduje się w man Xvnc (vncserver to tylko skrypt wywołujący to narzędzie), gdzie jest napisane:

-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 i tak musisz go znać, jeśli masz zamiar połączyć się z serwerem), możesz sprawdzić np. ps ax | grep vnc. Jeśli robię to lokalnie, widzę procesy

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

i stąd wiem, że reprezentują one serwery VNC o numerach wyświetlacza odpowiednio :1 i :2, i mogą zostać zabite przez

vncserver -kill :1
vncserver -kill :2

W twoim przypadku, widzisz, że numerem wyświetlacza jest :1 dla serwera wymienionego w twoim wyjściu ps.

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

Próbowałem odpowiedzieć na powyższe pytanie i nie udało mi się. Dało mi to komunikat o błędzie, jak w tym pytaniu Zabijanie VNC ręcznie

Więc musiałem je zabić ręcznie. Próbowałem zabić -9, a potem nie mogłem się już zalogować z rdp. Dostałem xrdp_mm_process_login_response: login failed kiedy próbowałem się zalogować.

Odpowiedź została znaleziona tutaj http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

W zasadzie jest to plik sesyjny, który nie został wyczyszczony kiedy serwer Xvnc został zabity. Plik jest nazwany dla wyświetlania, więc jeśli jesteś na wyświetlaczu :12, to jest to /tmp/.X11-unix/X12. Usuń ten plik po kill -9 i wracasz do pracy.