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

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

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 

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

通常你不应该这样做。 一般来说,如果您的应用程序在桌面环境下的行为不同,那么任何在它们之间切换的用户都将感到惊讶。

替代方案

使用DE-agnostic命令,如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规范 ,而不是试图猜测DE正在运行。 用于将文件移动到垃圾箱 ,添加系统托盘小程序以及将文件添加到“最近使用的文件”列表等标准。

我相信做pidof的正确方法是查看/ proc中的条目。 这里有另一个线程:在不使用popen()或system()的情况下,按名称查找进程的PID。