ปัญหาหลักของการตรวจสอบDESKTOP_SESSION
คือตั้งค่าโดยตัวจัดการการแสดงผลมากกว่าเซสชันเดสก์ท็อปและขึ้นอยู่กับความไม่สอดคล้องกัน สำหรับlightdm
ใน Debian /usr/share/xsessions/
ค่ามาจากชื่อของไฟล์ภายใต้ DESKTOP_SESSION
แสดงถึงสภาพแวดล้อมเดสก์ท็อปหากมีการเลือกเฉพาะเมื่อเข้าสู่ระบบอย่างไรก็ตามlightdm-xsession
จะใช้เซสชันเริ่มต้นเสมอ
GDMSESSION
เป็นอีกตัวเลือกหนึ่ง แต่ดูเหมือนว่าจะมีสถานการณ์ที่คล้ายคลึงกัน (เป็นค่าเดียวDESKTOP_SESSION
กับฉัน)
XDG_CURRENT_DESKTOP
ดูเหมือนจะเป็นทางเลือกที่ดี แต่ปัจจุบันไม่ได้อยู่ในมาตรฐาน XDGและไม่ได้นำไปใช้เสมอ ดูที่นี่สำหรับการสนทนานี้ คำตอบนี้แสดงค่าของ distros / เดสก์ท็อปที่แตกต่างกันฉันยังสามารถยืนยันได้ว่า XFCE ไม่สามารถใช้งานได้ในขณะนี้
ทางเลือกที่เหมาะสมสำหรับการไม่ได้ที่มีอยู่จะไปลองXDG_CURRENT_DESKTOP
XDG_DATA_DIRS
หากมีการติดตั้งไฟล์ข้อมูลสำหรับสภาพแวดล้อมเดสก์ท็อปในไดเรกทอรีที่มีชื่อแนวทางนี้ควรใช้งานได้ หวังว่านี่จะเป็นกรณีสำหรับ distros / เดสก์ท็อปทั้งหมด!
การทดสอบ (พร้อม grep GNU) ต่อไปนี้สำหรับ 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"