Respostas:
Se você wmctrlinstalou, a primeira linha de saída do comando
wmctrl -m
irá mostrar o nome do gerenciador de janelas. Se você não tiver wmctrlinstalado, use o seguinte comando para instalá-lo:
sudo apt-get install wmctrl
Observe man wmctrl(isto é, a manpágina para wmctrl) diz em parte:
-m Exibe informações sobre o gerenciador de janelas ...
No meu sistema Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1, a primeira linha de saída wmctrl -mfoi: Name: Metacity
enquanto echo $DESKTOP_SESSIONmostrada ubuntu-2de echo $XDG_CURRENT_DESKTOPmostrada Unity.
Em um novo Ubuntu 15.10 instalação do Ubuntu desktopsoftware em um laptop antigo, a primeira linha de saída de wmctrl -mera: Name: Compiz
enquanto os DESKTOP_SESSIONe XDG_CURRENT_DESKTOPvalores foram ubuntueUnity
ssh -Y {host} 'wmctrl -m'retorna alguns valores (por exemplo, "Name: Compiz" e vários N / A), mas faz sentido que sshhaja informações limitadas sobre o gerenciador de janelas.
wmctrl -d(Liste todos os desktops gerenciados pelo gerenciador de janelas) ou wmctrl -l(Liste as janelas gerenciadas pelo gerenciador de janelas) funcionam bem no Xubuntu Wily com o Window Maker?
Em sistemas Linux Eu testei variáveis de ambiente XDG_CURRENT_DESKTOPe GDMSESSIONe obteve os seguintes resultados.
Você pode usar esta linha para obter a saída:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-waylandXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuNota MIR_SERVER_NAME também está definido
MIR_SERVER_NAME=session-$NUMBERXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfceXDG_CURRENT_DESKTOP=GDMSESSION=kde-plasmaXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntuXDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2dXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shellXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classicXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallbackXDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamonXDG_CURRENT_DESKTOP=KDEGDMSESSION=defaultXDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=defaultXDG_CURRENT_DESKTOP=LXDE GDMSESSION=LubuntuXDG_CURRENT_DESKTOP=X-Cinnamon GDMSESSION=cinnamonXDG_CURRENT_DESKTOP=GNOME GDMSESSION=gnomeXDG_CURRENT_DESKTOP=MATEGDMSESSION=mateXDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntuNo tipo de terminal, envpara ver todas as variáveis de ambiente. Alguns deles são:
XDG_CURRENT_DESKTOP - Informa qual ambiente de desktop você está usando
GDMSESSION - Informa qual opção você selecionou no greet lightdm para efetuar login.
Para usá-los, vá para o terminal e digite:
echo $XDG_CURRENT_DESKTOP
(Produzirá, por exemplo, 'unity' se você estiver usando o Unity)
ou
echo $GDMSESSION
(Produzirá, por exemplo, 'ubuntu' se você selecionou o ubuntu no logon ou 'ubuntu-2d' se você selecionou aquele no logon.)
Você tem outros se você olhar mais de perto a saída de envcomo DESKTOP_SESSION e COMPIZ_CONFIG_PROFILE
Como o que você está procurando é o nome do que o Window Manager está em uso, a única maneira de ver como obter isso é consultando a lista de processos. Para fazer isso, existe um comando chamado pgrep( Wikipedia ). Fiz o seguinte para obter o nome, pois o parâmetro -l adiciona o ID do processo:
pgrep -l compiz |cut -d " " -f2como o processo está sendo executado pelo mesmo usuário, não há necessidade de prefixar a parte sudo. Você pode usar isso para criar um script que executa uma ação baseada no Gerenciador de Janelas.
Para procurar outros tipos, basta alterar a palavra compiza outro como mutter, kwin, etc ..
$XDG_CURRENT_DESKTOPé o ambiente de desktop atual, NÃO o gerenciador de janelas.
Eu achei pstreeuma grande ajuda.
sudo apt-get install pstree
Isto é o que eu tenho.
├─lightdm─┬─Xorg───2*[{Xorg}]
│ ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
│ │ │ ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
│ │ │ │ └─5*[{compiz}]
│ │ │ ├─deja-dup-monito───2*[{deja-dup-monito}]
│ │ │ ├─gnome-fallback-───2*[{gnome-fallback-}]
│ │ │ ├─gnome-screensav───2*[{gnome-screensav}]
│ │ │ ├─gnome-settings-───2*[{gnome-settings-}]
│ │ │ ├─nautilus───2*[{nautilus}]
│ │ │ ├─nm-applet───2*[{nm-applet}]
│ │ │ ├─polkit-gnome-au───2*[{polkit-gnome-au}]
│ │ │ ├─ssh-agent
│ │ │ ├─telepathy-indic───2*[{telepathy-indic}]
│ │ │ ├─update-notifier───2*[{update-notifier}]
│ │ │ ├─vino-server───2*[{vino-server}]
│ │ │ ├─zeitgeist-datah───{zeitgeist-datah}
│ │ │ └─3*[{gnome-session}]
│ │ └─{lightdm}
│ └─2*[{lightdm}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)no final.
xprop -root -notypeexibe todas as propriedades da janela raiz (e omite tipos para facilitar a análise), a saída é enviada para awkvia pipe; 2. a awkinstrução $1=="_NET[blah]CK:"{print $5}'compara a primeira coluna de cada linha da entrada que ela passou pelo pipe com uma determinada string e, se encontrar a correspondência, executa o código entre parênteses, que imprime a quinta coluna dessa linha - o mesmo acontece (inteiramente por acidente, Aposto que) é o ID do átomo "_NET_SUPPORTING_WM_CHECK"; 3. esse ID é usado novamente para obter as propriedades do Windows Manager comxprop -id
Eu também testei com o KDE e minha conclusão é:
a) Maneira gráfica, com HardInfo: a resposta está normalmente em "Sistema operacional"> "Ambiente de área de trabalho", mas, caso contrário, você pode procurar em "Variáveis de ambiente". O HardInfo está pronto com todas as distribuições testadas, exceto a do KDE, mas pode ser fácil e rapidamente instalado (apenas 2 pacotes no Linux Mint 13).
b) linha de comando, com este comando: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". O item que aparece em mais linhas deve ser a resposta (se houver um empate, o item com "sessão" deve ser a solução).
gnome-...processos (e um hit kde com kdevtmpfs)
Nenhuma das opções acima realmente funcionou para mim, eu só queria saber se o Gnome estava sendo executado como minha sessão atual da área de trabalho.
Isto é o que funcionou, abra um terminal
lsb_release -a
(para verificar qual sabor ou versão eu tinha instalado na minha máquina UBUNTU)
ls /usr/bin/*session
(inicia qual sessão / ambiente de área de trabalho atualmente em uso)
gnome-shell --version
(para descobrir qual versão do gnome está instalada)
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)
windowManagerName () {
window=$(xprop -root -notype)
identifier=$(echo "${window}" | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')
attributes=$(xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t)
echo "${attributes}" |
grep "_NET_WM_NAME = " |
cut --delimiter=' ' --fields=3 |
cut --delimiter='"' --fields=2
}
windowManagerName
Ou em uma linha:
id = $ (xprop -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {print $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | cut --delimiter = '' --fields = 3 | cut --delimiter = '"' --fields = 2
Isso é possível com o dbus e o Accounts Service (ambos por padrão no Ubuntu).
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Vale ressaltar que eu testei isso com o login através do lightdm (que é a tela gráfica de login), ele detectou uma área de trabalho clássica como o blackbox e, obviamente, o Unity. Eu suspeito que esse é um valor do que o usuário seleciona na tela de login como sessão, por isso é um pouco mais fácil usar essa verificação de processos
O script a seguir resultou como a melhor resposta a uma semelhante pergunta que eu postei sobre a unix.se . Também funciona muito bem com o Unity e o LXDE.
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"
Você pode usar a ferramenta chamada inxi. Pode ser obtido nos repositórios do Ubuntu por:
sudo apt install inxi
ou no github: https://github.com/smxi/inxi
Basta executar o comando da seguinte maneira:
inxi -Sx
System: Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)
Observe a Desktop: i3parte. No meu caso, o gerenciador de janelas que eu uso é i3.
A opção -Sexibe informações do sistema e xadiciona informações sobre o gerenciador de janelas.
Só consigo pensar em procurar gerenciadores de janelas conhecidos nos processos em execução. Costumava haver uma chave no gconf que foi configurada para o gerenciador de janelas preferido, mas está obsoleta desde o Gnome 2.12.
Então, se isso é para um propósito de programação, sugiro que você pesquise todos os gerenciadores de janelas linux; alguns populares são:
Você precisaria executar uma verificação para cada um com o comando pgrep -l $WINDOW_MANAGER, onde $WINDOW_MANAGERé o nome do gerenciador de janelas que deseja verificar. O pgrepcomando verifica se há processos em execução.
Não tenho 100% de certeza se o Gnome Shell é considerado um gerenciador de janelas; o restante dos gerenciadores de janelas que obtive de uma lista no /usr/bin/gnome-wmscript. Na verdade, esse script deve ser utilizável (desde que está presente em uma instalação limpa), mas, no meu caso, ele tenta executar o compizque não é o meu gerenciador de janelas padrão (não está na minha sessão do Gnome).
EDITAR:
Bem, o comentário de @Anarci parece ser mais preciso. No meu caso, mostrou gnome-shell.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAYo ambiente).