我正在 QT5(适用于 X11)中编写一个自定义应用程序,它将在嵌入式设置中使用。当系统启动时,我希望系统启动到我的应用程序,应用程序的主窗口实际上是桌面背景,任何其他窗口都应该在其之上打开,并且应该具有可用的正常窗口管理设施。
该系统基于 Debian buster,我如何将各个部分组合在一起才能实现这一点?
答案1
这个难题有几个部分,一个欢迎程序(我使用 sddm),一个窗口管理器(我使用 openbox)和应用程序本身。
首先是应用程序本身,我们需要告诉窗口管理器我们的窗口是桌面背景,这是最难找到详细信息的部分,但最终查看 pcmanfm-qt 的源代码,进行一些实验并谷歌搜索其中的常量之一它让我找到了关于堆栈溢出的问题。我最终在主窗口的构造函数中得到了以下代码。我将此代码放在命令行参数后面,因此仍然可以以传统方式运行应用程序。
setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
setAttribute(Qt::WA_X11NetWmWindowTypeDesktop);
setFixedSize(QApplication::desktop()->size());
注意:我最初使用“调整大小”而不是 setFixedSize,直到我尝试使用布局管理器,布局管理器决定扩展我的“桌面窗口”,使其不适合屏幕。
为了将欢迎程序、窗口管理器和我的应用程序结合在一起,需要定义一个自定义“会话”,我这样做是两个文件,第一个是位于 /usr/bin/starthhs 的 shell 脚本
#!/bin/bash
openbox --startup '/home/ubilinux/cvx86/gui asdesktop'
第二个是“桌面文件”,位于 /usr/share/xsessions/handheldhyperspec.desktop
[Desktop Entry]
Type=Application
Exec=starthhs
TryExec=starthhs
Name=Handheld hyperspec
Comment=Handheld hyperspec
最后,我需要将欢迎程序配置为自动登录到我新定义的会话。为此,我创建了一个包含以下内容的文件 /etc/sddm.conf.d/autologin。
[Autologin]
User=root
Session=handheldhyperspec.desktop
Relogin=