【问题标题】:Window appearance without style in C++ Qt application scheduled in Ubuntu在 Ubuntu 中安排的 C++ Qt 应用程序中没有样式的窗口外观
【发布时间】:2014-08-22 05:29:28
【问题描述】:

当我通常从命令行运行我的应用程序时,它看起来像这样:

但是,当我使用 crontab(或“at”命令)安排命令时,窗口如下所示:

我安排的命令如下:“export DISPLAY=:0.0 && myprogram”。我使用 Ubuntu 12.04 64 位。

知道如何获得预定窗口的漂亮外观吗?谢谢你。

【问题讨论】:

  • 答案已更新,请查看我添加了另一种可能的方法来解决您的问题。

标签: c++ qt ubuntu cron


【解决方案1】:

我认为当您使用 crontab 运行程序时,该程序正在与其他环境一起运行。没有您已经进行的配置的环境。

例如,在您的用户空间中,您说QT 主题,您希望它看起来像GNOME。

如果用户 root 运行应用程序,则可能会发生这种情况,因为 root 具有不同的环境,因此 QT gui 主题/外观的设置不同。

可能的解决方案,尝试指定将运行应用程序的环境。

另一种解决方案可以通过编程方式选择主题,here 你有关于该主题的讨论。

测试:尝试自己以 root 身份运行应用,并比较结果。不要使用sudo。试试su -c。

【讨论】:

  • 否,当您通过 crontab 运行程序时,它将以用户身份运行,除非您在更新/创建 crontab 记录时使用 sudo
  • 该命令确实在我的 crontab 中(不是 root 的),但是,当我以 root 身份运行该命令时,问题被复制了。
  • @RaydelMiranda 因为环境不同
  • 那么,crontab 在不同的环境中运行脚本对吧?
  • @RaydelMiranda 对,但不适用于 root,除非您使用 crontab 作为 root
【解决方案2】:

从 crontab 启动的程序有不同的环境。因此,您可以创建一个 shell 脚本来获取您的配置文件,例如使用 bash:

#!/bin/bash
source ~/.profile
export DISPLAY=:0.0
exec myprogram

然后从 crontab 运行它。如果您通常不使用 bash,则可能需要将脚本与您使用的 shell 一起使用。

另一种方法是调查您的个人资料并找出环境中的哪些差异会改变窗口外观。然后在此类脚本中导出该变量,或将其直接放入 crontab 作业中,就像您对变量 DISPLAY 所做的那样。

【讨论】:

  • 如果可能,我宁愿避免复制整个配置文件。尽管如此,我还是尝试放置一些单独的变量,例如 DISPLAY(我省略了复制会话 ID 等内容),但不幸的是我找不到导致问题的那个。
  • @AlexSee 首先确保.profile 确实改变了窗口外观。然后你可以查看那里并找到哪个特定变量改变了它。否则转储您当前的环境:set > env.sh 并检查它是否有效。然后你可以从那里删除变量并找到罪魁祸首。
  • 此解决方案有效。或者,是否有可能以某种方式从 crontab 获取配置文件(类似于调度“source ~/.profile; exec myprogram”,这不起作用)?
  • source ~/.profile 对我来说没有机会使用 GUI 样式。有人找到改变windows显示样式的环境变量了吗?
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多