代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

qt-如何检测应用程序是否在gnome或kde上运行?

  •  5
  • Jake Petroules  · 技术社区  · 14 年前

    我在想我怎么能做这样的事( source )使用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
    
    3 回复  |  直到 12 年前
        1
  •  2
  •   Mechanical snail Rajani Dhawan    12 年前

    使用qprocess运行 pidof foo ,然后检查它的标准输出?如果这不是你想要的,搜索 /proc/ .

        2
  •  5
  •   Mechanical snail Rajani Dhawan    12 年前

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

    替代方案

    使用诸如 xdg-open . 优势:

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

    例如,不是根据当前运行的de在firefox或konquerror中打开一个URL,而是将该URL传递给 XDG开放 在用户首选的应用程序中打开它。(用户可能是Chromium用户。)不要硬编码 nautilus dolphin 对于gnome和kde;而是使用 XDG开放 .

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

        3
  •  1
  •   Community CDub    8 年前

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