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


Y a-t-il un moyen (tel qu'une commande ou une variable environnementale) pour déterminer ce que gestionnaire de fenêtres est-ce que la course est active dans la session en cours?


151
2017-10-26 20:39


origine




Réponses:


Si tu as wmctrl installé, la première ligne de sortie de la commande

    wmctrl -m

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

    sudo apt-get install wmctrl

Remarque, man wmctrl (C'est le man page pour wmctrl) dit en partie:

-m Affiche 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_SESSION montré ubuntu-2d et echo $XDG_CURRENT_DESKTOP montré Unity.

Sur une nouvelle installation d'Ubuntu 15.10 de Ubuntu desktop logiciel sur un ancien ordinateur portable, la première ligne de sortie de wmctrl -m était: Name: Compiz
tandis que le DESKTOP_SESSION et XDG_CURRENT_DESKTOP les valeurs étaient ubuntu et Unity


126
2018-01-05 07:57



Malheureusement, cela ne fonctionne pas sur ssh même si X11 est activé. - Sridhar-Sarnobat
@ Sridhar-Sarnobat sur Ubuntu 15.04, en cours d'exécution ssh -Y {host} 'wmctrl -m' renvoie des valeurs (par exemple, "Nom: Compiz" et plusieurs N / A), mais il est logique que ssh aurait des informations limitées sur le gestionnaire de fenêtres. - michael
sur Debian exécutant la cannelle, cela ne fonctionne pas. sortie de wmctrl -m est le nom: Mutter (Muffin) tandis que $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
Sur Xubuntu Wily, exécutez Window Maker 0.95.6 - wmctrl rapporte 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, avez-vous Window Maker sur d'autres systèmes que vous pouvez comparer? Aussi, faire l'un des wmctrl -d (Liste de tous les bureaux gérés par le gestionnaire de fenêtres) ou wmctrl -l (Lister les fenêtres gérées par le gestionnaire de fenêtres) fonctionne bien sur Xubuntu Wily avec Window Maker? - James Waldby - jwpat7


Sur les systèmes Linux, j'ai testé les variables d'environnement XDG_CURRENT_DESKTOP et GDMSESSION et 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 Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (pas d'effets)

  • 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

  • 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

84
2017-12-10 20:38



Mint 13 (Cannelle): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = cannelle - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu - rik-shaw
Qu'en est-il de $ DESKTOP_SESSION? Comme solution de sauvegarde :) - Savvas Radevic
Et si je n'utilise pas GDM? - Robert Siemer
Et plus loin, il ne répond pas à quoi gestionnaire de fenêtres J'utilise! - Robert Siemer


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

XDG_CURRENT_DESKTOP - Vous indique quel environnement de bureau vous utilisez

GDMSESSION - Vous indique quelle option vous avez sélectionnée dans le lightdm greeter pour vous connecter.

Pour les utiliser, allez au terminal et tapez:

echo $XDG_CURRENT_DESKTOP

(Est-ce que la sortie par exemple «l'unité» si vous utilisez Unity)

ou

echo $GDMSESSION  

(Peut afficher par exemple "ubuntu" si vous avez sélectionné ubuntu lors de la connexion ou "ubuntu-2d" si vous l'avez sélectionné dans la connexion.)

Vous avez d'autres si vous regardez de plus près à la sortie de env comme DESKTOP_SESSION et COMPISE_CONFIG_PROFILE

Étant donné que ce que vous recherchez est le nom du gestionnaire de fenêtres utilisé, la seule façon de voir comment l'obtenir est de regarder dans la liste des processus. Pour ce faire, il existe une commande appelée pgrep ( Wikipédia ). J'ai fait ce qui suit pour obtenir le nom puisque le paramètre -l ajoute l'ID du processus:

pgrep -l compiz |cut -d " " -f2 Comme 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, changez simplement le mot compiz à un autre comme mutter, kwin, etc..


39
2017-10-26 21:57



Ceux-ci me disent simplement le nom de la session et l'environnement de bureau. Exemple: "GNOME" est un environnement de bureau qui peut utiliser Metacity, Mutter, Compiz ou d'autres gestionnaires de fenêtres. Il dit "gnome-classic" qui est un nom de session, il n'y a pas de gestionnaire de fenêtres avec ce nom. - Anonymous
Voilà. Trouvé une commande qui peut aider avec la liste de processus. pgrep. Arrivé à cette partie, au moins, il vous indique le nom du gestionnaire de fenêtres s'il est trouvé. Essayer de vérifier si je peux tous les ajouter ensemble. Votre question est très bonne, car Ubuntu 11.10 confond un peu en utilisant Compiz (ou murmure si Gnome 3.x), il serait donc intéressant de signaler le gestionnaire de fenêtres utilisé dans Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOP est l'environnement de bureau actuel, PAS le gestionnaire de fenêtres. - Ken Sharp


j'ai trouvé pstree être 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}]

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



Pouvez-vous expliquer comment cela fonctionne? Aussi, je pense que vous manquez un ) à la fin. - Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notype affiche toutes les propriétés de la fenêtre racine (et omet les types pour faciliter l'analyse), la sortie est envoyée à awk via un tuyau; 2. awk instruction $1=="_NET[blah]CK:"{print $5}' compare la première colonne de chaque ligne de l'entrée à laquelle elle est passée par le canal avec une chaîne donnée et si elle trouve la correspondance, elle exécute le code entre parenthèses qui imprime la cinquième colonne de cette ligne. être l'ID de l'atome "_NET_SUPPORTING_WM_CHECK"; 3. cet identifiant est ensuite utilisé à nouveau pour obtenir les propriétés du gestionnaire Windows avec xprop -id - cprn


J'ai aussi 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, sauf celle avec KDE, mais il peut être installé facilement et rapidement (seulement 2 paquets dans Linux Mint 13).

b) 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, l'élément avec "session" devrait être la solution).


3
2018-04-15 22:51



XFCE a également plusieurs gnome-... processus (et un coup de kde avec kdevtmpfs) - Xen2050


Rien de ce qui précède n'a fonctionné pour moi, je voulais juste savoir si Gnome fonctionnait comme 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 que j'avais installée sur ma machine UBUNTU)

ls /usr/bin/*session

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

gnome-shell --version 

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


1
2017-07-07 16:26





Le script suivant a été la meilleure réponse à un problème similaire. question que j'ai posté à 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"

-1
2018-02-24 17:42





Ceci est en quelque sorte possible avec dbus et le service de comptabilité (tous deux par défaut dans Ubuntu).

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

Il convient de noter que je l'ai testé avec la connexion via lightdm (c'est-à-dire l'écran de connexion graphique), il a détecté un bureau classique comme blackbox et détecte évidemment Unity. Je soupçonne que c'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 pour les processus


-1
2018-04-03 07:54