Qt - 如何检测应用程序是否在GNOME或KDE上运行?

时间:2010-07-31 03:37:12

标签: linux qt desktop gnome kde

我想知道如何使用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

3 个答案:

答案 0 :(得分:5)

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

替代

使用像xdg-open这样的与DE无关的命令。优点:

  • 您不必自己编写逻辑(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标准,添加系统托盘小程序,以及将文件添加到“最近的文件”列表等。

答案 1 :(得分:2)

使用QProcess运行pidof foo,然后检查其标准输出?如果这不是您想要的,请搜索/proc/

答案 2 :(得分:1)

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