C'est une question que j'ai vue plusieurs fois pour plusieurs versions de Linux, alors essayons d'être exhaustif.
Quelle est la méthode pour exécuter un script/commande/programme avant et après la connexion de l'utilisateur à sa session de bureau ?
Réponse acceptée :
Présentation
Exécuter un programme dans un environnement graphique avant qu'un utilisateur ne se connecte dans un environnement graphique dépend de votre gestionnaire d'affichage. Un gestionnaire d'affichage se charge de vous fournir une interface de connexion et de paramétrer votre environnement graphique une fois connecté.
les plus importants sont les suivants :
- GDM est le gestionnaire d'affichage de GNOME.
- LightDM est un gestionnaire d'affichage multi-bureau, peut utiliser divers frontaux écrits dans n'importe quelle boîte à outils.
- LXDM est le gestionnaire d'affichage LXDE mais indépendant de l'environnement de bureau LXDE.
- SDDM est un gestionnaire d'affichage moderne pour X11 et Wayland visant à être rapide, simple et beau.
Nous verrons comment configurer l'exécution de la commande lorsque la fenêtre contextuelle du gestionnaire d'affichage s'affiche avant la connexion d'un utilisateur et comment exécuter quelque chose lorsque quelqu'un est enfin connecté.
Si vous ne savez pas lequel vous utilisez, vous pouvez vous référer à cette question :
Existe-t-il une simple commande linux qui me dira quel est mon gestionnaire d'affichage ?
IMPORTANT
Avant de commencer, vous allez éditer le fichier sauf si vous mentionnez exécuter la commande en tant que root
. Ne supprimez pas les éléments existants dans ces fichiers, sauf si vous savez ce que vous faites et faites attention à ce que vous mettez dans ces fichiers. Cela pourrait vous empêcher de vous connecter.
GDM
Soyez prudent avec GDM, il exécutera tous les scripts en tant que `root`, un code d'erreur différent de 0 pourrait limiter votre capacité de connexion et GDM attendra que votre script finisse de le rendre insensible tant que votre commande s'exécutera.
Pour une explication complète [lisez la documentation][5].
Avant de se connecter
Si vous avez besoin d'exécuter des commandes avant qu'un utilisateur ne soit connecté, vous pouvez modifier le fichier :
`/etc/gdm3/Init/Default`.
Ce fichier est un script shell qui sera exécuté avant l'affichage gestionnaire est affiché à l'utilisateur.
Après la connexion
Si vous avez besoin d'exécuter des choses une fois qu'un utilisateur s'est connecté mais avant que sa session ait été initialisée, éditez le fichier :
`/etc/gdm3/PostLogin/Default`
Si vous voulez exécuter la commande après la session d'initialisation de la session (env, environnement graphique, login…) éditez le fichier :
`/etc/gdm3/PreSession/Default`
LightDM
Je parlerai de lightdm.conf et non de /etc/lightdm.conf.d/*.conf. Vous pouvez faire ce que vous voulez ce qui est important c'est de connaître les options que vous pouvez utiliser.
Attention avec lightDM, vous pourriez déjà avoir plusieurs autres scripts en cours de démarrage il faut lire précisément votre fichier de config avant de le modifier. l'ordre dans lequel vous placez ces scripts peut également influencer la manière dont la session se charge.
LightDM fonctionne un peu différemment des autres, vous mettrez des options dans les principaux fichiers de configuration pour indiquer le script qui sera exécuté.
Modifiez le fichier de configuration lightDM principal /etc/lightdm/lightdm.conf
.
Vous devez ajouter la première ligne avec [Seat:*]
, comme indiqué ici :
Les versions ultérieures de lightdm (15.10 et suivantes) ont remplacé l'obsolète
[SeatDefaults] par [Seat :*]
Avant de se connecter
Ajoutez une ligne `greeter-setup-script=/my/path/to/script`
Ce script sera exécuté lorsque lightDM affichera l'interface de connexion.
Après la connexion
Ajoutez une ligne `session-setup-script=/script/to/start/script`
Cela exécutera le script en tant que `root` après qu'un utilisateur se soit connecté avec succès.
LXDM
Avant de se connecter
Si vous souhaitez exécuter la commande avant que quiconque ne se connecte, vous pouvez modifier le script shell :
`/etc/lxdm/LoginReady`
Après la connexion
Si vous souhaitez exécuter la commande après que quelqu'un se soit connecté mais en tant que root, vous pouvez modifier le script shell :
`/etc/lxdm/PreLogin`
Et si vous souhaitez exécuter la commande en tant qu'utilisateur connecté, vous pouvez modifier le script :
`/etc/lxdm/PostLogin`
SSDM
Impossible de trouver des informations appropriées à ce sujet… N'hésitez pas à modifier cette partie.