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

Как правильно убить vncsession в linux?

Когда я запускаю следующую команду в моем удаленном ящике linux, к которому я подключаюсь с моего ноутбука windows 7 через VNC, я получаю следующее:

[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

Как я могу убить эту сессию элегантно ? Я знаю, что kill -9 <pid> сделает это, но я думаю, что это принудительная чистка и может привести к повреждению файлов .

P.S.: Я также прочитал из этого источника , чтобы использовать опцию kill от vncserver, но не знаю, как разобраться с отображением#.

Ответы (2)

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

Как вы заметили, с 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

, например, порт 5901 → дисплей :1. Эту информацию можно найти в man Xvnc (vncserver - это просто оберточный скрипт, который вызывает этот инструмент), где сказано:

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

Если вы не знаете номер наизусть (но вам нужно знать его, если вы все равно собираетесь подключаться к серверу), вы можете проверить, например, ps ax | grep vnc на предмет информации. Если я сделаю это локально, я увижу процессы

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

и, таким образом, я знаю, что они представляют VNC серверы с номерами дисплея :1 и :2 соответственно, и могут быть убиты с помощью

vncserver -kill :1
vncserver -kill :2

В вашем случае, вы видите, что номер дисплея - :1 для сервера, указанного в вашем выводе ps.

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

Я попробовал ответ выше, и он не сработал на меня. Он выдал мне сообщение об ошибке, как в этом вопросе Убийство VNC процесса вручную

Так что мне пришлось убить их вручную. Я попытался убить -9, а потом не смог войти в систему с помощью rdp. Я получил xrdp_mm_process_login_response: login failed, когда пытался войти.

Ответ был найден здесь http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

В основном, есть файл сеанса, который не был очищен, когда сервер Xvnc был убит. Файл назван для отображения, так что если вы находитесь на экране :12, то это /tmp/.X11-unix/X12. Удалите этот файл после kill -9, и вы снова в деле.