O principal problema ao verificar o DESKTOP_SESSIONé que ele é definido pelo gerenciador de exibição e não pela sessão da área de trabalho e está sujeito a inconsistências. Para o lightdmDebian, os valores vêm dos nomes dos arquivos em /usr/share/xsessions/. DESKTOP_SESSIONreflete o ambiente da área de trabalho se uma seleção específica é feita no logon, no entanto, lightdm-xsessionsempre é usada a sessão padrão.
GDMSESSIONé outra opção, mas parece ter uma situação semelhante (é o mesmo valor que DESKTOP_SESSIONpara mim).
XDG_CURRENT_DESKTOPparece uma boa escolha, no entanto, atualmente não está no padrão XDG e, portanto, nem sempre é implementado. Veja aqui uma discussão sobre isso. Esta resposta mostra seus valores para diferentes distros / desktops. Também posso confirmar que atualmente não está disponível para mim no XFCE.
O fallback razoável por XDG_CURRENT_DESKTOPnão existir seria tentar XDG_DATA_DIRS. Desde que os arquivos de dados para o ambiente da área de trabalho sejam instalados em um diretório com seu nome, essa abordagem deve funcionar. Espero que este seja o caso de todas as distros / desktops!
Os seguintes testes (com GNU grep) para XFCE, KDE e Gnome:
echo "$XDG_DATA_DIRS" | grep -Eo 'xfce|kde|gnome'
Compatível com POSIX:
echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/'
Para combinar com a verificação 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"