Estou escrevendo um bash
script que precisa saber qual ambiente de área de trabalho (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ...) está em execução.
Como posso obter essas informações?
bash
desktop-environment
bash-script
Serge Stroobandt
fonte
fonte
xplanet
e gostaria de atualizar automaticamente o plano de fundo da área de trabalho com comandos específicos para o ambiente da área de trabalho. Se você deseja postar uma resposta para esse problema , siga o link.Respostas:
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 olightdm
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 queDESKTOP_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 tentarXDG_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:
Compatível com POSIX:
Para combinar com a verificação
XDG_CURRENT_DESKTOP
:fonte
apt-file
também é uma boa ferramenta para ver onde os vários desktops se instalam.XDG_DATA_DIRS
não existe ou apenas não contém nada de útil?||
estilo. Ainda esta pergunta foi feita em outros sites de SE, acho que temos o melhor conjunto de respostas.Método # 1 - $ DESKTOP_SESSION
Eu acho que você pode descobrir interrogando a variável de ambiente
$DESKTOP_SESSION
. Não tenho muita certeza de quão amplamente isso é suportado, mas em meus testes limitados parece estar disponível no Fedora e Ubuntu.Outra opção é a
$XDG_SESSION_DESKTOP
variável.Método # 2 - wmctrl
Também existe esse método que faz uso
wmctrl
.Referências
fonte
$GDMSESSION
me deixa nervosa, pois provavelmente é voltada apenas para o DE que está usando o DE baseado no GDM ou no GNOME. GDM = Gerenciador de exibição do GNOME.DESKTOP_SESSION
no xfce.default
(hortelã 15)default
isso. Uma instalação padrão do GNOME 3.$DESKTOP_SESSION
mostradefault
para o KDE no Fedora 20.Você pode usar esse script bash . Ele pode detectar o nome e a versão do ambiente da área de trabalho.
fonte
ps -e | grep -E '^.* xfce4-session$' > /dev/null
(($? == 0)) && ...
GNOME Shell 3.26.2
eu chegueiUNKNOWN
. Nenhuma saída dognome-session --version
trabalho para mim é quegnome-shell --version | awk '{print $3}'
eu também não recebi nadaps -e | grep -E '^.* gnome-session$'
. Isso parece ser por causa de-b
no final degnome-session-b
. Removendo os$
trabalhos ou simplesmenteps -e | grep 'gnome-session'
. Com isso, o script está funcionando. Eu receboGNOME 3.26.2
Isso provavelmente depende da situação. Se você souber qual gerenciador de exibição é usado, pode ser que este coloque essas informações em uma variável de ambiente.
Se não for esse o caso, acho que você deve verificar todos os DEs que deseja identificar. Todos eles devem apresentar suas próprias variáveis de ambiente.
fonte
echo ${DESKTOP_SESSION:0:1}
faria o truque? Tanto quanto pude testar, ele retornau
para o Unity ex
para o XFCE. Esperamos que algumas pessoas entrem em sintonia com o KDE e outros desktops.echo ${DESKTOP_SESSION} kde-plasma-safe
para o meu KDE. Por que "seguro" ...Se a variável ambiental
XDG_CURRENT_DESKTOP
estiver disponível, você deve informar.fonte
Você pode procurar por
Xorg
processos em execução . O pai disso deve ser seu gerente de exibição. Seus descendentes devem fornecer uma indicação do ambiente de área de trabalho em execução. No meu sistema, o gerenciador de exibição se executa (com parâmetros diferentes). Isso então gera ox-session-manager
que está vinculadoxfce4-session
. Isso pode ser suficiente, mas todos os filhos disso estão relacionados ao meu ambiente de área de trabalho. Encontrá-los através da árvore de processos deve ser a melhor maneira de excluir elementos de outros sistemas de janelas iniciados por vários programas (ou talvez deliberadamente).Meu primeiro pensamento foi que seria melhor procurar o gerenciador de janelas associado ao seu ambiente de área de trabalho, mas geralmente um diferente pode ser configurado para ser executado (por exemplo,
xmonad
no Gnome), para que isso não seja robusto. O melhor a procurar é provavelmente aquele que gerencia a área de trabalho real, por exemplo,xfdesktop
ou qualquer elemento do ambiente de área de trabalho que você realmente precise para que seu script funcione :)Exemplo
Aqui está um exemplo usando procps-ng (
-C
e--ppid
não é POSIX). Ele assume que é apenas uma instância deXorg
.Este é apenas um exemplo que funciona na área de trabalho do xfce. Um exemplo de trabalho completo requer uma investigação dos processos que cada sistema de desktop usa, assim como a maioria das outras soluções requer investigação sobre como as variáveis ambientais são definidas em vários outros sistemas de desktop.
fonte
unknown
no Ubuntu.another_desktop
resultado inacabado .De todas as experiências relatadas nos inúmeros comentários, acho que é meu dever como OP chegar a uma resposta de consenso. (Tenha certeza, ficaria feliz em revisar esta resposta caso dados contrastantes se tornem disponíveis.)
Por enquanto, parece melhor assumir a liderança
$XDG_CURRENT_DESKTOP
quando essa variável é definida. Caso contrário,$XDG_DATA_DIRS
poderá fornecer as informações desejadas, mais do que a primeira letra de${DESKTOP_SESSION:0:1}
.fonte
XDG_CURRENT_DESKTOP
. Eu acho que o principal problema com essas variáveis é que elas são definidas pelo gerenciador de exibição e não pelo ambiente de desktop e, portanto, há alguma inconsistência. Quando eu escolher uma sessão padrão (xfce) com LightDMecho $DESKTOP_SESSION
dálightdm-xsession
o que é uma amálgama delightdm
ex-session-manager
, o processo usado para iniciar o meu desktop (ligada simbolicamente axfce4-session
). Eu imagino a instalação com uma sessão padrão diferente só vai usar um link simbólico diferente e produzir o mesmoDESKTOP_SESSION
DESKTOP_SESSION
na verdade vou dizerxfce
ougnome
Isso funciona no Ubuntu 18.10 (cósmico) [tipo lxqt] e no Mint 19 (tara) [tipo canela]:
Capture o resultado em uma variável e execute o código necessário adicional por meio de lógica analítica capaz (case stmt, if / then) que inclui todos / todos os tipos reconhecidos a partir daí; e / ou funcionam normalmente quando tipos não reconhecidos estão em uso.
fonte