Respostas:
Se você wmctrl
instalou, a primeira linha de saída do comando
wmctrl -m
irá mostrar o nome do gerenciador de janelas. Se você não tiver wmctrl
instalado, use o seguinte comando para instalá-lo:
sudo apt-get install wmctrl
Observe man wmctrl
(isto é, a man
pá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 -m
foi: Name: Metacity
enquanto echo $DESKTOP_SESSION
mostrada ubuntu-2d
e echo $XDG_CURRENT_DESKTOP
mostrada Unity
.
Em um novo Ubuntu 15.10 instalação do Ubuntu desktop
software em um laptop antigo, a primeira linha de saída de wmctrl -m
era: Name: Compiz
enquanto os DESKTOP_SESSION
e XDG_CURRENT_DESKTOP
valores foram ubuntu
eUnity
ssh -Y {host} 'wmctrl -m'
retorna alguns valores (por exemplo, "Name: Compiz" e vários N / A), mas faz sentido que ssh
haja 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_DESKTOP
e GDMSESSION
e 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:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Nota MIR_SERVER_NAME também está definido
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
No tipo de terminal, env
para 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 env
como 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 " " -f2
como 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 compiz
a outro como mutter
, kwin
, etc ..
$XDG_CURRENT_DESKTOP
é o ambiente de desktop atual, NÃO o gerenciador de janelas.
Eu achei pstree
uma 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 -notype
exibe todas as propriedades da janela raiz (e omite tipos para facilitar a análise), a saída é enviada para awk
via pipe; 2. a awk
instruçã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: i3
parte. No meu caso, o gerenciador de janelas que eu uso é i3
.
A opção -S
exibe informações do sistema e x
adiciona 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 pgrep
comando 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-wm
script. 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 compiz
que 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"
$DISPLAY
o ambiente).