O principal problema com a verificação do DESKTOP_SESSION
é que ele é definido pelo gerenciador de exibição em vez da sessão da área de trabalho e está sujeito a inconsistências. Para lightdm
no Debian, os valores vêm dos nomes dos arquivos em /usr/share/xsessions/
. DESKTOP_SESSION
reflete o ambiente de área de trabalho se uma seleção específica for feita no login, no entanto, o lightdm-xsession
é sempre usado na 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 ser uma boa escolha, no entanto, ainda não está no padrão XDG e, portanto, nem sempre implementado. Veja aqui para uma discussão sobre isso. Esta resposta mostra seus valores para diferentes distros / desktops, eu também posso confirmar que ela não está disponível no XFCE.
O substituto razoável para XDG_CURRENT_DESKTOP
não existente seria tentar XDG_DATA_DIRS
. Desde que os arquivos de dados para o ambiente de desktop estejam instalados em um diretório com seu nome, essa abordagem deve funcionar. Espero que seja esse o caso de todas as distros / desktops!
Os seguintes testes (com o 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\).*//'
Para combinar com a verificação de XDG_CURRENT_DESKTOP
:
if [ "$XDG_CURRENT_DESKTOP" = "" ]
then
desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*//')
else
desktop=$XDG_CURRENT_DESKTOP
fi
desktop=${desktop,,} # convert to lower case
echo "$desktop"