web-dev-qa-db-ja.com

Linuxでvncsessionを殺すための正しい方法は何ですか?

私のwindows 7ラップトップからlinux経由で接続しているリモートの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:私はまた、このソースから を読んでvncserverからのkillオプションを使用しますが、どうやってディスプレイ#を理解するかわかりません。

22
Geek

お気づきのとおり、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 Xvncvncserverはこのツールを呼び出す単なるラッパースクリプトです)にあります。

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

それで、私はそれらがディスプレイ番号:1:2でそれぞれVNCサーバーを表していることを知っています、そして

vncserver -kill :1
vncserver -kill :2

あなたの場合では、あなたはあなたのpsの出力にリストされているサーバーのディスプレイ番号が:1であることを見ます。

27

私は上記の答えを試してみました、そしてそれは私のために働きませんでした。この質問のようにエラーメッセージが表示されました。 VNCプロセスを手動で強制終了しました

だから私はそれらを手動で殺さなければなりませんでした。 kill -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の後にそのファイルを削除すると、ビジネスに戻ります。

1
Mnebuerquo