J'écris un bash
script qui a besoin de savoir quel environnement de bureau (XFCE, Unity, KDE, LXDE, Mate, Cinnamon, GNOME2, GNOME3, ...) est en cours d'exécution.
Comment puis-je obtenir ces informations?
bash
desktop-environment
bash-script
Serge Stroobandt
la source
la source
xplanet
et je souhaite actualiser automatiquement l'arrière-plan du bureau avec des commandes spécifiques à l'environnement de bureau. Si vous souhaitez publier une réponse à ce problème , veuillez suivre le lien.Réponses:
Le principal problème lié à la vérification du
DESKTOP_SESSION
est qu'il est défini par le gestionnaire d'affichage plutôt que par la session de bureau et est sujet à des incohérences. Pourlightdm
sur Debian, les valeurs proviennent des noms des fichiers sous/usr/share/xsessions/
.DESKTOP_SESSION
reflète l'environnement du bureau si une sélection spécifique est effectuée lors de la connexion, mais lalightdm-xsession
session par défaut est toujours utilisée.GDMSESSION
est une autre option, mais semble avoir une situation similaire (c'est la même valeur queDESKTOP_SESSION
pour moi).XDG_CURRENT_DESKTOP
semble être un bon choix, mais il n'est actuellement pas dans la norme XDG et donc pas toujours implémenté. Voir ici pour une discussion à ce sujet. Cette réponse montre ses valeurs pour différentes distributions / ordinateurs de bureau, je peux également confirmer qu'elle n'est actuellement pas disponible pour moi sur XFCE.La solution de rechange raisonnable pour
XDG_CURRENT_DESKTOP
ne pas exister serait d'essayerXDG_DATA_DIRS
. À condition que les fichiers de données de l'environnement de bureau soient installés dans un répertoire portant son nom, cette approche devrait fonctionner. Espérons que ce sera le cas pour toutes les distributions / ordinateurs de bureau!Les tests suivants (avec GNU grep) pour XFCE, KDE et Gnome:
Compatible POSIX:
À combiner avec la vérification
XDG_CURRENT_DESKTOP
:la source
apt-file
est également un bon outil pour voir où les différents bureaux s’installent.XDG_DATA_DIRS
pas ou ne contient-il simplement rien d'utile?||
style. Pourtant, cette question a été posée sur d'autres sites SE, je pense que nous avons le meilleur ensemble de réponses.Méthode n ° 1 - $ DESKTOP_SESSION
Je pense que vous pouvez le découvrir en interrogeant la variable d'environnement
$DESKTOP_SESSION
. Je ne suis pas tout à fait sûr de la large prise en charge de cela, mais dans mes tests limités, il semble être disponible sur Fedora et Ubuntu.Un autre choix est la
$XDG_SESSION_DESKTOP
variable.Méthode n ° 2 - wmctrl
Il y a aussi cette méthode qui utilise
wmctrl
.Les références
la source
$GDMSESSION
me rend nerveux car il est probablement uniquement orienté vers DE qui utilisent GDM ou DE basé sur GNOME. GDM = Gestionnaire d'affichage GNOME.DESKTOP_SESSION
sur xfce.default
(mint 15)default
aussi. Une installation par défaut de GNOME 3.$DESKTOP_SESSION
montredefault
pour KDE sous Fedora 20.Vous pouvez utiliser ce script bash . Il peut détecter le nom et la version de l'environnement de bureau.
la source
ps -e | grep -E '^.* xfce4-session$' > /dev/null
(($? == 0)) && ...
GNOME Shell 3.26.2
je suis arrivéUNKNOWN
. Aucune sortie degnome-session --version
travail pour moi, c'est quegnome-shell --version | awk '{print $3}'
je n'ai rien retiré non plusps -e | grep -E '^.* gnome-session$'
. Cela semble être dû-b
à la fin degnome-session-b
. Suppression des$
œuvres ou tout simplementps -e | grep 'gnome-session'
. Avec ces changements, le script fonctionne. Je reçoisGNOME 3.26.2
Cela dépend probablement de la situation. Si vous savez quel gestionnaire d'affichage est utilisé, il se peut que celui-ci place ces informations dans une variable d'environnement.
Si ce n'est pas le cas, je suppose que vous devez vérifier chaque DE que vous souhaitez pouvoir identifier. Tous doivent introduire leurs propres variables d'environnement.
la source
echo ${DESKTOP_SESSION:0:1}
ça ferait l'affaire? Autant que j'ai pu tester, il revientu
pour Unity etx
pour XFCE. Avec un peu de chance, certaines personnes joueront le rôle de KDE et d'autres ordinateurs de bureau.echo ${DESKTOP_SESSION} kde-plasma-safe
pour mon KDE. Pourquoi "sûr" ...Si la variable d'environnement
XDG_CURRENT_DESKTOP
est disponible, elle devrait vous le dire.la source
Vous pouvez rechercher des
Xorg
processus en cours d'exécution . Le parent de ceci devrait être votre gestionnaire d'affichage. Ses descendants devraient donner une indication de l'environnement de bureau en cours d'exécution. Sur mon système, le gestionnaire d'affichage s'exécute lui-même (avec différents paramètres). Cela se produit alorsx-session-manager
qui est lié àxfce4-session
. Cela peut être suffisant, mais tous les enfants sont liés à mon environnement de bureau. Les trouver via l'arborescence des processus devrait être le meilleur moyen d'exclure des éléments d'autres systèmes de fenêtres démarrés par divers programmes (ou peut-être délibérément).Ma première pensée a été qu'il serait préférable de rechercher le gestionnaire de fenêtres associé à votre environnement de bureau, mais souvent un autre peut être configuré pour s'exécuter (par exemple
xmonad
dans Gnome) donc ce n'est pas robuste. Le meilleur à rechercher est probablement celui qui gère le bureau réel, par exemplexfdesktop
ou tout autre élément de l'environnement de bureau dont vous avez réellement besoin pour que votre script fonctionne :)Exemple
Voici un exemple utilisant procps-ng (
-C
et--ppid
ne sont pas POSIX). Il suppose que le est une seule instance deXorg
.Ceci est juste un exemple qui fonctionne pour le bureau xfce. Un exemple de travail complet nécessite une enquête sur les processus utilisés par chaque système de bureau, tout comme la plupart des autres solutions nécessitent une enquête sur la façon dont les variables d'environnement sont définies dans divers autres systèmes de bureau.
la source
unknown
sur Ubuntu.another_desktop
résultat inachevé .De toutes les expériences rapportées dans les nombreux commentaires, je pense que c'est mon devoir en tant que PO de trouver une réponse consensuelle. (Rassurez-vous, je serais heureux de revoir cette réponse si des données contrastées devenaient disponibles.)
Pour l'instant, il semble préférable de prendre les devants à partir du
$XDG_CURRENT_DESKTOP
moment où cette variable est définie. Sinon,$XDG_DATA_DIRS
peut fournir les informations souhaitées, plus que la première lettre de${DESKTOP_SESSION:0:1}
.la source
XDG_CURRENT_DESKTOP
. Je pense que le principal problème avec ces variables est qu'elles sont définies par le gestionnaire d'affichage plutôt que par l'environnement de bureau et qu'il y a donc une certaine incohérence. Lorsque je choisis une session par défaut (xfce) avec lightdmecho $DESKTOP_SESSION
donnelightdm-xsession
qui est une fusion delightdm
etx-session-manager
, le processus utilisé pour démarrer mon bureau (lien symbolique versxfce4-session
). J'imagine que l'installation avec une session par défaut différente utilisera simplement un lien symbolique différent et donnera le mêmeDESKTOP_SESSION
DESKTOP_SESSION
dira en faitxfce
ougnome
Cela fonctionne sur Ubuntu 18.10 (cosmique) [type lxqt] et Mint 19 (tara) [type cannelle]:
Capturez le résultat dans une variable et exécutez le code supplémentaire nécessaire via une logique analytique capable (cas stmt, si / alors) qui inclut tous les types reconnus à partir de là; et / ou fonctionnent correctement lorsque des types non reconnus sont utilisés.
la source