【问题标题】:Qt - how to detect whether the application is running on GNOME or KDE?Qt - 如何检测应用程序是在 GNOME 还是 KDE 上运行?
【发布时间】:2011-03-23 13:04:31
【问题描述】:

我想知道如何使用 Qt 做这样的事情 (source)。我查看了文档,但找不到任何方法来检查外部进程是否正在运行。

if [ "$(pidof ksmserver)" ]; then
   echo "KDE running."
   # KDE-specific stuff here
elif [ "$(pidof gnome-session)" ]; then
   echo "GNOME running."
   # GNOME-specific stuff here
elif [ "$(pidof xfce-mcs-manage)" ]; then
   echo "Xfce running."
   # Xfce-specific stuff here
fi

【问题讨论】:

    标签: linux qt desktop gnome kde


    【解决方案1】:

    通常你不应该这样做。通常,如果您的应用程序的行为因桌面环境而异,那么对于在它们之间切换的任何用户来说,这将是一个令人讨厌的惊喜。

    另一种选择

    使用与 DE 无关的命令,例如 xdg-open。优点:

    • 您不必自己编写逻辑(xdg-utils 已经这样做了)
    • 更加用户友好。它遵循用户的实际喜好;许多用户使用一个 DE,但更喜欢来自不同 DE 的一些应用程序。
    • 支持其他 DE,如 XFCE、LXDE、Unity 等。

    例如,不是根据当前运行的 DE 在 Firefox 或 Konqueror 中打开 URL,而是将 URL 传递给 xdg-open 以在用户的​​首选应用程序中打开它。 (用户可能是 Chromium 用户。)不要为 GNOME 和 KDE 硬编码 nautilusdolphin;而是使用xdg-open 打开路径。

    同样,对于与 DE 的其他交互形式,请尝试使用Freedesktop specifications,而不是尝试猜测 DE 正在运行什么。 moving files to the trash、添加系统托盘小程序以及将文件添加到最近的文件列表等都有标准。

    【讨论】:

      【解决方案2】:

      使用QProcess运行pidof foo,然后检查它的stdout?如果这不是您想要的,请搜索 /proc/

      【讨论】:

        【解决方案3】:

        我相信 pidof 所做的正确方法是查看 /proc 中的条目。这里还有另一个线程:Find PID of a Process by Name without Using popen() or system()

        【讨论】:

          猜你喜欢
          • 2012-05-01
          • 1970-01-01
          • 2011-02-20
          • 1970-01-01
          • 2011-01-28
          • 1970-01-01
          • 2019-08-08
          • 2021-03-10
          • 1970-01-01
          相关资源
          最近更新 更多