Bash
如何在 bash 腳本中檢測桌面環境?
我正在編寫一個
bash
腳本,它需要知道哪個桌面環境(XFCE、Unity、KDE、LXDE、Mate、Cinnamon、GNOME2、GNOME3、…)正在執行。我怎樣才能獲得這些資訊?
檢查的主要問題
DESKTOP_SESSION
是它是由顯示管理器而不是桌面會話設置的,並且會出現不一致。對於lightdm
Debian,這些值來自/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"