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

Jak*_*les 5 linux desktop qt kde gnome

我想知道如何使用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
Run Code Online (Sandbox Code Playgroud)

Mec*_*ail 5

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

替代方案

使用DE-agnostic命令,如xdg-open.好处:

  • 你不必自己编写逻辑(xdg-utils已经完成了这个)
  • 更加人性化.它遵循用户的实际偏好; 许多用户使用一个DE但更喜欢来自不同DE的一些应用程序.
  • 支持其他DE,如XFCE,LXDE,Unity等.

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

同样,对于与DE的其他形式的交互,尝试使用Freedesktop规范,而不是试图猜测DE正在运行什么.存在将文件移动到废纸篓,添加系统托盘小程序以及将文件添加到"最近的文件"列表等的标准.


sch*_*acs 2

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