2016-04-08 10 views
1

Я подключаюсь к моему удаленному компьютеру с:

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) 

При отправке команды:

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 

Если я делаю не используйте эту строку:

chan.request_x11() 

Я попытался с помощью:

self.client.exec_command(command) 

но та же ошибка

Я получаю сообщение об ошибке из названия. Когда я использую строку, я получаю соединение с таймаутом при попытке чтения из stdout. Я попытался установить

DISPLAY=:0 

Ничего не делал. Я пытаюсь отправить команды dbus через ssh. Когда я подключаюсь в ssh вручную через терминал, я могу использовать -X или не использовать его, и я могу использовать свои вызовы dbus, это не имеет значения.

ответ

0

Для использования Dbus из корпуса без X11/дисплея. Dbus должен знать DBUS_SESSION_BUS_ADDRESS. , так что либо вы экспортируете это, либо экспортируете DISPLAY ...

1) Экспорт DBUS_SESSION_BUS_ADDRESS метода.

Первый запуск сервера. Eval 'DBus-запуск --auto-синтаксисом' ./server

от окружа сервера (/ Proc/PID-сервер/окружать) вы можете получить DBUS_SESSION_BUS_ADDRESS. Экспортируйте это значение в свою оболочку, где вы запускаете клиентскую программу, клиент запуска ./client ... Он должен работать без проблем.