web-dev-qa-db-fra.com

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

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

176
Anonymous

Si vous avez installé wmctrlname__, 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 installé wmctrlname__, utilisez la commande suivante pour l'installer:

    Sudo apt-get install wmctrl

Remarque, man wmctrl (la page manpour wmctrlname__) indique 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 la suivante: Name: Metacity
alors que echo $DESKTOP_SESSION a montré ubuntu-2d et echo $XDG_CURRENT_DESKTOP a montré Unityname__.

Sur une nouvelle installation Ubuntu 15.10 du logiciel Ubuntu desktop sur un ancien ordinateur portable, la première ligne de sortie de wmctrl -m était: Name: Compiz
alors que les valeurs DESKTOP_SESSION et XDG_CURRENT_DESKTOP étaient ubuntuet Unityname__

143

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

Dans le terminal, saisissez envpour afficher 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 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  

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

Vous en avez d’autres si vous regardez de plus près le résultat de 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, remplacez simplement Word compizpar un autre comme muttername__, kwinname__, etc.

42
Luis Alvarado

J'ai trouvé pstree comme une aide précieuse.

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}]
24
Sridhar-Sarnobat
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
10
ruario

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) 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).

4
Msedfi

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)

2
NanuBuria

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

0

Scénario

Le script suivant a été considéré comme la meilleure réponse à un problème similaire question que j’ai posée à l'adresse unix.se . Cela fonctionne également 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"
0
Serge Stroobandt