Questão Como determinar qual gerenciador de janelas está executando


Existe alguma maneira (como um comando ou variável ambiental) para determinar o que gerenciador de janelas é aquele que está executando ativamente na sessão atual?


151
2017-10-26 20:39


origem




Respostas:


Se você tem wmctrl instalado, a primeira linha de saída do comando

    wmctrl -m

mostrará o nome do gerenciador de janelas. Se você não tem wmctrl instalado, use o seguinte comando para instalá-lo:

    sudo apt-get install wmctrl

Nota, man wmctrl (isto é, o man página para wmctrl) diz em parte:

-m Exibe informações sobre o gerenciador de janelas ...

No meu Ubuntu 11.10 / Linux 3.0.0-14-genérico # 23-Ubuntu x86_64 / metacity 2.34.1 sistema, a primeira linha de saída de wmctrl -m estava: Name: Metacity
enquanto echo $DESKTOP_SESSION mostrou ubuntu-2d e echo $XDG_CURRENT_DESKTOP mostrou Unity.

Em uma nova instalação do Ubuntu 15.10 Ubuntu desktop software em um laptop antigo, a primeira linha de saída wmctrl -m estava: Name: Compiz
enquanto o DESKTOP_SESSION e XDG_CURRENT_DESKTOP valores foram ubuntu e Unity


126
2018-01-05 07:57



Infelizmente isso não funciona com o ssh, mesmo que o X11 esteja ativado. - Sridhar-Sarnobat
@ Sridhar-Sarnobat no Ubuntu 15.04, em execução ssh -Y {host} 'wmctrl -m' retorna alguns valores (por exemplo, "Nome: Compiz" e vários N / A's), mas faz sentido ssh teria informações limitadas sobre o gerenciador de janelas. - michael
no debian executando canela, isso não funciona. saída de wmctrl -m é Nome: Mutter (Muffin) enquanto $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
No Xubuntu Wily, rodando o Window Maker 0.95.6 - o wmctrl relata N / A para todas as entradas. GDMSESSION está definido como wmaker-common, mas o XDG_CURRENT_DESKTOP não está configurado. - Mei
@Mei, você tem o Window Maker rodando em outros sistemas que você pode comparar? Além disso, faça um dos wmctrl -d (Listar todos os desktops gerenciados pelo gerenciador de janelas) ou wmctrl -l (Listar as janelas gerenciadas pelo gerenciador de janelas) funciona ok no Xubuntu Wily com o Window Maker? - James Waldby - jwpat7


Nos sistemas Linux, 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"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu no Wayland)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

Ubuntu 16.04


Unidade (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Unidade rodando com o Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Nota MIR_SERVER_NAME também está definido

  • MIR_SERVER_NAME=session-$NUMBER

Unidade rodando sem Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unidade 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnomo

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (sem efeitos)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Outras distribuições baseadas no Ubuntu


Hortelã 13 (canela)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Hortelã 16 (edição do KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Hortelã 17 (canela)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12,04

  • XDG_CURRENT_DESKTOP=LXDE 
  • GDMSESSION=Lubuntu

Wasta 14.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon 
  • GDMSESSION=cinnamon

Wasta 14.04 usando a área de trabalho do Gnome.

  • XDG_CURRENT_DESKTOP=GNOME 
  • GDMSESSION=gnome

Ubuntu Mate 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

84
2017-12-10 20:38



Menta 13 (Canela): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = canela - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu - rik-shaw
E quanto a $ DESKTOP_SESSION? Como uma solução de backup :) - Savvas Radevic
E se eu não usar o GDM? - Robert Siemer
E além disso, não responde o que gerenciador de janelas Eu uso! - Robert Siemer


No tipo de terminal env para ver todas as variáveis ​​de ambiente. Alguns deles são:

XDG_CURRENT_DESKTOP - Informa a você qual ambiente de área de trabalho você está usando

GDMSESSION - Informa a você qual opção você selecionou no monitor do lightdm para fazer o login.

Para usá-los, vá até o terminal e digite:

echo $XDG_CURRENT_DESKTOP

(Será a saída, por exemplo, 'unidade' se você estiver usando o Unity)

ou

echo $GDMSESSION  

(A saída será, por exemplo, 'ubuntu' se você selecionou o ubuntu no login ou 'ubuntu-2d' se você selecionou aquele no login.)

Você tem outros se você olhar mais de perto a saída de env gostar DESKTOP_SESSION e COMPIZ_CONFIG_PROFILE

Como o que você está procurando é o nome do que o Gerenciador de Janelas está em uso, a única maneira de ver como obter isso é procurando na lista de processos. Para fazer isso, há um comando chamado pgrep ( Wikipedia ). Eu fiz o seguinte para obter o nome desde 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 do sudo. Você pode usar isso para criar um script que faça uma ação com base no Gerenciador de Janelas.

Para procurar outros tipos, basta alterar a palavra compiz para outro como mutter, kwin, etc.


40
2017-10-26 21:57



Esses apenas me dizem o nome da sessão e ambiente de trabalho. Exemplo diz "GNOME", que é um ambiente de desktop que pode usar o Metacity, Mutter, Compiz ou outros gerenciadores de janelas. Ele diz "gnome-classic", que é um nome de sessão, não existe esse gerenciador de janelas com esse nome. - Anonymous
Ai está. Encontrou um comando que pode ajudar na lista de processos. pgrep. Chegou a essa parte, pelo menos, mostra o nome do gerenciador de janelas, se encontrado. Tentando verificar se posso adicionar todos eles juntos. Sua pergunta é muito boa, já que o Ubuntu 11.10 confunde um pouco usando o Compiz (Ou, se o Gnome 3.x murmurar, por exemplo), seria bom apontar o Gerenciador de Janelas que é usado no Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOP é o ambiente de área de trabalho atual, NÃO o gerenciador de janelas. - Ken Sharp


eu encontrei pstree ser uma grande ajuda.

Instalação

sudo apt-get install pstree

saída

Isso é 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}]

20
2018-04-22 04:59





xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 

8
2018-05-15 06:19



Você pode explicar como isso funciona? Além disso, acho que você está perdendo um ) no fim. - Louis Matthijssen
@LouisMatthijssen 1. 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 awk instrução $1=="_NET[blah]CK:"{print $5}' compara a primeira coluna de cada linha da entrada que passou pelo pipe com uma determinada string e, se encontrar a correspondência, executa o código entre colchetes, que imprime a quinta coluna dessa linha - acontece (por acidente, eu aposto) ser o ID do átomo "_NET_SUPPORTING_WM_CHECK"; 3. esse ID é usado novamente para obter as propriedades do Gerenciador do Windows com xprop -id - cprn


Eu tenho testado também com o KDE e minha conclusão é:

a) Forma gráfica, com HardInfo: a resposta é normalmente em "Operating System"> "Desktop Environment", mas se não, você pode olhar para "Environment variables". O HardInfo está pronto com todas as distribuições testadas, exceto a do KDE, mas pode ser fácil e rapidamente instalada (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).


3
2018-04-15 22:51



O XFCE também tem vários gnome-... processos (e um hit kde com kdevtmpfs) - Xen2050


Nenhum dos itens acima funcionou para mim, eu só queria saber se o Gnome estava rodando como a minha atual sessão de desktop.

Isso é 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

(lança o ambiente de sessão / área de trabalho atualmente em uso)

gnome-shell --version 

(para descobrir qual versão do gnome está instalada)


1
2017-07-07 16:26





O seguinte script resultou como a melhor resposta para um similar pergunta que eu postei no 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"

-1
2018-02-24 17:42





Isso é possível com o dbus e o serviço de contas (ambos por padrão no Ubuntu).

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

Vale a pena notar que eu testei isso com o login através do lightdm (que é a tela gráfica de login), ele detectou um desktop clássico como o blackbox e obviamente detecta o Unity. Eu suspeito que este é um valor do que o usuário seleciona na tela de login como sessão, é por isso que é um pouco mais fácil usar essa verificação de processos


-1
2018-04-03 07:54





Só posso pensar em verificar os 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 foi descontinuado desde o Gnome 2.12.

Então, se isso é para um propósito de programação, sugiro que você pesquise por todos os gerenciadores de janelas do Linux; alguns populares são:

  • gnomo-shell *
  • compiz
  • metacidad
  • murmurar
  • peixe-serra

Você teria que executar uma verificação para cada um com o comando pgrep -l $WINDOW_MANAGER, Onde $WINDOW_MANAGER é o nome do gerenciador de janelas que você deseja verificar. o pgrep O comando verifica os processos em execução.

Não tenho 100% de certeza se o Gnome Shell é considerado um gerenciador de janelas; o resto dos gerenciadores de janela eu tenho de uma lista no /usr/bin/gnome-wm roteiro. Este script, de fato, deve ser usável (já que está presente em uma instalação limpa) mas no meu caso ele tenta rodar compiz que não é meu gerenciador de janelas padrão (não na minha sessão do Gnome).

EDITAR:

Bem, o comentário de @Anarci parece ser mais preciso. No meu caso, mostrou gnome-shell.


-3
2017-10-26 21:32



Parece que o pgrep suporta regex para que um padrão com alternâncias possa ser usado. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad" - Anonymous
Isso não é suficiente: e se o usuário estiver executando várias sessões X com gerentes diferentes? Você deve pelo menos verificar se o gerenciador de janelas está operando na tela em que está interessado (você pode fazer isso examinando $DISPLAY em seu ambiente). - Gilles