2016-04-08 13 views
1

ich mit meiner Remote-Computer verbinden:

self.client = paramiko.SSHClient() 
    self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    self.client.connect(hostname=ip_address, username=self.user, password=self.password, look_for_keys=False) 

Wenn ich Befehle senden:

chan = self.client.get_transport().open_session(timeout=timeout) 
    chan.request_x11() 
    chan.settimeout(timeout) 
    chan.exec_command(command) 
    stdin = chan.makefile('wb', -1) 
    stdout = chan.makefile('r', -1) 
    stderr = chan.makefile_stderr('r', -1) 
    return stdin, stdout, stderr 

Wenn ich tun verwenden Sie diese Zeile nicht:

chan.request_x11() 

ich versucht, mit:

self.client.exec_command(command) 

aber gleicher Fehler

erhalte ich die Fehlermeldung aus dem Titel. Wenn ich die Leitung verwende, bekomme ich eine Timeout-Verbindung, wenn ich versuche, von stdout zu lesen. Ich habe versucht Einstellung

DISPLAY=:0 

Hat nichts getan. Ich versuche, dbus Befehle über ssh zu senden. Wenn ich in ssh manuell über das Terminal verbinde, kann ich das -X benutzen oder es nicht benutzen und ich kann meine dbus-Anrufe benutzen, es spielt keine Rolle.

Antwort

0

Um Dbus von Shell ohne X11/Display zu verwenden. Dbus muss DBUS_SESSION_BUS_ADDRESS wissen. also entweder exportieren Sie dies oder exportieren Sie DISPLAY ...

1) Export DBUS_SESSION_BUS_ADDRESS Methode.

Erster Startserver. eval 'dbus-launch --auto-Syntax' ./server

vom Server environ (/ proc/pid-server/environ) Sie können DBUS_SESSION_BUS_ADDRESS bekommen. Exportieren Sie diesen Wert in Ihrer Shell, wo Sie Client-Programm starten, starten Client ./client ... Es sollte ohne Problem funktionieren.