Wenn sich SSH lokal auf meinem Computer befindet (fragen Sie nicht, es ist eine Problemumgehung), kann ich grafische Anwendungen nicht starten, ohne Folgendes auszuführen:
export DISPLAY=:0.0
Wenn ich dies zuerst ausführe und dann eine grafische Anwendung ausführe, funktionieren die Dinge. Wenn nicht, funktioniert es nicht, es gibt kein Display zum Anhängen.
Gibt es einen Befehl zum Auflisten aller verfügbaren Anzeigen (dh aller möglichen Werte) auf einer Maschine?
( DISPLAY=:0 yourapp & )
.w
. Weitere Informationen: Vorhandene X-Anzeigenamen auflisten?Antworten:
Wenn Sie die X-Verbindung über SSH weiterleiten möchten, müssen Sie sie sowohl auf der Server- als auch auf der Clientseite aktivieren. (Je nach Distribution ist sie möglicherweise standardmäßig aktiviert oder deaktiviert.) Stellen Sie auf der Serverseite sicher, dass Sie sich
X11Forwarding yes
in/etc/sshd_config
(/etc/ssh/sshd_config
oder wo auch immer sich die Konfigurationsdatei befindet) befinden. Übergeben Sie auf der Clientseite die-X
Option an denssh
Befehl , oder geben SieForwardX11
Ihre ein~/.ssh/config
.Wenn du rennst
ssh -X localhost
, solltest du sehen, dass$DISPLAY
das (wahrscheinlich) istlocalhost:10.0
. Im Gegensatz dazu:0.0
ist dies der Wert, wenn Sie nicht über SSH verbunden sind. (Der.0
Teil kann weggelassen werden; es handelt sich um eine Bildschirmnummer, aber es werden selten mehrere Bildschirme verwendet.) Es gibt zwei Arten von X-Anzeigen, auf die Sie wahrscheinlich jemals stoßen werden::
.:
.Mit
ssh -X localhost
können Sie über beide Anzeigen auf den X-Server zugreifen, die Anwendungen verwenden jedoch eine andere Methode: Sie greifen:NUMBER
über lokale Sockets und gemeinsam genutzten SpeicherHOSTNAME:NUMBER
auf den Server zu , während der Zugriff auf den Server über TCP langsamer ist und einige Erweiterungen deaktiviert.Beachten Sie, dass Sie eine Form der Autorisierung benötigen, um auf einen X-Server zuzugreifen, der als Cookie bezeichnet wird und normalerweise hinter den Kulissen in der Datei gespeichert wird
~/.Xauthority
. Wenn Sie ssh verwenden ein anderes Benutzerkonto zugreifen zu können , oder wenn die Verteilung der Cookies in einer anderen Datei legt, können Sie feststellen , dassDISPLAY=:0
nicht innerhalb der SSH - Sitzung funktioniert (aberssh -X
wird, wenn es auf dem Server aktiviert ist, Sie nie müssen Chaos mit ,XAUTHORITY
wenn tunssh -X
). Wenn dies ein Problem ist, müssen Sie dieXAUTHORITY
Umgebungsvariable festlegen oder die Cookies des anderen Benutzers abrufen .So beantworten Sie Ihre eigentliche Frage:
Lokale Anzeigen entsprechen einem Socket-In
/tmp/.X11-unix
.Fernanzeigen entsprechen offenen TCP-Ports über 6000; Der Zugriff auf die Anzeigenummer N auf Maschine M erfolgt durch Verbinden mit dem TCP-Port 6000 + N auf Maschine M. Von Maschine M aus:
(Der Rest dieses Punktes ist nur von akademischem Interesse.)
Auf einem anderen Computer können Sie
nmap -p 6000-6099 host_name
offene TCP-Ports im üblichen Bereich prüfen. Heutzutage ist es selten, dass X-Server einen TCP-Socket überwachen, insbesondere außerhalb der Loopback-Schnittstelle.Genau genommen könnte eine andere Anwendung einen Port in dem Bereich verwenden, der normalerweise von X-Servern verwendet wird. Sie können feststellen, ob ein X-Server empfangsbereit ist, indem Sie prüfen, bei welchem Programm der Port geöffnet ist.
Wenn das etwas Zweideutiges wie zeigt
sshd
, gibt es keine Möglichkeit, sicher zu wissen, ob es ein X-Server oder ein Zufall ist.quelle
Die Anzeige ist das erste Argument für
Xorg
. Sie könnenps
dann herausgreifenXorg
.Sie können dies dann
awk
in jedes gewünschte Format umwandeln.quelle
ps aux |grep X
funktionierte besser für michw
Zeigt alle angemeldeten Benutzer und deren Anzeige an.DISPLAY=:0 netsurf "https://medium.com/"
oder verwenden Sieexport DISPLAY=:0
, um die Variable für den Prozess freizugeben , nicht nur für die Shell[Bearbeiten: Ich habe eine Xnest-Instanz ausgeführt, um zu prüfen, ob dies auffällt. es werden nur Login-Shells erfasst ('w' steht für 'who'). Zurück zum Zeichenbrett für mich.] [Bearbeiten: Gefunden:
]
quelle
ps xeww | grep DISPLAY=:1024
. Ich starte Chrome-Remote-Desktop auch auf Display 20.w
funktioniert nicht, wenn auf dem x-Server keine Anwendung ausgeführt wird (einschließlich Fenstermanager und Desktop). Funktioniert aberls /tmp/.X11-unix
.erledigt die Aufgabe durch Auflisten aller aktuellen DISPLAYS. Außerdem sehen Sie die zugewiesenen Anzeigen für einen bestimmten Benutzer ($ usr) mit:
quelle
ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
?In dem
/tmp
Ordner können sich auch.X??-lock
Dateien befinden, in denen??
die Sitzungsnummern angegeben sind.Sie müssen diese löschen, wenn Sie eine Sitzungsnummer wiederverwenden möchten.
Sie können sie
ls -a
wie gewohnt sehen, wenn Dateien, die mit einem beginnen,.
ausgeblendet werden.quelle