SSH: Starten Sie GUI-Programme auf dem Remote-Bildschirm, nicht auf dem X-Display

11

Das Problem

Die meisten Benutzer möchten über ssh mit der Option "-X" eine Verbindung zu einem Server herstellen, um GUI-Programme auf dem Remote-Host über die Anzeige des Clients auszuführen. Ich möchte GUI-Programme auf dem physischen Monitor ausführen, der an den Server angeschlossen ist. Ist das möglich ? Lassen Sie mich genauer sein:

Meine Situation ist folgende: Ich habe eine Workstation ohne Tastatur oder Maus, an die jedoch ein Monitor angeschlossen ist. Ich möchte mit meinem Laptop eine SSH-Verbindung herstellen und in der Lage sein, ein grafisches Programm wie xeyes oder ssvnc zu starten und es auf dem Monitor der Workstation anzuzeigen.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Bearbeiten: zusätzliche Informationen

Ich sollte vielleicht ein paar Dinge klarer erklären:

  • Ich habe Sudo-Zugriff auf die Workstation, ich kann bei Bedarf alles installieren.
  • Auf der Workstation wird die GNOME-Benutzeroberfläche ausgeführt.
  • Bevor ich Tastatur und Maus von der Workstation trennte, loggte ich mich in eine GNOME-Sitzung ein. Man kann daher meinen GNOME-Desktop derzeit auf dem Monitor der Workstation sehen.
  • Ich möchte keine Programme von meinem Laptop auf der Workstation ausführen. Ich möchte Workstation-Programme auf der Workstation ausführen. Die xeyes oder eine andere ausführbare Datei befindet sich auf dem Remote-Server und sollte auf dem Monitor des Remote-Servers ausgeführt werden
  • Ich verstehe, dass ich dadurch in einer Situation bin, in der mein Cursor nicht mit der Schnittstelle verbunden ist. Ich kann nicht auf Dinge klicken. Das ist ok.

Jede Hilfe sehr geschätzt!

xApple
quelle
Haben Sie xhost +auf Ihrem Server ausgeführt?
Karlphillip
Ich denke, dies ist auch eine interessante Frage, zum Beispiel, wenn Sie 3 Ubuntu-PCs haben, auf denen Synergy ausgeführt wird, um dieselbe Tastatur und Maus zwischen den 3 zu verwenden. Wenn Sie sich anmelden, müssen Sie sich dreimal anmelden. Es wäre schön, ein Skript zu erstellen, das Sie bei den beiden anderen PCs anmeldet, wenn Sie sich beim Haupt-PC anmelden.
Sverre

Antworten:

5

Jede xlib-Anwendung muss eine Verbindung zu einem xserver herstellen. Sie müssen der App die Verbindung zum Server wie folgt mitteilen:

  • Einstellen der Umgebungsvariablen DISPLAY
  • Verwenden eines Befehlszeilenflags wie z -display

Der erste xserver kann normalerweise über die Verbindungszeichenfolge ': 0' erreicht werden. Versuchen Sie Folgendes:

xeyes -display :0

oder dieses

env DISPLAY=:0 xeyes
Akira
quelle
In vielen Fällen (z. B. beim Start mit GDM von GNOME) ist auch eine Einstellung XAUTHORITYerforderlich, da der X11-Server eine temporäre Xauthority-Datei verwendet.
user1686
Interessanterweise wird nach dem Festlegen der Variablen $ DISPLAY neben der Meldung "Fehler: Anzeige kann nicht geöffnet werden" jetzt die Meldung "Kein Protokoll angegeben" angezeigt, wenn versucht wird, xeyes zu starten.
xApple
@grawity Danke für den Rat. Kann ich fragen, wie ich meine XAUTHORITY einstellen soll, damit mein Befehl funktioniert?
xApple
5

Läuft auf dieser Workstation ein X Windows-Server? Ohne das ist alles strittig.

Sie benötigen ETWAS, um die Daten in Grafiken, Pixel, Farben und Orte zu verarbeiten. Ein "Monitor" ist ohne irgendeine Software nutzlos, um ihn auszuführen.

Vorausgesetzt, es ist. (aber aus dem Text klingt sicher anders)

Wenn die Hostnamen (und die entsprechende DNS-Auflösung über / etc / hosts oder DNS oder was auch immer) von 'Workstation' und 'Laptop' angegeben sind, ersetzen Sie die Hostnamen des Computers durch die entsprechenden IP-Adressen.

ssh workstation
xhost +laptop

Sie können sich dann an dieser Stelle von der Workstation abmelden, da hierdurch die Berechtigungen für den Xserver der Workstation festgelegt werden, damit 'Laptop' eine Verbindung herstellen kann.

Wenn Sie Ihre Programme mit dem entsprechenden DISPLAY env var-Satz starten, können Anwendungen auf der Workstation angezeigt werden, während sie auf Ihrem Laptop ausgeführt werden.

DISPLAY=workstation:0 xeyes

-oder-

export DISPLAY=workstation:0
xeyes

Beide Methoden funktionieren. Letzteres bewirkt, dass beim Start von dieser Shell aus alles, was mit X11 zu tun hat, auf der Workstation angezeigt wird. (hoffe das machte Sinn)

Die 'xhost'-Zeile soll dem Laptop die Erlaubnis geben, eine Verbindung zum Xserver der Workstation herzustellen. Ohne diese Option wird Ihnen die Berechtigung verweigert, es sei denn, Sie starten den X-Server ohne Berechtigungen, was nicht wirklich empfohlen wird. Der 'xhost'-Schutz ist immer noch lahm, da die Daten im Klartext zwischen Laptop und Workstation gesendet werden und abgehört werden könnten, aber es ist eine einfache Lösung.

Wenn Sie Datenschutz wünschen, müssen Sie einen verschlüsselten Tunnel zwischen Ihrem Laptop und der Workstation einrichten (Port 6000 für Anzeige: 0). Ja, an diesem Punkt wird es komisch.

Wenn Sie sich in einer kontrollierten Umgebung befinden, ist die Verwendung des Befehls 'xhost + Laptop' ausreichend. Wenn Sie den Teil 'Laptop' dieses Befehls 'xhost +' verlassen, kann sich JEDER mit dem Xserver verbinden und Dinge anzeigen.

Denken Sie daran, dass Ihre Maus NICHT mit dem Xserver der Workstation verbunden ist und Sie NICHT in der Lage sind, Fenster zu manipulieren oder auf Dinge zu klicken.

Wenn Sie möchten, dass die Maus angeschlossen wird, würde ich etwas wie x2x, synergy, vnc oder eine X Windows-basierte Bildschirmfreigabeanwendung empfehlen.

lornix
quelle
Danke für deine Antwort ! Sie haben Recht, ich muss möglicherweise einige weitere Dinge angeben: (1) Auf der Workstation wird die GNOME-Benutzeroberfläche ausgeführt. (2) Ich möchte keine Programme von meinem Laptop aus ausführen. Xeyes oder was auch immer sollte auf der Workstation mit dem Monitor der Workstation ausgeführt werden (3) Das ist in Ordnung, ich verstehe, dass mein Cursor nicht verbunden ist.
xApple
Oh, dann müssen Sie wirklich nur zur Workstation ssh, die Variable DISPLAY auf 'localhost: 0' (oder nur ': 0') setzen und Ihre App starten. Sie müssen sich noch mit Berechtigungen (xhost + localhost wahrscheinlich beste Antwort) und entweder nohup oder &! (Hintergrund und Verleugnung) oder bg / disown-Befehle aus der Shell, damit die App beim Abmelden nicht beendet wird. (es sei denn, Sie wollen das natürlich)
Lornix
Ah, vielleicht ist mein Problem nur ein Berechtigungsproblem. Wenn ich jedoch "xeyes" als root ausführe, ist die Fehlermeldung dieselbe. Wenn Sie eine Antwort posten, die die Berechtigungsprobleme löst, kann ich sie als gelöst markieren!
xApple
Ist jemand bei der X Windows-Sitzung auf der Workstation angemeldet? Ohne das ist der Code, der auf Programmverbindungen wartet, noch nicht aktiv, nur das Anmeldematerial. (Ich vereinfache stark!) Versuchen Sie, zur Workstation zu wechseln, und dann 'startx', DANN können Sie möglicherweise eine Verbindung zum Display herstellen. Eine andere Möglichkeit besteht darin, einen Bare-Bones-X-Server zu verwenden, 'X: 0 &' einzugeben, die Variable DISPLAY festzulegen und dann 'xhost + Laptop' (oder nur 'xhost +') auszuführen. Aber das wird für die meisten ein bisschen niedrig. (
Ideal
Ja, ich habe mich bei einer GNOME-Sitzung auf der Workstation angemeldet, bevor ich Tastatur und Maus getrennt habe. Trotzdem habe ich versucht, den Befehl "startx" in meiner SSH-Sitzung auszuführen. Die Fehlermeldung lautete wie folgt: "X: Benutzer, der nicht zum Ausführen des X-Servers berechtigt ist, wird abgebrochen."
xApple