Bash

如何在 bash 腳本中檢測桌面環境?

  • April 20, 2021

我正在編寫一個bash腳本,它需要知道哪個桌面環境(XFCE、Unity、KDE、LXDE、Mate、Cinnamon、GNOME2、GNOME3、…)正在執行。

我怎樣才能獲得這些資訊?

檢查的主要問題DESKTOP_SESSION是它是由顯示管理器而不是桌面會話設置的,並且會出現不一致。對於lightdmDebian,這些值來自/usr/share/xsessions/. DESKTOP_SESSION如果在登錄時做出特定選擇,則反映桌面環境,但lightdm-xsession始終使用預設會話。

GDMSESSION是另一種選擇,但似乎有類似的困境(它與DESKTOP_SESSION我的價值相同)。

XDG_CURRENT_DESKTOP看起來是一個不錯的選擇,但是它目前不在XDG 標準中,因此並不總是被實施。有關此問題的討論,請參見此處。這個答案顯示了它對不同發行版/桌面的值,我還可以確認它目前在 XFCE 上對我不可用。

不存在的合理回退XDG_CURRENT_DESKTOP是嘗試XDG_DATA_DIRS. 如果桌面環境的數據文件安裝在帶有其名稱的目錄中,這種方法應該可以工作。希望所有發行版/台式機都是這種情況!

以下(使用 GNU grep)測試 XFCE、KDE ​​和 Gnome:

echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'

POSIX 兼容:

echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'

結合檢查XDG_CURRENT_DESKTOP

if [ "$XDG_CURRENT_DESKTOP" = "" ]
then
 desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
 desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "$desktop"

引用自:https://unix.stackexchange.com/questions/116539