У меня есть беспроводная сеть из нескольких Raspberry Pi 3. Для параллельного и удаленного запуска процессов на всех устройствах, которые я использую Fabric. Все Pi оснащены сенсорным 5-дюймовым сенсорным дисплеем Elecrow. Я хочу добавить графический интерфейс в свой проект для отображения ip-адреса и того, какой на данный момент в программе находится Pi. В качестве первого подхода я просто хочу отобразить информацию. нет взаимодействия через кнопки или около того.
Если я запускаю файл GUI на Pi локально, он работает просто отлично. Как только я хочу запустить его параллельно на всех Pi с моего Mac, я получаю одинаковую ошибку со всех устройств:
out: Traceback (most recent call last):
out: File "gui.py", line 108, in <module>
out: main()
out: File "gui.py", line 95, in main
out: root = tk.Tk()
out: File "/usr/lib/python2.7/lib-tk/Tkinter.py",line 1823, in __init__
out: self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
out: _tkinter.TclError: no display name and no $DISPLAY environment variable
Для моего графического интерфейса я определил следующие такты:
@parallel
def start_gui():
code_dir = '/home/pi/test-python'
with cd(code_dir):
run("python gui.py")
Я потратил некоторое время на поиск проблемы, но, похоже, ни одно из решений не подходит для моего случая. Кто-нибудь знает, как я мог установить эту переменную среды отображения, чтобы я мог запускать свою программу через фабрику?
Спасибо
Редактировать: Я нашел решение, которое очень простое и заняло всего 2 часа чтения документации на ткань, но оно того стоило. Для тех, кто просто ищет быстрое решение, я выложу код моего файла:
@parallel
def start_gui():
code_dir = '/home/pi/test-python'
with cd(code_dir):
with settings(password='1234'):
with shell_env(DISPLAY=':0'):
run("python gui.py")