2010-08-16 27 views
9

我試圖檢測我是在Gnome還是KDE桌面環境中運行。以編程方式在Linux中檢測桌面環境C

我知道我可以通過ps -aux進行檢查,並對grep或者gnome或KDE進行檢查,但這並不好:1)如果我在gnome桌面上,但是我已經加載了KDE庫? 2)我需要從代碼中執行,而不使用system()或popen()或其他fork/exec組合。

我可以讀取文件或env。變量或其他。

任何想法?

謝謝,任何幫助表示讚賞。

+6

如果是xfce會怎麼樣?離子?二級工人? DWM ....? – cthom06 2010-08-16 19:51:51

+0

由於您只是想檢測gnome vs kde,是否有一組特定的發行版或配置?該解決方案必須具有多普遍性? – nmichaels 2010-08-16 20:15:41

+0

你爲什麼想這樣做?你有可能在這裏考慮一個不適當的... – dmckee 2010-08-16 20:37:59

回答

1

挑選你所關心的一組窗口管理器:Metacity的,xfwm4,flwm等,您可以尋找那些在你的grep ps(或通過/ proc搜索)。 Gnome庫並不一定意味着某人運行了整個gnome桌面環境,但是Gnome和KDE不是窗口管理器。如果WM是你關心的,那就去找那些。

+0

也許我沒有正確解釋自己:有沒有辦法知道我在gnome環境或KDE上運行? – Jessica 2010-08-16 20:51:18

+0

啊。在這種情況下,你可能想編輯你的問題來說「桌面環境」而不是「窗口管理器」。 – nmichaels 2010-08-16 21:02:53

+0

完成。你現在有答案嗎? – Jessica 2010-08-17 12:49:27

1

至少在openSUSE有環境變量窗口管理器,WINDOW_MANAGER

[email protected]:~> echo $WINDOWMANAGER 
/usr/bin/startkde 
[email protected]:~> echo $WINDOW_MANAGER 
/usr/bin/startkde 
[email protected]:~> 
+0

我不確定,但我認爲它也適用於gentoo – 2010-08-16 20:02:35

+0

它不在Ubuntu上。 – Job 2010-08-16 20:03:36

+1

是的,謝謝,但它不適用於Ubuntu,Fedora,Redhat,Suse ... – Jessica 2010-08-16 20:50:20

0

如果你不介意不一致的UI,你可以靜態鏈接你的窗口工具包。它仍然可以正常工作。您還可以簡單地捆綁共享庫並確保LD_LIBRARY_PATH指向它們。如果你實際上想要實現一些可以動態鏈接到不同工具包的東西,你可以嘗試一下dlopen/dlsym,但那會很瘋狂。

如果你關心跨平臺/交叉部件工具包的一致性,你最好的選擇就是呈現本機外觀部件本身; Swing可以使相同的代碼看起來像GTK或Windows。我知道你沒有使用Java,但在C中沒有簡單的解決方案(Swing只會讓你處於中途,因爲它不會執行Qt)。

+0

我只需要知道我是否在任一桌面上運行。原因是我可以向用戶提供基於該信息運行某些程序的選項,但是我的程序是一個簡單的命令行,沒有鏈接到QT或GTK – Jessica 2010-08-16 20:49:10

+0

然後使用處理列表有一些不好的情況。僅僅因爲當前用戶正在運行[Gnome | KDE]並不意味着該進程被附加到該顯示器上(用戶可以運行多個X會話並可以在其中使用不同的桌面環境和窗口管理器)... – dmckee 2010-08-16 20:58:57

+0

我知道。因此這裏的問題 – Jessica 2010-08-16 21:02:54

0

不知道這是多麼標準,但它在Fedora 21,Slackware 14.1和Ubuntu 14.04中是一致的。 (更多歡迎)

嘗試

$ echo $DESKTOP_SESSION 

希望這有助於。

相關問題