如何强制通过 sudo 运行的 Qt 应用程序使用用户主题/字体配置?

如何强制通过 sudo 运行的 Qt 应用程序使用用户主题/字体配置?

每个人。

我正在用 Qt5 开发应用程序,但它需要低级硬件访问,因此需要以 root 身份执行。我的目标操作系统是 Debian (ARM) 和 Ubuntu (x86)。

问题是,所有以 root 身份执行的应用程序(通过 sudo)都使用 root 设置和环境。

我需要以某种方式强制 Qt 应用程序以与普通用户相同的主题和字体运行。

是否有可能实现这一点?比如通过带有附加执行参数和命令的 shell 脚本执行?

以下截图显示了差异:

Qt 应用程序通过 sudo 以 root 身份运行

以用户身份运行的 Qt 应用程序

答案1

您的用户主题位于~/.themes您的主目录中,root 不会看到该目录。系统范围的主题始终可以正常工作/usr/share/themes

您可以打开终端并输入:

sudo ln -s ~/.themes /root/.themes

这样,root用户和普通用户将共享主题目录。

如果需要,您也可以对字体和图标首选项执行相同的操作:

sudo ln -s ~/.icons /root/.icons
sudo ln -s ~/.fonts /root/.fonts

唯一的缺点是,当以 root 权限运行应用程序时,您将没有任何视觉提示来提醒您。

答案2

不幸的是,在最近的发行版中,似乎无法在较新的 Qt 版本中实现这一点。问题描述如下关联适用于 Arch,但建议的解决方法不适用于 Ubuntu/Debian。

但是找到了解决方法,如果您想在根 Qt 应用程序中实现 100% 静态设计(在所有机器上),那么这可能更好。

您需要为应用程序指定自定义 Qt 样式表和自定义样式:

sudo ./QtApplication -style Adwaita -stylesheet=./stylesheet.css

系统可用样式位于 /usr/lib/x86_64-linux-gnu/qt5/plugins/styles/ 。就我而言,可用样式为 Adwaita、Breeze 和 Oxygen。这些样式仅影响 UI 元素的样式 - 例如按钮、列表、拨号盘等。要应用自定义 UI 颜色和字体,我使用了自定义样式表。我根据此编写了自己的样式表适用于 QtCreator 的自定义样式表

不确定如何应用图标主题,但对我来说这不是什么大问题。

这将强制应用程序以完全自定义的设计运行,无论本地样式和字体如何设置。它可以在用户和 root 上使用

相关内容