So wählen Sie den DISPLAY-Port, wenn Sie X über SSH weiterleiten

2660
Aaron

Dies ist keine Frage, wie X durch ssh weitergeleitet werden soll oder wie DISPLAY so eingestellt wird, dass das weitergeleitete X funktioniert. Das ist eine andere Frage - wenn Sie hier auf der Suche nach einer Antwort sind, gehen Sie noch einen Schritt weiter, denn 99% der X DISPLAY-Fragen, die Sie finden, sind dafür.

Meine Frage ist speziell, wie Sie den DISPLAY-Port auswählen . Das heißt, wenn ich ssh -X ...mit dann DISPLAY überprüfen echo $DISPLAY, könnte ich sehen localhost:10.0oder localhost:12.0oder etwas ähnliches. Es ist nicht immer jedes Mal dasselbe wie im vorherigen Beispiel, wo es eine 10 einmal und eine 12 ein anderes Mal enthält. Wie wähle ich aus, was das sein wird, anstatt jedes Mal halb zufällig sein zu lassen? Ich möchte es zwingen, immer 10.0 oder immer 12.0 oder was auch immer zu wählen, solange es konsistent ist.

Eine Lösung hierfür funktioniert vorzugsweise immer noch für mehrere Displays. Ich habe oft 2 oder 3 X-Server-Anzeigen - dh: localhost: 10.0, localhost: 10.1, localhost: 10.2 -, mit dem eine ssh Xerfolgreiche Verbindung hergestellt und eingerichtet wird. Es kann jedoch wiederum 10.0, 10.1, 10.2 oder 12.0, 12.1, 12.2 verwendet werden. Was immer es ist, ich brauche es, um konsequent zu sein.

Mein spezieller Anwendungsfall: Ich verwende bei der Arbeit Software, die wissen muss, wo sie nach den Displays suchen müssen. Jedes Mal, wenn ssh einen anderen Wert für DISPLAY verwendet, muss ich in die Konfigurationsdateien für die Software gehen und alle Einträge manuell ändern. Es ist ein Schmerz, und es sollte wirklich eine Sache des Vergessens sein - daher meine Frage.

Ich denke, diese Wahl wird von ssh auf der Seite des ssh-Servers (X-Client) getroffen. Ich glaube nicht, dass der X-Server weiß oder sich darum kümmert, dass der X-Client ihn lokal als "10.0" oder was auch immer verwendet, betrachtet. Bitte korrigieren Sie mich, wenn ich falsch liege, da ich nicht sicher bin.

Ich sehe keine Option für ssh, um diesen Wert zu wählen.

Vorzugsweise sollten keine erhöhten Berechtigungen (root / admin) benötigt werden. Ich verstehe nicht, warum sie dafür wären, aber ich sage das nur im Vorfeld. Wenn Sie eine Antwort haben, für die root erforderlich ist, ist dies besser als keine Antwort, und ich kann sie möglicherweise verwenden.

0

1 Antwort auf die Frage

1
eggo

Ich glaube, das Problem, dem Sie begegnen, ist, dass der SSH-Server nicht garantieren kann, dass ein anderer Benutzer eine bestimmte Displaynummer (und einen Port) nicht bereits verwendet hat (lokal oder remote), daher muss er eine offene auswählen. Ich weiß es nicht genau, aber ich gehe davon aus, dass es versucht, sie nacheinander zu öffnen, und stoppt beim ersten, das geöffnet wird. Alle offenen Display-Ports (einschließlich einiger, die nicht durch einen alten Prozess geschlossen wurden) können den von Ihnen gewünschten Port unbegrenzt offen halten.

Obwohl dies keine Garantie darstellt, können Sie versuchen, einen anderen Wert für X11DisplayOffsetdie Server einzustellen sshd_config. Das hält noch nicht einen anderen Benutzer oder gar einen Schurkenprozess an, der das erste verfügbare X-Display / den ersten Port offen hält.

Alternativ können Sie versuchen, die DISPLAYVariable manuell (auf der Serverseite) auf eine "ungewöhnliche" oder hohe Portnummer einzustellen, in der Hoffnung, dass Sie die normalerweise verwendeten Ports mit niedrigerer Nummer vermeiden können. zB wählen DISPLAY=:76, was bedeutet, dass die Port müssen Sie dann nach vorn Port 6076 zurück zu Ihrem lokalen X - Server; Falls Sie nicht wussten, ist der TCP-Port X 6000 + DISPLAY-Nummer (VNC-Server verwenden normalerweise 5900 + DISPLAY, IIRC). Sie können diese manuelle Weiterleitung für Ihr SSH-Aufruf folgendermaßen durchführen:

ssh -R6076:localhost:6000 server 

Dadurch wird Port 6076 am entfernten Ende (Server) an Ihre lokale Anzeige weitergeleitet (vorausgesetzt, DISPLAY: 0). Der Nachteil dieses Ansatzes ist, dass Sie sich jetzt mit allen XAuth-Elementen befassen müssen, sshdie automatisch mit -X erledigt werden (siehe diesen anderen Post für Hinweise), aber es sollte funktionieren. YYMV und die fummeligen Teile, die dem Leser als Übung zur Verfügung stehen ;-).