web-dev-qa-db-ja.com

X11転送:多くのクライアントで同時にデスクトップを共有する方法は?

デスクトップビュー(または1つのプログラムからのビュー)を他の複数のマシン(ルートアクセスを指定)に同時に共有するにはどうすればよいですか?同様の質問(例: ここここ )を見たことがありますが、1対多を同時に行う方法がわかりません。

2
d-cubed

VNCを使用できます。次のQ&Aを参照してください: https://softwarerecs.stackexchange.com/questions/20417/same-content-on-several-different-computers-monitors-administered-remotely/20419#20419 =。

VNCサーバーは、「読み取り専用」モード(つまり、クライアントがキーブースドまたはマウスを介してサーバーを制御できない)または「読み取り/書き込み」モード(クライアントがキーボードまたはマウスを介してサーバーを制御できる)で複数のクライアントによって共有できます。ただし、複数のクライアントが同時に書き込み制御を行うと、相互に干渉する可能性があるため、注意が必要になる場合があります。

最近のLinuxディストリビューションでは、X11サーバー自体にVNCサポートが組み込まれていますが、有効にする必要がある場合があります(手順については、特定のディストリビューションのドキュメントを確認してください)。または、マシンで実行されている「メイン」X11サーバーから完全に独立して、サーバーを手動で起動することもできます。手動で起動すると、VNCサーバーは、異なるパスワードを使用して「読み取り専用」クライアントと「読み取り/書き込み」クライアントの両方を同時にサポートできます(組み込みのX11サーバーサポートがそれをサポートするかどうかはわかりません)。

VNCはSSH上で素晴らしく機能し、クライアントは実行のためにroot権限さえ必要としません。

1
Dan Cornilescu

目標は、ユーザーがログインしているかどうかに関係なく、選択した画像/プログラムを最大30のLinuxデスクトップに配布することでした。コンテンツは、ユーザーが表示しているものよりも優先され(PSAを考えてください)、ユーザーの実際のデスクトップタスクは邪魔されないようにする必要があります。さらに、ユーザーにコンテンツを変更する機能を与えてはなりません。 XとTCPブロードキャストを使用した基本的なソリューションを望んでいました。それは進化せず、他の人が推奨するようにVNCを使用しました。

クライアント側で、空白のXsessionを開始するexpectスクリプトを設定しました(例:X :1)、その仮想端末に切り替えます(つまり、chvt 1必要に応じて)、vncserverに接続します。

すなわち:

for num in $(seq 0 30); do expect -f xremote$num.exp; done

ここで、各xremoteスクリプトはリモートホストを指定します。

set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "X :1 & \r"
expect "#"
send "export DISPLAY=:1 \r"
expect "#"
send "vncviewer -passwd /root/.vnc/passwd -Shared -ViewOnly -FullScreen 192.168.1.1:1& \r"
expect "#"
send "exit\r"
expect eof
exit 0

サーバーは次の後にコンテンツを1でディッシュします。

vncserver :1 -geometry 1024x768 -depth 16

その後、クライアントのXsessionsを閉じるのが少し難しくなりました。そこで、次のexpectスクリプトを使用して、すべてのXsessionを終了しました[Xは0に自動的に再起動します]:

set timeout -1
spawn ssh -o ConnectTimeout=10 root@somehost1
match_max 100000
expect "#"
send "pkill X   \r"
expect "#"
send "chvt 1 \r"
expect "#"
send "rm /tmp/.X*lock \r"
send "exit\r"
expect eof
exit 0
0
d-cubed