我試圖檢測我是在Gnome還是KDE桌面環境中運行。以編程方式在Linux中檢測桌面環境C
我知道我可以通過ps -aux進行檢查,並對grep或者gnome或KDE進行檢查,但這並不好:1)如果我在gnome桌面上,但是我已經加載了KDE庫? 2)我需要從代碼中執行,而不使用system()或popen()或其他fork/exec組合。
我可以讀取文件或env。變量或其他。
任何想法?
謝謝,任何幫助表示讚賞。
我試圖檢測我是在Gnome還是KDE桌面環境中運行。以編程方式在Linux中檢測桌面環境C
我知道我可以通過ps -aux進行檢查,並對grep或者gnome或KDE進行檢查,但這並不好:1)如果我在gnome桌面上,但是我已經加載了KDE庫? 2)我需要從代碼中執行,而不使用system()或popen()或其他fork/exec組合。
我可以讀取文件或env。變量或其他。
任何想法?
謝謝,任何幫助表示讚賞。
挑選你所關心的一組窗口管理器:Metacity的,xfwm4,flwm等,您可以尋找那些在你的grep ps
(或通過/ proc搜索)。 Gnome庫並不一定意味着某人運行了整個gnome桌面環境,但是Gnome和KDE不是窗口管理器。如果WM是你關心的,那就去找那些。
至少在openSUSE有環境變量窗口管理器,WINDOW_MANAGER
[email protected]:~> echo $WINDOWMANAGER
/usr/bin/startkde
[email protected]:~> echo $WINDOW_MANAGER
/usr/bin/startkde
[email protected]:~>
如果你不介意不一致的UI,你可以靜態鏈接你的窗口工具包。它仍然可以正常工作。您還可以簡單地捆綁共享庫並確保LD_LIBRARY_PATH指向它們。如果你實際上想要實現一些可以動態鏈接到不同工具包的東西,你可以嘗試一下dlopen/dlsym,但那會很瘋狂。
如果你關心跨平臺/交叉部件工具包的一致性,你最好的選擇就是呈現本機外觀部件本身; Swing可以使相同的代碼看起來像GTK或Windows。我知道你沒有使用Java,但在C中沒有簡單的解決方案(Swing只會讓你處於中途,因爲它不會執行Qt)。
不知道這是多麼標準,但它在Fedora 21,Slackware 14.1和Ubuntu 14.04中是一致的。 (更多歡迎)
嘗試
$ echo $DESKTOP_SESSION
希望這有助於。
如果是xfce會怎麼樣?離子?二級工人? DWM ....? – cthom06 2010-08-16 19:51:51
由於您只是想檢測gnome vs kde,是否有一組特定的發行版或配置?該解決方案必須具有多普遍性? – nmichaels 2010-08-16 20:15:41
你爲什麼想這樣做?你有可能在這裏考慮一個不適當的... – dmckee 2010-08-16 20:37:59