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?
Si vous avez installé wmctrl
name__, 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é wmctrl
name__, utilisez la commande suivante pour l'installer:
Sudo apt-get install wmctrl
Remarque, man wmctrl
(la page man
pour wmctrl
name__) 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é Unity
name__.
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 ubuntu
et Unity
name__
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"
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
Remarque MIR_SERVER_NAME est également défini
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
Dans le terminal, saisissez env
pour 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 env
comme 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 compiz
par un autre comme mutter
name__, kwin
name__, etc.
J'ai trouvé pstree
comme une aide précieuse.
Sudo apt-get install pstree
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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
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).
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)
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
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"