Réponses:
Si vous avez wmctrl
installé, 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 wmctrl
installé, utilisez la commande suivante pour l'installer:
sudo apt-get install wmctrl
Remarque, man wmctrl
(c'est-à-dire la man
page 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_SESSION
montré ubuntu-2d
et echo $XDG_CURRENT_DESKTOP
montré Unity
.
Sur une nouvelle Ubuntu 15.10 installer de Ubuntu desktop
logiciel sur un vieux portable, la première ligne de sortie wmctrl -m
était: Name: Compiz
alors que les DESKTOP_SESSION
et les XDG_CURRENT_DESKTOP
valeurs ont été ubuntu
etUnity
ssh -Y {host} 'wmctrl -m'
renvoie des valeurs (par exemple, "Nom: Compiz" et plusieurs N / A), mais il est logique que les ssh
informations relatives au gestionnaire de fenêtres soient limitées.
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?
Sur les systèmes Linux J'ai testé des 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"
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 type de terminal env
pour 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 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, il suffit de changer le mot compiz
à l' autre comme mutter
, kwin
, etc ..
$XDG_CURRENT_DESKTOP
est l'environnement de bureau actuel, PAS le gestionnaire de fenêtres.
J'ai trouvé pstree
être d'une grande aide.
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
)
à la fin.
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. L' awk
instruction $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
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).
gnome-...
processus (et un succès de kde avec kdevtmpfs
)
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)
#! /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
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
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"
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: i3
partie. Dans mon cas, le gestionnaire de fenêtres que j'utilise est i3
.
Option -S
affiche les informations système et x
ajoute des informations sur le gestionnaire de fenêtres.
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:
Vous devez exécuter une vérification pour chacun avec la commande pgrep -l $WINDOW_MANAGER
, où $WINDOW_MANAGER
est le nom du gestionnaire de fenêtres que vous souhaitez vérifier. La pgrep
commande 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-wm
script. 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, compiz
ce 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
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
son environnement).