Я пытаюсь запустить на встроенном компьютере (следовательно, без дисплея) модуль с использованием пакета pynput. Я подключаюсь через s sh к встроенному компьютеру (который находится на Linux), и когда я пытаюсь запустить сценарий, я получаю эту ошибку:
Traceback (most recent call last):
File "/home/remi/robot-artificial-intelligence/install/ea_maintenance_mode_manager/lib/ea_maintenance_mode_manager/maintenance_mode", line 33, in <module>
sys.exit(load_entry_point('ea-maintenance-mode-manager==0.1.0', 'console_scripts', 'maintenance_mode')())
File "/home/remi/robot-artificial-intelligence/install/ea_maintenance_mode_manager/lib/ea_maintenance_mode_manager/maintenance_mode", line 25, in importlib_load_entry_point
return next(matches).load()
File "/home/remi/.local/lib/python3.6/site-packages/importlib_metadata/__init__.py", line 105, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/home/remi/robot-artificial-intelligence/install/ea_maintenance_mode_manager/lib/python3.6/site-packages/ea_maintenance_mode_manager/maintenance_mode.py", line 22, in <module>
from pynput import keyboard
File "/usr/local/lib/python3.6/dist-packages/pynput/__init__.py", line 40, in <module>
from . import keyboard
File "/usr/local/lib/python3.6/dist-packages/pynput/keyboard/__init__.py", line 52, in <module>
from ._xorg import KeyCode, Key, Controller, Listener
File "/usr/local/lib/python3.6/dist-packages/pynput/keyboard/_xorg.py", line 39, in <module>
from pynput._util.xorg import (
File "/usr/local/lib/python3.6/dist-packages/pynput/_util/xorg.py", line 40, in <module>
_check()
File "/usr/local/lib/python3.6/dist-packages/pynput/_util/xorg.py", line 38, in _check
display = Xlib.display.Display()
File "/usr/local/lib/python3.6/dist-packages/Xlib/display.py", line 89, in __init__
self.display = _BaseDisplay(display)
File "/usr/local/lib/python3.6/dist-packages/Xlib/display.py", line 71, in __init__
protocol_display.Display.__init__(self, *args, **keys)
File "/usr/local/lib/python3.6/dist-packages/Xlib/protocol/display.py", line 84, in __init__
name, protocol, host, displayno, screenno = connect.get_display(display)
File "/usr/local/lib/python3.6/dist-packages/Xlib/support/connect.py", line 73, in get_display
return mod.get_display(display)
File "/usr/local/lib/python3.6/dist-packages/Xlib/support/unix_connect.py", line 76, in get_display
raise error.DisplayNameError(display)
Xlib.error.DisplayNameError: Bad display name ""
Я знаю, что эта ошибка вызвана тем, что на Linux pynput использует X для управления клавиатурой, и создается переменная окружения $ DISPLAY. Поэтому я хотел установить его при удаленном запуске скрипта (после подключения через s sh):
DISPLAY=":0" python3 path_to_my_script/my-script.py
После запуска этой строки я получаю следующую ошибку:
Traceback (most recent call last):
File "src/ea_maintenance_mode_manager/ea_maintenance_mode_manager/maintenance_mode.py", line 22, in <module>
from pynput import keyboard
File "/usr/local/lib/python3.6/dist-packages/pynput/__init__.py", line 40, in <module>
from . import keyboard
File "/usr/local/lib/python3.6/dist-packages/pynput/keyboard/__init__.py", line 52, in <module>
from ._xorg import KeyCode, Key, Controller, Listener
File "/usr/local/lib/python3.6/dist-packages/pynput/keyboard/_xorg.py", line 39, in <module>
from pynput._util.xorg import (
File "/usr/local/lib/python3.6/dist-packages/pynput/_util/xorg.py", line 40, in <module>
_check()
File "/usr/local/lib/python3.6/dist-packages/pynput/_util/xorg.py", line 38, in _check
display = Xlib.display.Display()
File "/usr/local/lib/python3.6/dist-packages/Xlib/display.py", line 89, in __init__
self.display = _BaseDisplay(display)
File "/usr/local/lib/python3.6/dist-packages/Xlib/display.py", line 71, in __init__
protocol_display.Display.__init__(self, *args, **keys)
File "/usr/local/lib/python3.6/dist-packages/Xlib/protocol/display.py", line 166, in __init__
raise error.DisplayConnectionError(self.display_name, r.reason)
Xlib.error.DisplayConnectionError: Can't connect to display ":0": b'No protocol specified\n'
Когда я подключаюсь напрямую к встроенному компьютеру и набираю термин:
echo $DISPLAY
, я получаю :0
Есть ли способ эмулировать отображение через s sh для использования пакета пынпуть?
Спасибо