Vấn đề chính với việc kiểm tra DESKTOP_SESSION
là nó được đặt bởi trình quản lý hiển thị thay vì phiên máy tính để bàn và có thể không nhất quán. Đối với lightdm
Debian, các giá trị đến từ tên của các tệp trong /usr/share/xsessions/
. DESKTOP_SESSION
phản ánh môi trường máy tính để bàn nếu một lựa chọn cụ thể được thực hiện khi đăng nhập, tuy nhiên lightdm-xsession
luôn được sử dụng phiên mặc định.
GDMSESSION
là một lựa chọn khác, nhưng dường như có một tình huống tương tự (nó có cùng giá trị DESKTOP_SESSION
với tôi).
XDG_CURRENT_DESKTOP
có vẻ như là một lựa chọn tốt, tuy nhiên hiện tại nó không nằm trong tiêu chuẩn XDG và do đó không phải lúc nào cũng được thực hiện. Xem ở đây để thảo luận về điều này. Câu trả lời này hiển thị các giá trị của nó cho các bản phân phối / máy tính để bàn khác nhau, tôi cũng có thể xác nhận rằng nó hiện không có sẵn cho tôi trên XFCE.
Dự phòng hợp lý cho việc XDG_CURRENT_DESKTOP
không tồn tại sẽ là thử XDG_DATA_DIRS
. Được cung cấp các tệp dữ liệu cho môi trường máy tính để bàn được cài đặt trong một thư mục mang tên của nó, phương pháp này sẽ hoạt động. Điều này hy vọng sẽ là trường hợp cho tất cả các distro / máy tính để bàn!
Các thử nghiệm sau (với GNU grep) cho XFCE, KDE và Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Tương thích POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Để kết hợp với kiểm tra 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"