Comment déterminer quel gestionnaire de fenêtres est en cours d'exécution

180

Existe-t-il un moyen (tel qu'une commande ou une variable d'environnement) de déterminer quel gestionnaire de fenêtres est celui qui est en cours d'exécution dans la session en cours?

Anonyme
la source

Réponses:

145

Si vous avez wmctrlinstallé, la première ligne de sortie de la commande

    wmctrl -m

vous montrera le nom du gestionnaire de fenêtres. Si vous ne l'avez pas wmctrlinstallé, utilisez la commande suivante pour l'installer:

    sudo apt-get install wmctrl

Remarque, man wmctrl(c'est-à-dire la manpage pour wmctrl) dit en partie:

-m Afficher des informations sur le gestionnaire de fenêtres ...

Sur mon système Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1, la première ligne de sortie de wmctrl -métait: Name: Metacity
tandis que echo $DESKTOP_SESSIONmontré ubuntu-2det echo $XDG_CURRENT_DESKTOPmontré Unity.

Sur une nouvelle Ubuntu 15.10 installer de Ubuntu desktoplogiciel sur un vieux portable, la première ligne de sortie wmctrl -métait: Name: Compiz
alors que les DESKTOP_SESSIONet les XDG_CURRENT_DESKTOPvaleurs ont été ubuntuetUnity

James Waldby - jwpat7
la source
4
Malheureusement, cela ne fonctionne pas avec ssh même si X11 est activé.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat sous Ubuntu 15.04, l'exécution ssh -Y {host} 'wmctrl -m'renvoie des valeurs (par exemple, "Nom: Compiz" et plusieurs N / A), mais il est logique que les sshinformations relatives au gestionnaire de fenêtres soient limitées.
michael
sur la cannelle sous Debian, cela ne fonctionne pas. La sortie de wmctrl -m est Name: Mutter (Muffin) alors que $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd le
Sous Xubuntu Wily, l’utilisation de Window Maker 0.95.6 - wmctrl indique N / A pour toutes les entrées. GDMSESSION est défini sur wmaker-common mais XDG_CURRENT_DESKTOP n'est pas défini du tout.
Mei
@Mei, Windows Maker fonctionne-t-il sur d'autres systèmes que vous pouvez comparer? De même, l’un des deux wmctrl -d(liste tous les bureaux gérés par le gestionnaire de fenêtres) ou wmctrl -l(liste les fenêtres gérées par le gestionnaire de fenêtres) fonctionne correctement sous Xubuntu Wily avec Window Maker?
James Waldby - jwpat7
102

Sur les systèmes Linux J'ai testé des variables d' environnement XDG_CURRENT_DESKTOPet GDMSESSIONet a obtenu les résultats suivants.

Vous pouvez utiliser cette ligne pour obtenir le résultat:

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 sur Wayland)

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

Ubuntu 16.04


Unité (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Unité en marche avec Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Remarque MIR_SERVER_NAME est également défini.

  • MIR_SERVER_NAME=session-$NUMBER

Unité en marche sans Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unité 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unité 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome classique

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (aucun effet)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Autres distributions basées sur Ubuntu


Menthe 13 (cannelle)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Mint 16 (édition KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Menthe 17 (cannelle)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Wasta 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Wasta 14.04 en utilisant le bureau 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
À M
la source
4
Monnaie 13 (cannelle): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = cannelle
rik-shaw
1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw
Qu'en est-il de $ DESKTOP_SESSION? En tant que solution de sauvegarde :)
Savvas Radevic
1
Et si je n'utilise pas GDM?
Robert Siemer
6
Et de plus, il ne répond pas au gestionnaire de fenêtres que j'utilise!
Robert Siemer
42

Dans le type de terminal envpour voir toutes les variables d'environnement. Certains d'entre eux sont:

XDG_CURRENT_DESKTOP - Vous dit quel environnement de bureau vous utilisez

GDMSESSION - Vous indique quelle option vous avez choisie dans l’écran lightdm pour vous connecter.

Pour les utiliser, allez au terminal et tapez:

echo $XDG_CURRENT_DESKTOP

(Affichera par exemple 'unit' si vous utilisez Unity)

ou

echo $GDMSESSION  

(Sera par exemple 'ubuntu' si vous avez sélectionné ubuntu dans le login ou 'ubuntu-2d' si vous avez sélectionné celui-ci dans le login.)

Vous avez d' autres si vous regardez de plus près à la sortie envcomme DESKTOP_SESSION et COMPIZ_CONFIG_PROFILE

Puisque vous recherchez le nom du gestionnaire de fenêtres utilisé, le seul moyen de voir comment l'obtenir consiste à consulter la liste des processus. Pour ce faire, il existe une commande appelée pgrep( Wikipedia ). J'ai fait ce qui suit pour obtenir le nom car le paramètre -l ajoute l'ID de processus:

pgrep -l compiz |cut -d " " -f2étant donné que le processus est exécuté par le même utilisateur, il n'est pas nécessaire de préfixer la partie sudo. Vous pouvez ensuite l'utiliser pour créer un script qui effectue une action basée sur le gestionnaire de fenêtres.

Pour rechercher d'autres types, il suffit de changer le mot compizà l' autre comme mutter, kwin, etc ..

Luis Alvarado
la source
2
Ceux-ci me disent juste le nom de la session et l'environnement de bureau. Exemple, il indique "GNOME", qui est un environnement de bureau pouvant utiliser Metacity, Mutter, Compiz ou d’autres gestionnaires de fenêtres. Cela dit "gnome-classic" qui est un nom de session, il n'y a pas de gestionnaire de fenêtres avec ce nom.
Anonyme
1
Voilà. Trouvé une commande qui peut aider avec la liste de processus. pgrep. Arrivé à cette partie, au moins, il vous montre le nom du gestionnaire de fenêtres si trouvé. J'essaie de vérifier si je peux tous les ajouter. Votre question est très bonne car Ubuntu 11.10 confond un peu en utilisant Compiz (ou marmonne si quand Gnome 3.x) serait bien de faire remarquer le gestionnaire de fenêtres utilisé dans Unity.
Luis Alvarado
$XDG_CURRENT_DESKTOPest l'environnement de bureau actuel, PAS le gestionnaire de fenêtres.
Ken Sharp
24

J'ai trouvé pstreeêtre d'une grande aide.

Installation

sudo apt-get install pstree

sortie

C'est ce que j'ai eu.

 ├─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}]
Sridhar Sarnobat
la source
1
cela m’y est arrivé avec mon système buildroot personnalisé.
jc__
11
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
ruario
la source
1
Pouvez-vous expliquer comment cela fonctionne? Aussi, je pense qu'il vous manque un )à la fin.
Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notypeaffiche toutes les propriétés de la fenêtre racine (et omet les types pour faciliter l'analyse), la sortie est envoyée à awkvia un tuyau; 2. L' awkinstruction $1=="_NET[blah]CK:"{print $5}'compare la première colonne de chaque ligne de l'entrée obtenue par le canal avec une chaîne donnée et, si elle trouve la correspondance, exécute le code entre parenthèses qui imprime la cinquième colonne de cette ligne. Je parie) être l'ID de l'atome "_NET_SUPPORTING_WM_CHECK"; 3. Cet ID est ensuite à nouveau utilisé pour obtenir les propriétés du gestionnaire Windows avecxprop -id
cprn
4

J'ai également testé avec KDE et ma conclusion est la suivante:

a) Manière graphique, avec HardInfo: la réponse est normalement dans "Système d'exploitation"> "Environnement de bureau", mais sinon, vous pouvez regarder dans "Variables d'environnement". HardInfo est prêt avec toutes les distributions testées, à l'exception de celle avec KDE, mais il peut être facilement et rapidement installé (seulement 2 paquets dans Linux Mint 13).

b) la ligne de commande, avec cette commande: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". L'élément qui apparaît dans plus de lignes devrait être la réponse (s'il y a un tirage au sort, l'élément avec "session" devrait être la solution).

Msedfi
la source
XFCE a également plusieurs gnome-...processus (et un succès de kde avec kdevtmpfs)
Xen2050
2

Aucune de ces solutions ne fonctionnait réellement pour moi. Je voulais simplement savoir si Gnome était ma session de bureau actuelle.

C'est ce qui a fonctionné, ouvrez un terminal

lsb_release -a

(pour vérifier la version ou la version installée sur ma machine UBUNTU)

ls /usr/bin/*session

(lance quel session / environnement de bureau actuellement utilisé)

gnome-shell --version 

(pour savoir quelle version de gnome est installée)

NanuBuria
la source
1
#! /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 en une ligne:

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

Alberto Salvia Novella
la source
0

C'est un peu possible avec dbus et le service de comptes (tous deux par défaut dans Ubuntu).

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

Il est à noter que j'ai testé cela en me connectant via lightdm (c'est-à-dire l'écran de connexion graphique), il a détecté un bureau classique comme blackbox, et détecte évidemment l'unité. Je soupçonne que ceci est une valeur de ce que l'utilisateur sélectionne sur l'écran de connexion en tant que session, c'est pourquoi il est un peu plus facile d'utiliser cette vérification des processus

Sergiy Kolodyazhnyy
la source
0

Scénario

Le script suivant a donné lieu comme la meilleure réponse à une même question que je Accrochés à unix.se . Cela fonctionne aussi très bien avec Unity et 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"
Serge Stroobandt
la source
0

Vous pouvez utiliser l'outil appelé inxi. Il peut être obtenu à partir des dépôts Ubuntu par:

sudo apt install inxi

ou de github: https://github.com/smxi/inxi

Il suffit de lancer la commande comme suit:

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)

Notez la Desktop: i3partie. Dans mon cas, le gestionnaire de fenêtres que j'utilise est i3.

Option -Saffiche les informations système et xajoute des informations sur le gestionnaire de fenêtres.

Michal Przybylowicz
la source
-3

Je ne peux que penser à rechercher des gestionnaires de fenêtres connus dans les processus en cours. Auparavant, une clé de gconf était définie sur le gestionnaire de fenêtres préféré, mais elle est déconseillée depuis Gnome 2.12.

Donc, si c'est pour un but de programmation, je vous suggère de rechercher tous les gestionnaires de fenêtres Linux; les plus populaires sont:

  • gnome-shell *
  • compiz
  • métacité
  • murmurer
  • poisson scie

Vous devez exécuter une vérification pour chacun avec la commande pgrep -l $WINDOW_MANAGER, où $WINDOW_MANAGERest le nom du gestionnaire de fenêtres que vous souhaitez vérifier. La pgrepcommande vérifie les processus en cours.

Je ne suis pas sûr à 100% si Gnome Shell est considéré comme un gestionnaire de fenêtres. le reste des gestionnaires de fenêtres que j'ai obtenus à partir d'une liste dans le /usr/bin/gnome-wmscript. Ce script devrait en fait être utilisable (puisqu'il est présent sur une nouvelle installation), mais dans mon cas, il essaie de s'exécuter, compizce qui n'est pas mon gestionnaire de fenêtres par défaut (pas dans ma session Gnome).

MODIFIER:

Eh bien, le commentaire de @Anarci semble être plus précis. Dans mon cas, cela s'est avéré gnome-shell.

Severo Raz
la source
1
Semble que pgrep prend en charge regex afin qu’un modèle avec alternances puisse être utilisé. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Anonyme
1
Cela ne suffit pas: que se passe-t-il si l'utilisateur exécute plusieurs sessions X avec différents gestionnaires? Vous devez au moins vérifier que le gestionnaire de fenêtres fonctionne sur l'écran qui vous intéresse (vous pouvez le faire en examinant $DISPLAYson environnement).
Gilles
Ubuntu 18.04 LTS Desktop: Unité: Unity7: ubuntu Session: unité
user2584621