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 lightdm
Debian, os valores vêm dos nomes dos arquivos em /usr/share/xsessions/
. DESKTOP_SESSION
reflete o ambiente da área de trabalho se uma seleção específica é feita no logon, no entanto, lightdm-xsession
sempre é usada a sessão padrão.
GDMSESSION
é outra opção, mas parece ter uma situação semelhante (é o mesmo valor que DESKTOP_SESSION
para mim).
XDG_CURRENT_DESKTOP
parece 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_DESKTOP
nã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"