Режим Paramiko X11 с программированием на Python
Мне не удается использовать модуль Python Paramiko, проходящий через его функции управления ssh X11.
Я хотел бы использовать его так, как если бы я использовал опцию ssh -X.
Я пробовал несколько решений, но ничего не работает в моей системе.
Вот код, который я попробовал:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy())
client.connect(machineName, username=xxx, password=xxx)
t = client.get_transport ()
chan = t.open_session ()
chan.request_x11 ()
chan.set_combine_stderr (True)
chan.exec_command (xxxxx) # the command that should display a X11 window
bufsize = -1
stdin = chan.makefile('wb', bufsize)
stdout = chan.makefile('rb', bufsize)
stderr = chan.makefile_stderr('rb', bufsize)
for line in stdout:
print '... ' + line.strip('\n')
client.close()
Я также попытался (вместо exec_command):
chan.get_pty("vt100", 80, 50)
chan.invoke_shell()
chan.send(xxxxx) # the command that should display a X11 window
К сожалению, мое приложение зависает в тот момент, когда обычно появляется окно X11. Примечание: если я запускаю команду без отображения окна X11, она работает отлично.
Спасибо за помощь,
С уважением
2 ответа
Мне нужно было использовать paramiko для запуска GUI в другом окне X11 и нашел этот пост. Я думаю, что вам может понадобиться добавить несколько строк, чтобы это работало. Все дело в параметре обработчика.
Здесь назначьте функцию для входящих подключений X11.
chan.request_x11 (handler=testFunc())
И написать простую.
import commands
def testFunc():
cmd = "xterm"
result = commands.getoutput(cmd)
После этого должно появиться новое окно. По крайней мере, это работает для меня.
Читая код paramiko, я понял, что paramiko реализует только способ установки канала x11. Он не подключает канал к локальному дисплею x11. Это оставлено вам.
Пожалуйста, посмотрите этот ответ для рабочего примера того, как это сделать: /questions/4556713/x11-pereadresatsiya-s-paramiko/4556733#4556733