Windowsマシンでは、1台のマシンAがリモートデスクトップサービスを実行し、別のマシンB(実際にはWindowsである必要はありません)がリモートデスクトップクライアントを実行している場合、Bのユーザーはセッションの制御を「盗む」ことができます。 A、そこで開かれたアプリウィンドウを確認し、それらを操作します。 RDPでは、既存のセッションがない場合に新しいセッションを開くこともできますが、それは問題ではないことに注意してください。
私の質問:AがLinuxマシンであり、進行中のXセッションでXサーバーを実行している場合、どうすれば同じことを達成できますか。
注:
実行中のXセッションを制御するには、Xと同じディスプレイに接続するようにVNCサーバーを構成する必要があります。通常、Xは最初のディスプレイ-:0
に接続されます。
そのXセッションにはX権限も必要になります。これは、リモートのディスプレイマネージャが使用しているXAuthorityファイルにアクセスすることで見つけることができます。これはディスプレイマネージャによって異なり、ps aux
およびgrep
を使用して見つけることができます。例:psaux | grep Xorg
は、次のようなものを提供します。
/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch
VNCで必要になるため、-auth
オプションに注意してください。次に、x11vnc
をインストールした後、リモートコンピューターでroot
として次のようなものを実行する必要があります。
/usr/bin/x11vnc -norc -forever -shared -bg -autoport 5900 -auth /var/run/lightdm/root/:0
最も簡単な方法は、起動時にこれを実行するサービスを作成することです。 systemd
を使用するディストリビューションで、次のようなファイル/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 \
-autoport 5900 \
-rfbauth /etc/x11vnc.pass \
-o /var/log/x11vnc.log \
-auth /var/run/lightdm/root/:0
[Install]
WantedBy=graphical.target
-rfbauth
オプションに注意してください。事前に以下を使用してパスワードファイルを作成する必要があります。
$ Sudo x11vnc -storepasswd /etc/x11vnc.pass
または、パスワードで保護されたVNCセッションが必要ないと思われる場合は、-rfbauth
行を削除してください。
起動時に有効にする:
$ Sudo systemctl enable x11vnc.service
次のコマンドで手動で開始します。
$ Sudo systemctl start x11vnc.service
これで、VNCクライアントを使用してリモートコンピューターに接続し、セッションを引き継ぐことができます。