Raspberry Pi 3 *umgekehrter* Remotedesktop

Raspberry Pi 3 *umgekehrter* Remotedesktop

Ich habe eine lokale Maschine (A) und Raspberry PI 3 (B).
B hat einen HDMI-Monitor angeschlossen und läuft mit Raspbian OS.

Ich möchte die Anwendung X auf A ausführen – beispielsweise eine Libre Office Impress-Präsentation, die ich auf A habe, und sie auf einem Bildschirm anzeigen (anzeigen) lassen, der mit B verbunden ist.
Ich möchte das vor der Maschine A tun:

  • nicht von ssh -X to_AB,
  • noch VNC von B verwenden, um Ausgabe von A zu erhalten

Ich bin nicht auf der Suche nach:

  • from_a $ ssh -X machine_BAusführen der X-App auf B per SSH von A und Anzeigen der Ausgabe auf A (dies kann entweder über RDP-/Remmina-/VNC-Clients erfolgen )
  • Ausführen der X-App auf B per SSH von A aus und Anzeigen der Ausgabe auf B (dies kann beispielsweise durch Exportieren der Anzeige in SSH und entsprechende Konfiguration von Xhost erfolgen from_a $ ssh machine_b from -> at_a_but_sshed_onto_b $ xhost + && export DISPLAY=:0 xeyes)
  • Lösung, die direkten physischen Zugriff auf B erfordert

Ich habe versucht, (B) so einzurichten, dass Remote-X-Elemente ausgeführt werden können ... wenn ich nichts vergessen habe - seitdem nmap -p6000 machine_Bist dieser Port zurückgegebengeschlossen, und Ausführen (von der Befehlszeile von A):

A_machine $ env DISPLAY=B_machine:0 xeyes

wobei B_machine sowohl eingesetzt wird /etc/hostsals auch ~/.ssh/configausfällt.

Was ich vermute, ist, dass ich den Schritt beim Kopieren von X11 völlig verpassemagische_keksevon .Xauthority ... aber vielleicht ist dieser Schritt nicht notwendig und es gibt einen einfacheren Weg?

Bearbeiten: als Antwort auf die Frage von @Rostislav Kandilarov – es sieht so aus, als ob Lightdm den X-Server startet, aber bald kann ich überprüfen, ob heute Montag ist und ob es mit startet --nolisten tcp.

Antwort1

(Bearbeitet, alte Antwort unten)

Mit der zusätzlichen Anforderung, dass Sie dies alles von A aus tun möchten, ohne B zu berühren, besteht das Problem beim Ausführen eines X-Servers auf B und beim Herstellen einer Verbindung mit ihm über eine Anwendung auf A darin, dass dieser X-Server nur Eingabegeräte (Tastatur, Maus) verwendet, die an B angeschlossen sind. Um Ihre Anwendung zu verwenden, müssten Sie also diese Eingabegeräte verwenden, was Sie nicht möchten.

Im Prinzip könnten Sie versuchen, die Eingabegeräte von A gemeinsam zu nutzen, aber dann wird die Konstruktion wirklich byzantinisch …

AlsoVNCIsteine Mengeeinfacher in dieser Situation.

Richten Sie einen vnc4serverauf A ein. Dieser Server fungiert auch als X-Server für Anwendungen auf A. Starten Sie einen xvnc4viewerauf A und verwenden Sie ihn zum Starten und Steuern Ihrer Anwendung. Starten Sie einen weiteren vncviewer auf B und verbinden Sie ihn mit dem Server auf A. Er zeigt die Anwendung an. Das kann so einfach sein wie directvnc(den Framebuffer des RaspPi direkt verwenden, kein zusätzlicher Umweg über X, also weniger Arbeitslast für den RaspPi) oder, wenn Sie einen vorhandenen X-Server auf B weiterlaufen lassen möchten, ein weiterer xvnc4viewer.


Am einfachsten geht das über einen Remote-Desktop wieVNC, höchstwahrscheinlich bereits als Paket in Ihrer Distribution verfügbar. Das funktioniert normalerweise viel besser als die X-Weiterleitung über SSH oder auf andere Weise, da es viel besser komprimiert ist und keine X-Primitive auf der Leitung verwendet.

Natürlich gibt es auch mehrere Möglichkeiten, X-Forwarding einzurichten, über SSH oder direkt. Sie können sich beispielsweise ssh -Xvon B aus bei A anmelden, Ihre Anwendung auf A ausführen und die Ausgabe auf B anzeigen lassen. (Sie haben die umgekehrte Richtung ausgeschlossen, aber nichts dazu gesagt, also bin ich mir nicht ganz sicher, ob Sie das möchten.)

Sie können den X-Server für eine Remote-Sitzung auch über konfigurierenXDMCP. Oder lassen Sie eine einzelne Anwendung mit den richtigen Einstellungen einen Remote-X-Server xauthverwenden DISPLAY.

Ich würde aber trotzdem empfehlen, zuerst VNC auszuprobieren.

Antwort2

Wenn Sie also das Raspbian-Betriebssystem unter (B) verwenden und keine spezifischen Anpassungen vorgenommen haben, verwenden Sie wahrscheinlich wie vermutet lightdm.

Natürlich müssen Sie lightdm anweisen, den X-Server anzuweisen, auf TCP (Port 6000) zu hören. Dies tun Sie, indem Sie xserver-allow-tcp=truein der conf-Datei im globalen Abschnitt festlegen [Seat:*]. Möglicherweise müssen Sie dies auch explizit angeben xserver-command=X -listen tcp(sieheHier). Sie haben die Wahl zwischen einer beliebigen zusätzlichen Datei in /etc/lightdm/lightdm.conf.d/*.confoder direkt in /etc/lightdm/lightdm.conf.

Wenn Sie sich nicht so sehr um die Sicherheit kümmern, müssen Sie wahrscheinlich auch (B) eine Art xhost +Befehl wie ausführen xhost + IP_OF_(A). Wenn Sie sich um LAN-Schwachstellen kümmerndu solltest nichtverwenden Sie zunächst direkt X über TCP, aber ohne SSH können Sie die Schwierigkeit etwas erhöhen, indem Sie zwischen (A) und (B) einen MIT-MAGIC-COOKIE austauschen, indem Sie ihn auf (B) ausführen xauth extract - $DISPLAY | ssh (A) xauth merge -.

Starten Sie dann lightdm neu service lightdm restartoder, systemctl restart lightdm.serviceabhängig von Ihrer Betriebssystemversion.

Zuletzt - prüfen Sie (B), ob Xorg auf 6000 lauschtnetstat -antp | grep -F 6000

verwandte Informationen