Bunu kontrol etmedeki asıl sorun DESKTOP_SESSION
, masaüstü oturumundan ziyade ekran yöneticisi tarafından ayarlanması ve tutarsızlıklara maruz kalmasıdır. İçin lightdm
Debian üzerinde, değerler altında dosyaların adlarında alınması /usr/share/xsessions/
. DESKTOP_SESSION
oturum açma sırasında belirli bir seçim yapıldığında masaüstü ortamını yansıtır, ancak lightdm-xsession
her zaman varsayılan oturum kullanılır.
GDMSESSION
Başka bir seçenek, ancak benzer bir çıkmaz var gibi görünüyor (benim için aynı değerde DESKTOP_SESSION
).
XDG_CURRENT_DESKTOP
iyi bir seçim gibi görünüyor, ancak şu anda XDG standardında değil ve bu nedenle her zaman uygulanmıyor. Bunun tartışması için buraya bakın . Bu cevap , farklı dağıtım / masaüstü bilgisayarlar için değerlerini gösteriyor, XFCE'de şu anda benim için mevcut olmadığını da teyit edebilirim.
XDG_CURRENT_DESKTOP
Mevcut değil için makul bir geri dönüş denemek olacaktır XDG_DATA_DIRS
. Masaüstü ortamı için veri dosyalarının adını taşıyan bir dizine kurulması şartıyla bu yaklaşım çalışmalıdır. Bu umarım tüm dağıtım / masaüstü bilgisayarlar için geçerli olacaktır!
Aşağıdaki (GNU grep ile) XFCE, KDE ve Gnome için yapılan testler:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
POSIX uyumlu:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Kontrol ile birleştirmek için 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"