Linux(Debian)を実行しています。最近、コンピューターにx11VNCサーバーをインストールしました。サーバーを起動するコマンドは次のとおりです。
x11vnc -display :0
探していましたが、x11VNCサーバーを再起動およびシャットダウンする方法に関する情報は見つかりませんでした。これを行うコマンドはありますか?
systemd
を使用している場合は、サービスとして設定できるはずです。 x11vnc
をSystemdサービスとして設定する同様のタスクを示すこのスレッドを見つけました。スレッドのタイトルは次のとおりです: インデックス"初心者コーナー"起動時にsystemdを使用してx11vncを有効にする方法? 。
そのスレッドのコメントから
ファイルを作成します:/etc/systemd/system/x11vnc.service
[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service
[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg -rfbauth /etc/x11vnc.pass -allow 192.168.1. -autoport 5900 -o /var/log/x11vnc.log
ファイルを作成します:/etc/systemd/system/graphical.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
Wants=x11vnc.service
AllowIsolate=yes
[Install]
Alias=default.target
Systemdサービスを有効にする
$ Sudo systemctl enable graphical.target
これにより、次のようなリンクが作成されます。
/etc/systemd/system/default.target-> /etc/systemd/system/graphical.target
リブート
サーバーの起動方法を知っているので、サーバーを正常に停止する方法を次に示します。
x11vnc -R stop
基本的には、リモートコマンドを送信します( -remote
)を実行中のインスタンスに追加します。
私のために働くこのための解決策は:
$ x11vnc -clear-all
試してください:
killall x11vnc && /usr/bin/x11vnc -rfbport 5900 -bg -vncconnect -xvnc -forever
パーソナライズされたオプションを追加します。
[〜#〜] tldr [〜#〜]:ニースの「ワンショットではない」タイプのサービスを使用して、ここで必要なものを取得します。
あなたが何かをしたい場合のために、私は正しい答えを見つける前にそれをしました。設定が間違っていたため、ときどき動作しました。 -bgや、実行後すぐに終了するその他のスクリプトを使用する場合は、それが必要になります。それ以外の場合は、最初のリンクに固執してx11vncサービスを適切に実行します。私はそれを使い終わった、完璧に動作します。
推奨:以下のすべてのもので遊ぶだけです
まず、「停止」アクションを機能させるには、サービスType=oneshot
をRemainAfterExit=yes
とともに使用する必要があります。私は私の仕事ができるようになるまで苦労してきました。
vncserver -kill :1
と同様に「display」でx11vncサーバーを停止するには(vncはデフォルトの590xポートを使用するため、ここでは:5901を意味します)、例lsof
でpidを取得する必要があります。その後、それを優雅に、またはそれを使わずに、-9オプションまたはその他のオプションを選択します。
常にサービス(そして同じrfbport)をサービスで使用する場合、リスニングポートはすでにわかっているため、次のようになります。
ExecStop=/bin/bash -c "/bin/kill -9 `lsof -i:5901 -t`"
これらのパラメータはバイナリのみを受け入れ、パイプを許可しないため、bash -c "command"
内にすべてをラップする必要があります
鉱山は https://Gist.github.com/erm3nda/37e5720b4197a7a16c564418d377aac のように見え、起動時には機能しませんが、手動で再起動または開始すると機能します。
Startを再度実行してもサーバーは強制終了されませんが、再起動は実行されます。
異なるポートで複数のx11serversを実行する場合は、サービス名に@を追加してから、必要な数で呼び出し、%iを引数として使用するようにスクリプトを変更する必要があります。
X11vnc @ NUMBERを使用してサービスを開始します。
サービスファイル名:x11vnc @ .serviceポート5901で有効にします:Sudo systemctl enable x11vnc@1
Service ExecStartの例:/ usr/bin/x11vnc -forever -shared -bg -rfbport 590%i -display:0 -geometry 800x600 -rfbauth/etc /x11vnc.pass -listen 127.0.0 $ Service ExecStopの例:/ bin/sh -c "/ bin/kill -9 lsof -i:590%i -t
"開始:Sudo service x11vnc@1 start
ポート5901で実行
鉱山は https://Gist.github.com/erm3nda/fa0bfb8f3737dc6398889adb50fdc84b のように見え、起動時に機能しませんが、再起動するか手動で開始すると機能します。