English 中文(简体)
Qt - how to detect whether the application is running on GNOME or KDE?
原标题:

I was wondering how I could do something like this (source) using Qt. I looked through the documentation but couldn t find any method to check if an external process is running.

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
最佳回答

Use QProcess to run pidof foo, then check its stdout? If this is not what you want, search /proc/.

问题回答

Normally you shouldn t do this. Generally, if your application behaves differently depending on desktop environment, that will be a nasty surprise for any user that switches between them.

The alternative

Use DE-agnostic commands like xdg-open. Advantages:

  • You don t have to write the logic yourself (xdg-utils already has done this)
  • More user-friendly. It follows the user s actual preferences; many users use one DE but prefer some applications from a different DE.
  • Supports other DEs like XFCE, LXDE, Unity, etc..

For example, instead of opening a URL in Firefox or Konqueror according to the currently-running DE, pass the URL to xdg-open to open it in the user s preferred application. (The user might be a Chromium user.) Don t hard-code nautilus or dolphin for GNOME and KDE; instead open the path using xdg-open.

Similarly, for other forms of interaction with the DE, try to use Freedesktop specifications, rather than trying to guess what DE is running. Standards exist for moving files to the trash, adding system tray applets, and adding files to the Recent Files list, among others.

I believe the correct way to do what pidof does is to look at entries in /proc. There s another thread on this here: Find PID of a Process by Name without Using popen() or system()





相关问题
Capture desktop without my window

I want to create a recording of desktop content, but without a certain window. The role of this window is to provide a text that will be read, while recording desktop changes. Any suggestions?

Logout from an desktop application to change user in C#.net

I have designed an desktop application using C#.net that has many users. Each USer has specific rights. The User logs into the system when the application first starts and the UserID number is stored ...

Programmatically take ScreenShot of Desktop in Ruby?

I asked this question about taking a picture of a webpage programmatically, and I ve downloaded and got webkit2png working (taking pictures of HTML pages like blogs and whatnot). So cool, thanks for ...

热门标签