जाँच के साथ मुख्य समस्या DESKTOP_SESSIONयह है कि यह डेस्कटॉप सत्र के बजाय प्रदर्शन प्रबंधक द्वारा निर्धारित किया गया है और विसंगतियों के अधीन है। के लिए lightdmडेबियन पर, मूल्यों के अंतर्गत फ़ाइलें के नाम से आते हैं /usr/share/xsessions/। DESKTOP_SESSIONडेस्कटॉप वातावरण को दर्शाता है यदि लॉग में एक विशिष्ट चयन किया जाता है, हालांकि lightdm-xsessionहमेशा डिफ़ॉल्ट सत्र का उपयोग किया जाता है।
GDMSESSIONएक और विकल्प है, लेकिन ऐसा लगता है कि एक समान विधेय है (यह DESKTOP_SESSIONमेरे लिए उतना ही मूल्य है)।
XDG_CURRENT_DESKTOPएक अच्छे विकल्प की तरह दिखता है, हालांकि यह वर्तमान में एक्सडीजी मानक में नहीं है और इस तरह हमेशा लागू नहीं होता है। इसकी चर्चा के लिए यहाँ देखें । यह उत्तर अलग-अलग डिस्ट्रो / डेस्कटॉप के लिए अपने मूल्यों को दिखाता है, मैं यह भी पुष्टि कर सकता हूं कि यह वर्तमान में मेरे लिए एक्सएफसीई पर उपलब्ध नहीं है।
XDG_CURRENT_DESKTOPमौजूदा के लिए उचित वापसी की कोशिश करने के लिए होगा XDG_DATA_DIRS। बशर्ते डेस्कटॉप वातावरण के लिए डेटा फ़ाइलों को एक निर्देशिका में स्थापित किया गया है जिसका नाम असर है, यह दृष्टिकोण काम करना चाहिए। यह उम्मीद है कि सभी distros / डेस्कटॉप के लिए मामला होगा!
XFCE, केडीई और सूक्ति के लिए निम्नलिखित (GNU grep के साथ) परीक्षण:
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"