Talvez esse snippet possa ajudar se não houver uma solução confiável:
$ w | awk -vdp=$DISPLAY '($2 ~ dp){gsub(/.*\//, "");print $NF}'
ou talvez:
$ qdbus | grep -oPm1 '(kdm|xfce|gnome)'
Outra abordagem usando o pstree:
$ pstree -H $(pidof X) | grep -oP '(kdm|xfce|gnome)(?=.*?X)'
kdm
E mais um:
$ lsof ~/.xsession-errors | grep -oEm1 '(kde|xfce|gnome)'
kde
ou uma variante:
$ lsof ~/.xsession-errors | awk 'NR==2{print $1;quit}'
startkde