答え1
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 経由で非常にうまく動作し、クライアントは実行にルート権限さえ必要としません。
答え2
目標は、ユーザーがログインしているかどうかに関係なく、選択した画像やプログラムを約 30 台の Linux デスクトップに配布し、コンテンツはユーザーが閲覧しているものよりも優先され (PSA など)、ユーザーの実際のデスクトップ タスクは妨げられないようにすることでした。さらに、ユーザーにコンテンツを変更する権限を与えてはなりません。X と TCP ブロードキャストを使用した基本的なソリューションを期待していました。これは実現せず、代わりに他の人の推奨に従って VNC を使用しました。
クライアント側では、空の Xsession (例X :1
) を開始し、その仮想端末に切り替えて (chvt 1
必要な場合)、vncserver に接続する expect スクリプトを設定しました。
つまり:
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 スクリプトを使用して、すべての Xsessions を閉じました [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