Windowsコンピュータでは、あるコンピュータAがリモートデスクトップサービスを実行し、別のコンピュータB(実際にはWindowsである必要はありません)がリモートデスクトップクライアントを実行している場合、BのユーザーはAへのアクセスを「盗む」ことで次のことを見ることができます。あります。そこに開いているアプリケーションウィンドウは何であり、対話できます。 RDPを使用すると、既存のセッションがない場合は新しいセッションを開くことができますが、これは問題ではありません。
私の質問:AがXサーバーを実行していてXセッションが進行中のLinuxシステムである場合、どのように同じ効果を得ることができますか?
メモ:
- ソリューションはMSRDP自体に基づいている必要はなく、NX、VNC、または必要な他のソリューションでもかまいません。
- ルートを含むAとBにソフトウェアをインストールしようとしています。
- 商業的な解決策も関係していますが、私はそのような解決策に頼りたくありません。
- 回避策には、Aで別のポート(SSH用のポート22以外)を開くことも含まれます。
- ディストリビューションが Debian ベースであり、かなり新しいディストリビューションであると仮定します。
- この質問は次のようになります。これしかし、次の理由で同じではありません。 1. Xと2以外のサービスを実行する意向があります。この質問では、OPは特定のウィンドウを取得することに興味があるようですが、私には全体を見ることが重要です。
- AとBの両方のユーザーが同じセッションと対話できるソリューションも適しています。
答え1
実行中のXセッションを制御するには、Xと同じモニタに接続するようにVNCサーバーを設定する必要があります。通常、Xは最初のモニターに接続されます:0
。
X セッションに対する X 権限も必要です。これは、リモートディスプレイマネージャが使用するX Authorityファイルにアクセスして見つけることができます。使用しps aux
て見つけることができるディスプレイマネージャによって異なりますgrep
。たとえば、psaux | grep Xorg
次の内容を提供します。
/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch
-auth
このオプションを使用するにはVNCが必要ですので記録してください。root
インストール後、リモートシステムで次のコマンドを実行する必要がありますx11vnc
。
/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クライアントを使用してリモートコンピュータに接続し、セッションを引き継ぐことができます。