qt4 应用程序无法在 Xephyr 中运行

qt4 应用程序无法在 Xephyr 中运行

我用来Xephyr以另一个用户身份运行应用程序,同时以主用户身份登录。

大多数应用程序在 中都可以正常工作Xephyr,除了qt4基于 .具体来说:

electrum
ipython qtconsole
qbittorrent

上述应用程序在普通 X 服务器中启动时可以工作,但是当我在 中启动它们时Xephyr,我只看到窗口框架,但它是空白的。

我该如何解决这个问题?

我的操作系统是 Debian Wheezy,版本号是:

xserver-xephyr    1.12.4
libqtcore4        4.8.2

以下是我开始Xephyr会话的方式:

Xephyr :1 -screen 1920x1080 -nolisten tcp -reset -terminate >/dev/null 2>&1 &
terminator --execute su - user2 -c 'DISPLAY=:1 startlxde >/dev/null 2>&1 &'

更新 我已经测试过XFCE4并且有同样的问题。 QT4 应用程序仍然无法工作,我得到一个空白窗口。例如,看看 qbittorrent 窗口的样子:

在此输入图像描述

答案1

虽然问题假设 Xephyr 运行正确(因为没有提供这方面的信息),但我至少确认 qBittorrent 在 Debian Xfce Wheezy 上的 Xephyr 中运行良好。

下面的屏幕截图显示了 Xephyr 中的 qBittorrent 2.9.8。

Debian Xfce Wheezy 上 Xephyr 中的 qBittorrent 2.9.8

这是在 Debian Xfce Wheezy 上进行测试的,并使用迄今为止可用的最新软件包libqtcore4xserver-xephyr这与问题中引用的版本类似。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.9 (wheezy)
Release:    7.9
Codename:   wheezy

$ dpkg-query -W | grep libqt
libqt4-dbus:i386    4:4.8.2+dfsg-11
libqt4-network:i386 4:4.8.2+dfsg-11
libqt4-xml:i386 4:4.8.2+dfsg-11
libqtcore4:i386 4:4.8.2+dfsg-11
libqtdbus4:i386 4:4.8.2+dfsg-11
libqtgui4:i386  4:4.8.2+dfsg-11

$ dpkg-query -W | grep xephyr
xserver-xephyr  2:1.12.4-6+deb7u6

确定问题

我发现的唯一相关搜索是错误 71421,报告“Qt5 应用程序无法与 Xephyr 配合使用”。

当尝试在 Xephyr 中运行任何 Qt5(或显然是 GTK3)应用程序时,它们不起作用(因为没有显示任何内容)。 GTK2 或 Qt4 与 GLX 应用程序(例如 glxgears)一样工作得很好。还在没有运行 DM 的独立 X 服务器上进行了测试 - Qt5 在那里工作得很好,只是在 Xephyr 中却不能。

此错误与问题案例类似,但仅影响 Qt5 应用程序。该错误是由 Qt5 引起的,并于今年 4 月下旬修复。

除此之外,没有提供有关该应用程序如何在 Xephyr 中运行的信息。

上述应用程序在普通 X 服务器中启动时可以工作,但是当我在 Xephyr 中启动它们时,我只看到窗口框架,但它是空白的。

根据引用的文本,我还有一些疑问:Xephyr 是否使用无效参数运行?或者更确切地说,应用程序是如何作为 Xephyr 中的另一个用户运行的?

如果您确实确定 Qt4 应用程序无法在 Xephyr 中运行,则可能是 Qt4 包中未报告的问题。但由于我已经确认 qBittorrent(基于 Qt4)在 Xephyr 中运行良好,这可能是“另一个用户”或 Xephyr 从当前会话运行的方式的问题。

关于 Xephyr 的使用

这些是一些在线资源,解释了如何使用 Xephyr 来完成某些任务。

  1. 赛菲尔在 ArchWiki 上。开始运行 Xephyr 的好地方,但除了在 Xephyr 中运行终端或窗口管理器之外,没有解释太多广泛的用法。

  2. 不知道如何开始使用 Xephyr。我究竟做错了什么?在 Xorg 邮件列表上,日期为 2014 年太平洋标准时间 1 月 23 日星期四 17:16:40。在 Xephyr 中运行 Xterm 的另一种方式。

  3. 如何运行多个X桌面?关于超级用户,2009 年 7 月 22 日询问。答案之一建议使用 Xephyr。与源 #1 中建议的方式类似。

  4. 多座配置/Xephyr:如何使用 Xephyr 制作多终端在维基教科书上。

  5. 来自多个 Xserver 的屏幕截图在 Unix & Linux Stack Exchange 上,于 2014 年 8 月 21 日询问。

  6. Howto:使用 Xephyr 作为单独的用户运行 Firefox(和其他东西)。这似乎是问题中暗示的最相似的用法。

我引用这些来源的原因是为了提供相关提示,可以帮助您澄清您是否在 Xephyr 中正确运行 Qt 应用程序。

话虽如此,理解第一句话“使用 Xephyr 以另一个用户身份运行应用程序,同时以主用户身份登录”有些棘手。毕竟,我没有创建“另一个用户”来测试在 Xephyr 中运行 qBittorrent。也许其他人可以给出更好的答案。

答案2

了解使用哪个命令启动 Xephyr 以及正在使用哪个窗口管理器可能会很有用。

我试过这个:

Xephyr :1 &
DISPLAY=:1 openbox &
DISPLAY=:1 qbittorrent

并获得 qbittorrent 的不完整窗口内容。尝试与 xfwm4 相同:

Xephyr :1 &
DISPLAY=:1 xfwm4 &
DISPLAY=:1 qbittorrent

然后就一切正常了,qbittorrent就可以使用了。

我无法解释为什么会有差异,但显然是有差异的。我怀疑复合有问题,并尝试在启用复合的情况下运行 Xephyr:

Xephyr +extension Composite :1 &

但这似乎没有什么区别。

编辑:xfwm4 具有合成功能,openbox 没有。也许复合仍然是关键。

相关内容