开源改变世界

Bookworm 上的 OpenGL 问题 #2264

推推 grbl 2年前 (2023-01-31) 193次浏览
打开
SebKuzminsky 打开了这个问题 3个星期前 · 25条评论
打开

Bookworm 上的 OpenGL 问题#2264

SebKuzminsky 打开了这个问题 3个星期前 · 25条评论

注释

Bookworm 上的 OpenGL 问题 #2264
合作者

在 Bookworm 的最新安装中,在 deb 中内置并安装了 linuxcnc 2.9,linuxcnc 无法启动并出现此错误:

LINUXCNC - 2.9.0~pre1
Machine configuration directory is '/home/seb/linuxcnc/configs/sim.axis'
Machine configuration file is 'axis.ini'
Starting LinuxCNC...
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using POSIX non-realtime
Found file(lib): /usr/share/linuxcnc/hallib/core_sim.hal
Found file(lib): /usr/share/linuxcnc/hallib/sim_spindle_encoder.hal
Found file(lib): /usr/share/linuxcnc/hallib/axis_manualtoolchange.hal
Found file(lib): /usr/share/linuxcnc/hallib/simulated_home.hal
Found file(lib): /usr/share/linuxcnc/hallib/check_xyz_constraints.hal
link (updating variable file): No such file or directory
Traceback (most recent call last):
  File "/usr/bin/axis", line 26, in <module>
    from OpenGL.GLUT import *
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/__init__.py", line 5, in <module>
    from OpenGL.GLUT.fonts import *
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/fonts.py", line 20, in <module>
    p = platform.getGLUTFontPointer( name )
  File "/usr/lib/python3/dist-packages/OpenGL/platform/baseplatform.py", line 350, in getGLUTFontPointer
    raise NotImplementedError( 
NotImplementedError: Platform does not define a GLUT font retrieval function
Shutting down and cleaning up LinuxCNC...
task: 386 cycles, min=0.000009, max=0.006394, avg=0.001097, 0 latency excursions (> 10x expected cycle time of 0.001000s)
Note: Using POSIX non-realtime
LinuxCNC terminated with an error.  You can find more information in the log:
    /home/seb/linuxcnc_debug.txt
and
    /home/seb/linuxcnc_print.txt
as well as in the output of the shell command 'dmesg' and in the terminal

这个问题已经在论坛上讨论过,没有解决:https ://forum.linuxcnc.org/9-installing-linuxcnc/47468-python-issues-on-bookworm

该问题可在完全不涉及 LinuxCNC 的情况下重现:

$ python3 -c "from OpenGL.GLUT import *"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/__init__.py", line 5, in <module>
    from OpenGL.GLUT.fonts import *
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/fonts.py", line 20, in <module>
    p = platform.getGLUTFontPointer( name )
  File "/usr/lib/python3/dist-packages/OpenGL/platform/baseplatform.py", line 350, in getGLUTFontPointer
    raise NotImplementedError( 
NotImplementedError: Platform does not define a GLUT font retrieval function

MPI-IS/mesh#49中,这里有一个解决 GLUT 导入错误的方法,但 linuxcnc 此后不久仍然失败:

$ export PYOPENGL_PLATFORM=osmesa
$ python3 -c "from OpenGL.GLUT import *"
$ linuxcnc
LINUXCNC - 2.9.0~pre1
Machine configuration directory is '/home/seb/linuxcnc/configs/sim.axis'
Machine configuration file is 'axis.ini'
Starting LinuxCNC...
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using POSIX non-realtime
Found file(lib): /usr/share/linuxcnc/hallib/core_sim.hal
Found file(lib): /usr/share/linuxcnc/hallib/sim_spindle_encoder.hal
Found file(lib): /usr/share/linuxcnc/hallib/axis_manualtoolchange.hal
Found file(lib): /usr/share/linuxcnc/hallib/simulated_home.hal
Found file(lib): /usr/share/linuxcnc/hallib/check_xyz_constraints.hal
Traceback (most recent call last):
  File "/usr/bin/axis", line 24, in <module>
    from OpenGL.GL import *
  File "/usr/lib/python3/dist-packages/OpenGL/GL/__init__.py", line 4, in <module>
    from OpenGL.GL.VERSION.GL_1_1 import *
  File "/usr/lib/python3/dist-packages/OpenGL/GL/VERSION/GL_1_1.py", line 14, in <module>
    from OpenGL.raw.GL.VERSION.GL_1_1 import *
  File "/usr/lib/python3/dist-packages/OpenGL/raw/GL/VERSION/GL_1_1.py", line 7, in <module>
    from OpenGL.raw.GL import _errors
  File "/usr/lib/python3/dist-packages/OpenGL/raw/GL/_errors.py", line 4, in <module>
    _error_checker = _ErrorChecker( _p, _p.GL.glGetError )
AttributeError: 'NoneType' object has no attribute 'glGetError'
Shutting down and cleaning up LinuxCNC...
task: 322 cycles, min=0.000007, max=0.004341, avg=0.001073, 0 latency excursions (> 10x expected cycle time of 0.001000s)
Note: Using POSIX non-realtime
LinuxCNC terminated with an error.  You can find more information in the log:
    /home/seb/linuxcnc_debug.txt
and
    /home/seb/linuxcnc_print.txt
as well as in the output of the shell command 'dmesg' and in the terminal
Bookworm 上的 OpenGL 问题 #2264
合作者作者
塞布·库兹明斯基 评论了 3个星期前  

如果我从默认的 Gnome 会话(wayland)切换到“GNOME On X11”会话类型,错误就会消失,所以echo $XDG_SESSION_TYPEx11

此屏幕截图来自 Buster,但它在 Bookworm 上的效果相同:
Bookworm 上的 OpenGL 问题 #2264

Bookworm 上的 OpenGL 问题 #2264
合作者
彼得赖因霍尔特森 评论了 3个星期前 通过电子邮件
Bookworm 上的 OpenGL 问题 #2264
合作者作者

我还可以通过在启动 linuxcnc 之前将环境变量设置为PYOPENGL_PLATFORM来解决这个问题(在 Wayland 上运行时) :x11

$ echo $XDG_SESSION_TYPE
wayland

$ python3 -c 'from OpenGL.GLUT import *'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/__init__.py", line 5, in <module>
    from OpenGL.GLUT.fonts import *
  File "/usr/lib/python3/dist-packages/OpenGL/GLUT/fonts.py", line 20, in <module>
    p = platform.getGLUTFontPointer( name )
  File "/usr/lib/python3/dist-packages/OpenGL/platform/baseplatform.py", line 350, in getGLUTFontPointer
    raise NotImplementedError( 
NotImplementedError: Platform does not define a GLUT font retrieval function

$ PYOPENGL_PLATFORM=x11 python3 -c 'from OpenGL.GLUT import *'

$ PYOPENGL_PLATFORM=x11 linuxcnc
LINUXCNC - 2.9.0~pre1
Machine configuration directory is '/home/seb/linuxcnc/configs/sim.axis'
Machine configuration file is 'axis.ini'
Starting LinuxCNC...
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using POSIX non-realtime
Found file(lib): /home/seb/linuxcnc-hacking/linuxcnc-dev/lib/hallib/core_sim.hal
Found file(lib): /home/seb/linuxcnc-hacking/linuxcnc-dev/lib/hallib/sim_spindle_encoder.hal
Found file(lib): /home/seb/linuxcnc-hacking/linuxcnc-dev/lib/hallib/axis_manualtoolchange.hal
Found file(lib): /home/seb/linuxcnc-hacking/linuxcnc-dev/lib/hallib/simulated_home.hal
Found file(lib): /home/seb/linuxcnc-hacking/linuxcnc-dev/lib/hallib/check_xyz_constraints.hal
note: MAXV     max: 5.000 units/sec 300.000 units/min
note: LJOG     max: 5.000 units/sec 300.000 units/min
note: LJOG default: 0.250 units/sec 15.000 units/min
note: jog_order='XYZ'
note: jog_invert=set()

这是什么意思呢?

Bookworm 上的 OpenGL 问题 #2264
合作者作者

这个补丁使 linuxcnc 的 OpenGL 东西在 Bookworm 上的 Wayland 上对我有用:

diff --git a/scripts/linuxcnc.in b/scripts/linuxcnc.in
index f8d5f18471..1f2b5aa424 100644
--- a/scripts/linuxcnc.in
+++ b/scripts/linuxcnc.in
@@ -22,6 +22,8 @@ if test "xyes" = "x@RUN_IN_PLACE@"; then
     fi
 fi
 
+export PYOPENGL_PLATFORM=x11
+
 ################################################################################
 # 0. Values that come from configure
 ################################################################################
Bookworm 上的 OpenGL 问题 #2264

很高兴知道这个最近的发展有一个解决方案。
我认为当他们埋葬 xorg 时,他们正在删除兼容性功能。
你的补丁能让 Gmocappy 工作吗?请检查。
使用 xfce 也是一个很好的解决方案,因为它是一个 xorg 环境。

如果 linuxcnc 中的环境发生变化,我想看看我的 chromebook 是否会再次运行它。

Bookworm 上的 OpenGL 问题 #2264
罗德奥 评论了 3个星期前  

在我的 chromebook 上将 v 2.9 编译为 RIP 并设置此环境变量
export PYOPENGL_PLATFORM=x11
Chromebook 运行内核为 5.10 的 Bullseye 版本
Axis 因 opengl 错误而失败运行
此脚本,该脚本使用 linuxcnc
~/linuxcnc-dev/lib/python/ qtvcp/designer/install_script
并在此处的文档中提到
http://linuxcnc.org/docs/2.9/html/plasma/qtplasmac.html#qt-dependency
我运行了 qtplasmac,这是一个 qtpvcp 配置,程序打开但抱怨缺少依赖
项是否安装了 python3-gst1.0?
这不存在,但发现此包存在于 bullseye python3-gst-1.0 中,因此安装它
解决了缺少的依赖项。
我再次运行 axis,它完美打开!

所以一个请求:qtvcp 依赖项是否可以添加到列表中 linuxcnc 知道您何时 根据此处的文档运行
dpkg-checkbuilddeps http://linuxcnc.org/docs/2.9/html/code/building-linuxcnc.html#Satisfying -Build -Dependencies 确定qtvcp应该被认为是linuxcnc主线的一部分?

无论如何,这太棒了,我现在可以使用我的 chromebook 运行 sims 来测试东西。它被打破了(同样的问题似乎已经超过 12 个月了。

Bookworm 上的 OpenGL 问题 #2264
合作者作者

master 的提示在 Bullseye 上有效,但如上文所述在 Bookworm 上失败。重要的区别似乎是 Bullseye 有 python3-opengl 3.1.5(有效),但 Bookwork 有 python3-opengl 3.1.6(失败)。

3.1.6 于 11 月中旬进入 debian,所以我预计从那时起它就被破坏了。

如果我在 Bookworm 上从快照 ( http://snapshot.debian.org/binary/python3-opengl/ ) 安装 3.1.5,Axis 会再次运行。(我不得不安装它dpkg -i --force-depends,因为 python3-opengl 3.1.5 依赖于 freeglut3,它在 Bookworm 中已经过渡到 libglut3.12)。

python3-opengl 3.1.5(有效)和 3.1.6(无效)之间的重要区别在于检测和选择它使用的“平台”。3.1.5选择“GLX”平台,而3.1.6选择“EGL”平台:

3.1.5:

3.1.6:

正如错误消息所说,EGL平台缺少getGLUTFontPointer功能:https ://github.com/mcfletch/pyopengl/blob/3e9791ffb4cd4831dae261d6bea3049ce9e78f01/OpenGL/platform/egl.py

与具有该功能的 GLX 平台不同:https ://github.com/mcfletch/pyopengl/blob/3e9791ffb4cd4831dae261d6bea3049ce9e78f01/OpenGL/platform/glx.py#L97

在深入研究之后,这个错误进入 pyopengl 并且还没有被注意到或修复就不足为奇了——pyopengl 项目比 LinuxCNC 更需要开发人员。这是 pyopengl 开发人员邮件列表中的最新电子邮件:https ://sourceforge.net/p/pyopengl/mailman/message/37278387/

这一切都让我更愿意使用#2267中的修复/解决方法——它只是从 3.1.5 恢复了对工作 GLX 平台的选择。

Bookworm 上的 OpenGL 问题 #2264
合作者
彼得赖因霍尔特森 评论了 2个星期前 通过电子邮件
Bookworm 上的 OpenGL 问题 #2264
合作者作者

上游报告:mcfletch/pyopengl#89

在此处向 Debian 报告:https ://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1029011

Bookworm 上的 OpenGL 问题 #2264
合作者作者

@swt2cmcfletch/pyopengl#91中的修复我现在在启动 Axis 方面取得了一些进展:

$ echo $XDG_SESSION_TYPE
wayland

$ linuxcnc -l
LINUXCNC - 2.10.0~pre0
Machine configuration directory is '/home/seb/linuxcnc/configs/sim.axis'
Machine configuration file is 'axis.ini'
Starting LinuxCNC...
linuxcnc TPMOD=tpmod HOMEMOD=homemod EMCMOT=motmod
Note: Using POSIX non-realtime
Found file(lib): /usr/share/linuxcnc/hallib/core_sim.hal
Found file(lib): /usr/share/linuxcnc/hallib/sim_spindle_encoder.hal
Found file(lib): /usr/share/linuxcnc/hallib/axis_manualtoolchange.hal
Found file(lib): /usr/share/linuxcnc/hallib/simulated_home.hal
Found file(lib): /usr/share/linuxcnc/hallib/check_xyz_constraints.hal
Traceback (most recent call last):
  File "/usr/bin/axis", line 62, in <module>
    from rs274.OpenGLTk import *
  File "/usr/lib/python3/dist-packages/rs274/OpenGLTk.py", line 16, in <module>
    import _togl
ImportError: /usr/lib/python3/dist-packages/_togl.cpython-310-x86_64-linux-gnu.so: undefined symbol: glXDestroyCo
ntext
Shutting down and cleaning up LinuxCNC...
task: 634 cycles, min=0.000015, max=0.005903, avg=0.001098, 0 latency excursions (> 10x expected cycle time of 0.
001000s)
Note: Using POSIX non-realtime
LinuxCNC terminated with an error.  You can find more information in the log:
    /home/seb/linuxcnc_debug.txt
and
    /home/seb/linuxcnc_print.txt
as well as in the output of the shell command 'dmesg' and in the terminal
Bookworm 上的 OpenGL 问题 #2264
合作者作者

这里有几个想法,来自我对 OpenGL 一无所知的人:

  1. 看起来我们现在正在混合使用 EGL 和 GLX,可以吗?好像不对
  2. 我们的 repo 中有一个旧的 togl 源代码的旧分支,我们可能应该考虑重写我们的 _toglmodule 和相关的构建基础结构,以使用 debian 的打包 libtogl 和 libtogl-dev 代替。
Bookworm 上的 OpenGL 问题 #2264
swt2c 评论了 4天前

很抱歉插在这里,但既然我在这里……:-)

这里有几个想法,来自我对 OpenGL 一无所知的人:

1. It looks like we're now using a mix of EGL and GLX, is that ok?  Seems wrong.

是的,这可能行不通。如果你想在 Wayland 上本地工作,你将不得不使用 EGL。否则,您可以强制返回 X11 并使用 GLX。

2. We have an old, _old_ fork of the togl source in our repo, we should probably look into rewriting our _toglmodule & related build infrastructure to use debian's packaged libtogl and libtogl-dev instead.

假设这_togl.cpython-310-x86_64-linux-gnu.so是您的 togl 分支,那么是的,它似乎与 GLX 相关联。

Bookworm 上的 OpenGL 问题 #2264
合作者作者

你好,很高兴在这里见到你!感谢您修复 pyopengl,并感谢您对我们的 OpenGL 混乱提出建议 :-)

_togl.cpython-310-x86_64-linux-gnu.so是从https://github.com/LinuxCNC/linuxcnc/blob/master/src/emc/usr_intf/axis/extensions/_toglmodule.c构建的,它搞笑地#includes 我们的 fork togl.c

Bookworm 上的 OpenGL 问题 #2264
swt2c 评论了 4天前

对不起,我看了。;)

如果您想走那条路,您的 togl 代码可能需要增加 EGL 支持。我快速查看了 Debian 的 togl,它看起来并没有好多少/更新多少。据我所知,togl 项目似乎已经死了。

Bookworm 上的 OpenGL 问题 #2264
合作者作者
塞布·库兹明斯基 评论了 3天前  

我们目前没有专业知识或志愿者时间来将我们的整个世界从 GLX 切换到 EGL,所以看起来我应该重新打开#2267并提倡将其作为我们近期的解决方法。

对你来说,这听起来像是最不坏的解决方案吗?@swt2c

Bookworm 上的 OpenGL 问题 #2264
合作者
彼得赖因霍尔特森 评论了 3天前 通过电子邮件
Bookworm 上的 OpenGL 问题 #2264
合作者作者

这是 Unix 上 OpenGL/GLX/EGL 景观的大量链接概述,我发现它很有用:https ://utcc.utoronto.ca/~cks/space/blog/linux/EGLAndGLXAndOpenGL?showcomments#comments

听起来我们应该立即强制 LinuxCNC 重新在 GLX 上运行(就像我们一直以来那样),而不是不一致地尝试部分在 GLX 上运行,部分在 EGL 上运行(就像我们在 11 月不小心开始做的那样)。

然后我们应该希望我们中的一个人有勺子来清理我们的 OpenGL 混乱并将我们从 GLX 切换到 EGL,因为这似乎是未来的发展方向。

也许同时从 OpenGL 切换到 OpenGL ES,以便在有时不实现 OpenGL 但实现 OpenGL ES 的小型 ARM 机器上运行得更好。

SebKuzminsky 添加了引用此问题的提交 昨天

Bookworm 上的 OpenGL 问题 #2264 SebKuzminsky 提到了这个问题 昨天
Bookworm 上的 OpenGL 问题 #2264
swt2c 评论了 昨天

我们目前没有专业知识或志愿者时间来将我们的整个世界从 GLX 切换到 EGL,所以看起来我应该重新打开#2267并提倡将其作为我们近期的解决方法。

对你来说,这听起来像是最不坏的解决方案吗?@swt2c

是的。

Bookworm 上的 OpenGL 问题 #2264
合作者
彼得赖因霍尔特森 评论了 昨天 通过电子邮件
Bookworm 上的 OpenGL 问题 #2264
贡献者

我刚刚安装了 1 月 23 日的 Debian 12“测试”版本(很确定它的日期是 1 月 23 日),并且遇到了同样的问题。我愿意尝试帮助解决这个问题,但首先,如何正确安装此处提到pyopengl ?

Bookworm 上的 OpenGL 问题 #2264
swt2c 评论了 10 小时前  

我刚刚安装了 1 月 23 日的 Debian 12“测试”版本(很确定它的日期是 1 月 23 日),并且遇到了同样的问题。我愿意尝试帮助解决这个问题,但首先,如何正确安装此处提到pyopengl ?

只需更新您的 Debian 测试。该修复程序现在正在测试中。

Bookworm 上的 OpenGL 问题 #2264
贡献者

是这个吗?

$ dpkg -l | grep -i opengl
…
ii  python3-opengl                          3.1.6+dfsg-2                    all          Python bindings to OpenGL (Python 3)

我没有其他更新可用。

Bookworm 上的 OpenGL 问题 #2264
swt2c 评论了 9 小时前 通过电子邮件
Bookworm 上的 OpenGL 问题 #2264
贡献者
喷气机 评论了 8小时前

谢谢你的确认。我遇到了一个奇怪的行为,当我登录到 VM 控制台时(我在我的 Mac 上的 Parallels VM 中这样做),我得到了“平台没有定义 GLUT 字体检索功能”,但是当我登录时却没有通过ssh -Y. 环境略有不同(例如WAYLAND_DISPLAY=在控制台上设置但不是ssh),但我不太了解这些东西,无法理解。

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

6人参加
Bookworm 上的 OpenGL 问题 #2264Bookworm 上的 OpenGL 问题 #2264Bookworm 上的 OpenGL 问题 #2264Bookworm 上的 OpenGL 问题 #2264Bookworm 上的 OpenGL 问题 #2264Bookworm 上的 OpenGL 问题 #2264

喜欢 (0)