开源改变世界!!

qtplasma 不适用于 Wayland #1486

推推 grbl 2年前 (2023-01-30) 126次浏览
打开
dwrobel 打开了这个问题 2021 年 12 月 31 日 · 10 条评论
打开

qtplasma 不适用于 Wayland#1486

dwrobel 打开了这个问题 2021 年 12 月 31 日 · 10 条评论

注释

qtplasma 不适用于 Wayland #1486
贡献者

qtplasma似乎不适用于 Fedora 35 上可用的最新 Gnome 41.2/Wayland 1.19 环境(在14a02d1上测试)。请注意,这axis在相同的环境中运行良好。

这是尝试加载metric_circles.ngs文件后 Wayland 上的屏幕截图:

qtplasma 不适用于 Wayland #1486

请注意Select按钮已被按下,但屏幕没有刷新(仍然有一个文件选择器对话框可见)。不久之后Gnome开始抱怨qtplasma没有回应:

qtplasma 不适用于 Wayland #1486

对于在会话metric_circles.ngs 中正确加载的参考:X11
qtplasma 不适用于 Wayland #1486

qtplasma 不适用于 Wayland #1486
贡献者作者
德罗贝尔 评论了 2021 年 12 月 31 日  

再来一张来自 Wayland 的截图,是在启动后直接截取的,qtplasma没有按任何按钮:
qtplasma 不适用于 Wayland #1486

请注意,屏幕的白色矩形部分似乎根本没有刷新,看起来qtplasma这部分是完全透明的,因为文本dw@t630:~/Pictures来自 Gnome 终端标题栏窗口,该窗口位于qtplasma下面我启动了它。

很可能这部分屏幕是由某些X11特定代码处理的,因此它在 Wayland 上不起作用。

qtplasma 不适用于 Wayland #1486
合作者

您能否尝试直接在终端中运行 gcode_graphics:python3 gcode_graphics.py
如果任何 gladevcp 屏幕图形显示与 wayland 一起工作,也很有趣。
他们使用很多通用代码。

qtplasma 不适用于 Wayland #1486
贡献者作者

您可以尝试直接在终端中运行 gcode_graphics 吗:python3 gcode_graphics.py

请在会话中找到附加的屏幕录像Wayland

[dw@t630 linuxcnc]$ loginctl 
SESSION  UID USER SEAT  TTY 
     16 1000 dw   seat0 tty2

1 sessions listed.
[dw@t630 linuxcnc]$ loginctl show-session 16 -p Type
Type=wayland
 Screencast.from.01-01-2022.10.14.26.AM.mp4 

Wayland控制台和图形屏幕的输出在X11会话之间几乎完全一致。

gcode_graphics.py 的代码似乎与会话无关(基于 OpenGL)但是,greppingqtvcp代码显示了其他包含X11特定代码的地方:

[dw@t630 linuxcnc]$ git grep -i -- x11 lib/python/qtvcp
lib/python/qtvcp/lib/xembed.py:# embed qt instance 'window' into X11 window 'parent'
lib/python/qtvcp/lib/xembed.py:def reparent_qt_to_x11(window, parent):
lib/python/qtvcp/lib/xembed.py:# forward events to an X11 window id
lib/python/qtvcp/lib/xembed.py:class X11ClientMessage():
lib/python/qtvcp/lib/xembed.py:        print('X11 message sent')
lib/python/qtvcp/widgets/xembed.py:            self.x11mess = xembed.X11ClientMessage(self.external_id)
lib/python/qtvcp/widgets/xembed.py:    def send_x11_message(self,):
lib/python/qtvcp/widgets/xembed.py:        self.x11mess.send_client_message()
[dw@t630 linuxcnc]$ git grep -i -- xembed lib/python/qtvcp
lib/python/qtvcp/lib/xembed.py:    # Honor XEmbed spec
lib/python/qtvcp/lib/xembed.py:    atom = d.get_atom('_XEMBED_INFO')
lib/python/qtvcp/lib/xembed.py:class XEmbedFowarding():
lib/python/qtvcp/plugins/simplewidgets_plugin.py:from qtvcp.widgets.xembed import XEmbed
lib/python/qtvcp/plugins/simplewidgets_plugin.py:# XEmbed
lib/python/qtvcp/plugins/simplewidgets_plugin.py:class XEmbedPlugin(QPyDesignerCustomWidgetPlugin):
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        super(XEmbedPlugin, self).__init__(parent)
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        return XEmbed(parent)
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        return "XEmbed"
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        return QtGui.QIcon(QtGui.QPixmap(ICON.get_path('xembed')))
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        return '<widget class="XEmbed" name="xembed" />\n'
lib/python/qtvcp/plugins/simplewidgets_plugin.py:        return "qtvcp.widgets.xembed"
lib/python/qtvcp/qt_istat.py:        # XEmbed tabs
lib/python/qtvcp/qt_makegui.py:    # These can get class patched by xembed library to catch events
lib/python/qtvcp/widgets/screen_options.py:from qtvcp.widgets.xembed import XEmbeddable
lib/python/qtvcp/widgets/screen_options.py:        # add any XEmbed tabs
lib/python/qtvcp/widgets/screen_options.py:            self.add_xembed_tabs()
lib/python/qtvcp/widgets/screen_options.py:    # XEmbed program into tabs
lib/python/qtvcp/widgets/screen_options.py:    def add_xembed_tabs(self):
lib/python/qtvcp/widgets/screen_options.py:                temp = XEmbeddable()
lib/python/qtvcp/widgets/xembed.py:from qtvcp.lib import xembed
lib/python/qtvcp/widgets/xembed.py:class XEmbeddable(QWidget, _HalWidgetBase):
lib/python/qtvcp/widgets/xembed.py:        super(XEmbeddable, self).__init__(parent)
lib/python/qtvcp/widgets/xembed.py:class XEmbed(XEmbeddable, _HalWidgetBase):
lib/python/qtvcp/widgets/xembed.py:        super(XEmbed, self).__init__(parent)
lib/python/qtvcp/widgets/xembed.py:            self.x11mess = xembed.X11ClientMessage(self.external_id)
lib/python/qtvcp/widgets/xembed.py:    ex = XEmbed()
$ git grep -i -- xset lib/python/qtvcp
lib/python/qtvcp/qt_action.py:            subprocess.Popen('xset -r {}'.format(k), stdout = subprocess.PIPE, shell = True)
lib/python/qtvcp/qt_action.py:            subprocess.Popen('xset r {}'.format(k), stdout = subprocess.PIPE, shell = True)

所有这些地方(列表可能并不详尽)Wayland很可能在会议上不起作用。

qtplasma 不适用于 Wayland #1486
合作者

Xset 用于解决某些系统上的击键问题。
xembed 用于将第三方程序嵌入到 qtvcp 窗口
中两者都应该是可选的——我认为 QtPlasmac 不会使用它们,除非有要求。

我对 Wayland 知之甚少,也不知道是否有等效的功能。

qtplasma 不适用于 Wayland #1486

设置 Seb 提议的环境变量应该可以解决 Wayland 上的这个问题。
https://github.com/LinuxCNC/linuxcnc/issues/ #2264
它让 QTplasmac 在我的 Chromebook 上运行在 Debian Bullseye 下,它已经坏了 12 个月了。

毫无疑问,最近 Bookworm 的变化导致了这个问题,之前我的解决方法是安装 XFCE 而不是默认桌面。

qtplasma 不适用于 Wayland #1486
贡献者作者

应该在 Wayland 上解决这个问题。

恐怕不会。请不要混淆两个不同的问题。

切换到 X11 会话类型解决方法,我也在初始报告中确认了这一点(搜索:“作为参考,在 X11 会话上正确加载了相同的 metric_circles.ngs:”上面)

只要 LinuxCNC 将使用 X11 特定代码(请查看“grep”输出 – 在我上面的一篇文章中),这就不会在 Wayland 会话类型上本地工作。

qtplasma 不适用于 Wayland #1486
罗德奥 评论了 2个星期前  

我不太确定..
Sebs 今天的附加帖子隔离了这个问题并解释了导致它的原因。
第2264章(评论)

我在 Bookworm 上使用 qtplasmac 很长时间了,它在 11 月停止工作,如上一期稍后所述。

Wayland 还包括用于遗留应用程序的 Xorg 服务器
参考:https ://docs.fedoraproject.org/en-US/fedora/latest/system-administrators-guide/Wayland/

在我的 chromebook 上,X11 不存在。运行该页面上的命令,确认我们正在运行 Wayland,但当 QTplasmac 运行时,会打开额外的 X11 会话。

rod@penguin:~$ echo $WAYLAND_DISPLAY
wayland-0
rod@penguin:~$ xlsclients (no output, no X11 clients running)
rod@penguin:~$ xlsclients (with qtplasmac running shows two X11 clients running)
penguin  python3.9
penguin  python3.9
rod@penguin:~$ 

我怀疑这两个会话将是主 sim 和 torch sim 窗口。

因此,运行
export PYOPENGL_PLATFORM=x11会
强制有问题的 python3-opengl 3.1.6 使用 Wayland 乐于提供的 X11。

qtplasma 不适用于 Wayland #1486
合作者

FWIW 我在我的 Bookworm VM 上尝试了export PYOPENGL_PLATFORM=x11的 Sebs 建议。
它确实可以防止错误消息并允许加载 QtPlasmaC,但它具有与之前相同的透明预览@dwrobel在第二个帖子中。

qtplasma 不适用于 Wayland #1486

FWIW 我在我的 Bookworm VM 上尝试了export PYOPENGL_PLATFORM=x11的 Sebs 建议。它确实可以防止错误消息并允许加载 QtPlasmaC,但它具有与之前相同的透明预览@dwrobel在第二个帖子中。

奇怪,我根本没有看到任何问题。我会尝试一些真正的硬件

qtplasma 不适用于 Wayland #1486

嗯,在我的 xfce 盒子上运行 tasksel 以安装 wayland,QTplasmac 屏幕变得严重损坏。我认为它有点好笑,因为它仍在使用 xfce 登录屏幕。退回到 xfce 和我的 mesa 7i76e 配置,一切正常,,,

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

还没有

发展

没有分支机构或拉取请求

4人参加
qtplasma 不适用于 Wayland #1486qtplasma 不适用于 Wayland #1486qtplasma 不适用于 Wayland #1486qtplasma 不适用于 Wayland #1486

喜欢 (0)