Mein Setup ist komisch und ich kann es jetzt nicht ändern. Ich habe zwei Maschinen:
local-machine
: Es ist mein Desktop, auf dem Ubuntu mit Gnome ausgeführt wirdremote-machine
: Es ist eine virtuelle Maschine, auf der auch Ubuntu ausgeführt wird, jedoch ohne X
In beiden Maschinen habe ich meine privaten und öffentlichen SSH-Schlüssel.
Ich muss SSH von remote-machine
bis local-machine
ausführen und gedit (in local-machine
, unter dem Standardwert $ DISPLAY) ausführen, aber eine Datei remote-machine
über SFTP öffnen. Etwas wie das:
myuser@remote-machine:~$ ssh local-machine "DISPLAY=:0.0 gedit sftp://remote-machine/some/file"
Der obige Befehl funktioniert nicht. gedit zeigt diese Nachricht an:
Could not open the file sftp://remote-machine/some/file.
gedit cannot handle sftp: locations.
Beachten Sie, dass:
/some/file
existiert amremote-machine
.- Ich kann normalerweise von SSH
remote-machine
zulocal-machine
SSH meinen Schlüssel ohne irgendwelche Probleme benutzen! - Ich kann den Befehl
DISPLAY=:0.0 gedit sftp://remote-machine/some/file
in einem Terminal ausführenlocal-machine
und gedit öffnet die Dateiremote-machine
ohne Probleme - aber das Terminal, in dem ich den Befehl ausgeführt habe, läuft in DISPLAY: 0 (wirklich, es istgnome-terminal
). - Ich habe auch versucht, einen
-t
SSH-Client zu verwenden (um eine Pseudotty-Zuweisung zu erzwingen), aber es hat nicht funktioniert. - Wenn ich versuche zu laufen
DISPLAY=:0.0 gedit sftp://remote-machine/some/file
in ,local-machine
aber unter einem tty (zum Beispiel intty1
, durch Drücken<Ctrl>+<Alt>+<F1>
) es nicht nicht - ich bekomme die gleichen Fehler , wenn die Ausführung vonremote-machine
.
Ich fand, dass, wenn ich die Umgebungsvariable DBUS_SESSION_BUS_ADDRESS
mit einem korrekten Wert übergebe, es funktioniert! Also, wenn ich so etwas mache:
myuser@local-machine:~$ env | grep DBUS_SESSION_BUS_ADDRESS > env.txt
myuser@local-machine:~$ scp env.txt remote-machine:
und dann:
myuser@remote-machine:~$ ssh local-machine "DISPLAY=:0.0 $(cat env.txt) gedit sftp://remote-machine/some/file"
Es klappt! Das Problem ist, dass ich nicht aktiv bin undlocal-machine
daher nicht den richtigen Wert für diese Umgebungsvariable erhalten kann. Gibt es eine andere Möglichkeit, diese Arbeit zu machen?