Masalah utama dengan memeriksa DESKTOP_SESSIONadalah bahwa hal itu diatur oleh manajer tampilan daripada sesi desktop dan tunduk pada inkonsistensi. Untuk lightdmdi Debian, nilai berasal dari nama file di bawah /usr/share/xsessions/. DESKTOP_SESSIONmencerminkan lingkungan desktop jika pilihan tertentu dibuat saat login, namun lightdm-xsessionselalu menggunakan sesi default.
GDMSESSIONadalah pilihan lain, tetapi tampaknya memiliki kesulitan yang sama (itu adalah nilai yang sama dengan DESKTOP_SESSIONsaya).
XDG_CURRENT_DESKTOPsepertinya pilihan yang baik, namun saat ini tidak dalam standar XDG dan dengan demikian tidak selalu diterapkan. Lihat di sini untuk diskusi tentang ini. Jawaban ini menunjukkan nilainya untuk distro / desktop yang berbeda, saya juga dapat mengonfirmasi saat ini tidak tersedia untuk saya di XFCE.
Fallback masuk akal untuk XDG_CURRENT_DESKTOPtidak ada akan mencoba XDG_DATA_DIRS. Asalkan file data untuk lingkungan desktop dipasang di direktori bertuliskan namanya, pendekatan ini harus bekerja. Mudah-mudahan ini akan menjadi kasus untuk semua distro / desktop!
Tes berikut (dengan GNU grep) untuk XFCE, KDE dan Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Kompatibel dengan POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Untuk menggabungkan dengan memeriksa 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"