X11-Weiterleitung: Wie kann der Desktop auf mehreren Clients gleichzeitig freigegeben werden?

X11-Weiterleitung: Wie kann der Desktop auf mehreren Clients gleichzeitig freigegeben werden?

Wie kann ich die Desktop-Ansicht (oder die Ansicht eines Programms) gleichzeitig für mehrere andere Computer freigeben (mit Root-Zugriff)? Ich habe ähnliche Fragen gesehen (z. B.HierUndHier), aber ich bin nicht sicher, wie das mit „eins zu viele gleichzeitig“ funktionieren soll.

Antwort1

Sie könnten VNC verwenden, siehe diese Fragen und Antworten:https://softwarerecs.stackexchange.com/questions/20417/same-content-on-several-different-computers-monitors-administered-remotely/20419#20419.

Ein VNC-Server kann von mehreren Clients im „Nur-Lese“-Modus (d. h. Clients können den Server nicht über Tastatur oder Maus steuern) oder im „Lese-/Schreib“-Modus (Clients können die Steuerung über den Server über Tastatur oder Maus übernehmen, es kann jedoch schwierig werden, wenn mehrere Clients gleichzeitig Schreibzugriff haben, da sie sich gegenseitig stören können) gemeinsam genutzt werden.

Die meisten aktuellen Linux-Distributionen haben die VNC-Unterstützung in den X11-Server selbst integriert, aber sie muss möglicherweise aktiviert werden (Anweisungen finden Sie in der Dokumentation Ihrer spezifischen Distribution). Alternativ können Sie einen Server manuell starten, völlig unabhängig vom „Haupt“-X11-Server, der auf dem Computer läuft. Beim manuellen Start kann ein VNC-Server gleichzeitig sowohl „schreibgeschützte“ als auch „Lese-/Schreib“-Clients mit unterschiedlichen Passwörtern unterstützen (ich bin nicht sicher, ob die integrierte X11-Serverunterstützung dies tut).

VNC funktioniert wunderbar über SSH und Clients benötigen für die Ausführung nicht einmal Root-Berechtigungen.

Antwort2

Das Ziel war, das ausgewählte Bild/Programm auf ca. 30 Linux-Desktops zu verteilen, unabhängig davon, ob ein Benutzer angemeldet war oder nicht. Der Inhalt sollte das ersetzen, was der Benutzer gerade ansah (denken Sie an PSA) und die eigentlichen Desktop-Aufgaben des Benutzers sollten ungestört bleiben. Darüber hinaus sollte der Benutzer nicht die Möglichkeit haben, den Inhalt zu ändern. Ich hatte auf eine einfache Lösung mit X- und TCP-Broadcasts gehofft. Daraus hat sich nichts entwickelt, stattdessen habe ich VNC verwendet, wie von anderen empfohlen.

Auf der Clientseite habe ich ein Expect-Skript eingerichtet, um eine leere Xsession (z. B. X :1) zu starten, zu diesem virtuellen Terminal zu wechseln (d. h. chvt 1bei Bedarf) und eine Verbindung zum VNC-Server herzustellen.

Nämlich:

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

wobei jedes xremote-Skript den Remote-Host angibt:

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

und der Server liefert den Inhalt um :1 nach:

vncserver :1 -geometry 1024x768 -depth 16

Danach wurde es etwas knifflig, die Xsessions auf den Clients zu schließen. Daher habe ich das folgende Expect-Skript verwendet, um alle Xsessions zu schließen [X startet automatisch bei :0 neu]:

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

verwandte Informationen