Masalah utama dengan memeriksa DESKTOP_SESSION
adalah bahwa hal itu diatur oleh manajer tampilan daripada sesi desktop dan tunduk pada inkonsistensi. Untuk lightdm
di Debian, nilai berasal dari nama file di bawah /usr/share/xsessions/
. DESKTOP_SESSION
mencerminkan lingkungan desktop jika pilihan tertentu dibuat saat login, namun lightdm-xsession
selalu menggunakan sesi default.
GDMSESSION
adalah pilihan lain, tetapi tampaknya memiliki kesulitan yang sama (itu adalah nilai yang sama dengan DESKTOP_SESSION
saya).
XDG_CURRENT_DESKTOP
sepertinya 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_DESKTOP
tidak 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"