Как запустить gnome-терминал из плагина dbus, службы systemd, используя Python - PullRequest
0 голосов
/ 20 декабря 2018

Я использую Python для разработки простого плагина на основе dbus (dbus.service.Object), который принимает вызовы IPC из сценария командной строки.Служба dbus настроена для размещения в systemd.Он работает, как ожидалось.Однако, когда я добавил в плагин возможность запуска терминала gnome, это не удалось.Кажется, что выполнение застревает в любом из этих вызовов подпроцесса, независимо от того, является ли это call () или Popen ().Интересно, как сделать так, чтобы плагин правильно запускал gnome-терминал?

#subprocess.call(['gnome-terminal', '--', '/bin/bash', '-c', 'ls', '-al', '&'])
#subprocess.call(['systemd-run', '--user', '--service-type=forking', 'gnome-terminal', '-t', "Test",'--','/bin/bash', '-c', 'ls', '-al', "&"])
#subprocess.call(['DISPLAY=:0', 'gnome-terminal', '--', '/bin/bash', '-c', 'ls', '-al', '&'])

Вещи, которые я также пытался запустить скрипт Python из плагина и у меня есть скрипт для запуска gnome-терминала, но все равно не удалось.

Ошибка означает, что терминал не открывается, иPS не показывает терминал.Я также пытался с os.system.Работает, если работает прямо с консоли.

os.system ('gnome-терминал - / bin / bash -c "python /data/scripts/test.a.1.py -f /data/station_profile_A.json"')

Журнал журнала показывает ошибку ниже:

21 декабря 09:34:20 координатор ubuntu [5380]: Невозможно инициализировать сервер: Не удалось подключиться: соединение отклонено 21 декабря 09:34:20 координатор ubuntu[5380]: # Не удалось проанализировать аргументы: Не удается открыть дисплей:

Если я добавлю «DISPLAY =: 0» перед терминалом gnome, это не поможет.

1 Ответ

0 голосов
/ 21 декабря 2018

Для подключения к X вам необходимо установить значения DISPLAY и XAUTHORITY.

Например XAUTHORITY=$HOME/.Xauthority и DISPLAY=:0.0.

Файл с именем XAUTHORITY должен быть доступен для чтения.Файл находится в режиме 0600.

Я бы предложил, чтобы ваш API-интерфейс DBUS включал передачу копии волшебного куки-файла, содержимого файла XAUTHORITY, службе, которая затем записывает его ввременный файл, а затем с DISPLAY и XAUTHORITY set будет запускаться команда.

...