На Ubuntu при вызове pyglet.canvas.get_display() ловлю Cannot connect to "None" на Python 3.7.3
На Ubuntu 22.04 установил фреймворк SLM-Lab, а во время начала выполнения кода при вызове pyglet.canvas.get_display() ловлю Cannot connect to "None" на Python 3.7.3
Двое суток гуглю, по факту дело вот в чем - фреймворк думает, что у меня нет монитора или видеокарты. А это мой домашний комп с полноценной убунту. Есть и монитор и карточка GTX 1080.
Вот текст ошибки:
File "run_lab.py", line 99, in <module>
main()
File "run_lab.py", line 91, in main
get_spec_and_run(*args)
File "run_lab.py", line 75, in get_spec_and_run
run_spec(spec, lab_mode)
File "run_lab.py", line 58, in run_spec
Trial(spec).run()
File "/root/SLM-Lab/slm_lab/experiment/control.py", line 179, in run
session_metrics_list = self.run_sessions()
File "/root/SLM-Lab/slm_lab/experiment/control.py", line 157, in run_sessions
session_metrics_list = [Session(spec).run()]
File "/root/SLM-Lab/slm_lab/experiment/control.py", line 118, in run
self.run_rl()
File "/root/SLM-Lab/slm_lab/experiment/control.py", line 90, in run_rl
state = self.env.reset()
File "/root/SLM-Lab/slm_lab/env/openai.py", line 62, in reset
self.u_env.render()
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/gym/core.py", line 249, in render
return self.env.render(mode, **kwargs)
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/gym/core.py", line 249, in render
return self.env.render(mode, **kwargs)
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/gym/envs/classic_control/cartpole.py", line 150, in render
from gym.envs.classic_control import rendering
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/gym/envs/classic_control/rendering.py", line 27, in <module>
from pyglet.gl import *
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/gl/__init__.py", line 232, in <module>
import pyglet.window
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/window/__init__.py", line 1918, in <module>
gl._create_shadow_window()
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/gl/__init__.py", line 206, in _create_shadow_window
_shadow_window = Window(width=1, height=1, visible=False)
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/window/xlib/__init__.py", line 171, in __init__
super(XlibWindow, self).__init__(*args, **kwargs)
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/window/__init__.py", line 590, in __init__
display = pyglet.canvas.get_display()
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/canvas/__init__.py", line 94, in get_display
return Display()
File "/root/miniconda3/envs/lab/lib/python3.7/site-packages/pyglet/canvas/xlib.py", line 123, in __init__
raise NoSuchDisplayException('Cannot connect to "%s"' % name)
pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
Суть в том, что в PyCharm все работает идеально
import os
import pyglet
# os.environ['DISPLAY'] = ''
display = pyglet.canvas.Display()
screen = display.get_default_screen()
screen_width = screen.width
screen_height = screen.height
print(screen_height, screen_width)
А если я раскомментирую код # os.environ['DISPLAY'] = '', я поймаю ошибку Cannot connect to "None" уже в пайчарме)
Если я попытаюсь запустить какую-то игру из библиотеки gym в Pycharm - она нормально заработает в окошечке. А тут вместо окошечка ошибка хоть убейся.
Фремворк SLM Lab запускаю используя anaconda окружении.
Пробовал все виды инструкций из документации: https://slm-lab.gitbook.io/slm-lab/setup/installation
Весь раздел помощь перепробовал вдоль и поперек
Ответы (1 шт):
Есть две команды для получения админки в консоли:
- sudo su -
- sudo -i
И как выяснилось под первым типом администратора ничерта не работает и дает ошибку, а под вторым все работает идеально! Либо как вариант фреймворк SLM Lab нужно устанавливать без прав рута, но с этим возникали проблемы.