【发布时间】:2021-01-19 20:42:57
【问题描述】:
使用elevate 模块中的elevate() 函数时,kivy 无法启动。相关部分代码如下:
from elevate import elevate
from os import environ
environ['DISPLAY'] = ':0'
environ['KIVY_WINDOW'] = 'sdl2'
elevate()
稍后,我为一个 kivy 应用程序提供代码并尝试运行它。这样做时我收到以下错误:
[INFO ] [Logger ] Record log in /root/.kivy/logs/kivy_20-10-04_91.txt
[INFO ] [Kivy ] v2.0.0rc3, git-20c14b2, 20200615
[INFO ] [Kivy ] Installed at "/usr/local/lib/python3.8/dist-packages/Kivy-2.0.0rc3-py3.8-linux-x86_64.egg/kivy/__init__.py"
[INFO ] [Python ] v3.8.5 (default, Aug 2 2020, 15:09:07)
[GCC 10.2.0]
[INFO ] [Python ] Interpreter at "/usr/bin/python3"
[INFO ] [Factory ] 185 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer, img_gif ignored)
[INFO ] [KivyMD ] 0.104.2.dev0, git-f0a8217, 2020-09-27 (installed at "/usr/local/lib/python3.8/dist-packages/kivymd-0.104.2.dev0-py3.8.egg/kivymd/__init__.py")
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2
No protocol specified
[CRITICAL] [Window ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - RuntimeError: b'No available video device'
File "/usr/local/lib/python3.8/dist-packages/Kivy-2.0.0rc3-py3.8-linux-x86_64.egg/kivy/core/__init__.py", line 70, in core_select_lib
cls = cls()
File "/usr/local/lib/python3.8/dist-packages/Kivy-2.0.0rc3-py3.8-linux-x86_64.egg/kivy/core/window/window_sdl2.py", line 152, in __init__
super(WindowSDL, self).__init__()
File "/usr/local/lib/python3.8/dist-packages/Kivy-2.0.0rc3-py3.8-linux-x86_64.egg/kivy/core/window/__init__.py", line 982, in __init__
self.create_window()
File "/usr/local/lib/python3.8/dist-packages/Kivy-2.0.0rc3-py3.8-linux-x86_64.egg/kivy/core/window/window_sdl2.py", line 287, in create_window
self.system_size = _size = self._win.setup_window(
File "kivy/core/window/_window_sdl2.pyx", line 112, in kivy.core.window._window_sdl2._WindowSDL2Storage.setup_window
File "kivy/core/window/_window_sdl2.pyx", line 74, in kivy.core.window._window_sdl2._WindowSDL2Storage.die
[CRITICAL] [App ] Unable to get a Window, abort.
我该如何解决这个问题?我尝试设置environ['DISPLAY'] = '*:0',但收到相同的错误,除了没有“找不到协议”。请注意,这是一个必须在比我自己的机器更多的机器上运行的应用程序,所以我需要一个可以放入代码中的修复程序,而不是使用 bash 运行的一次性命令。
我还应该提到,当我运行 sudo python3 main.py 时,该应用程序运行良好。只有当我使用python3 main.py(这会导致elevate() 函数提示我登录)时,我才会收到此错误。
【问题讨论】:
-
试试
elevate(graphical=False)。我还必须删除environ的东西。 -
如果我想要图形提示怎么办?有什么办法可以解决吗?
标签: kivy kivy-language elevated-privileges