Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 29-12-2019 11:20:27

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

scripts de login et logout

Salut,

Je galère à mettre en place des scripts de login et logout... D'après mes recherches :
- ~/.bashrc est utilisé pour les non-login shells (par exemple ouverture d'un terminal en session graphique)
- ~/.bash_profile est utilisé pour les login shells (donc, quand on ouvre une session avec son code utilisateur et son mot de passe), mais n'est pas utilisé par les sessions graphiques (donc, pas par mate)
- ~/.bash_logout est utilisé à la fin d'une session login shell (quand on fait un logout ou un exit), mais apparemment n'est pas utilisé par les sessions graphiques (d'après mon expérience, mais je n'ai rien su trouver sur le sujet, ni comment le remplacer pour les sessions graphiques)
- ~/.profile est utilisé pour les login shells en session graphique (donc, devrait l'être par mate...)
- Dans /etc/lightdm.conf, greeter-setup-script permet de donner le chemin d'un script à lancer au login, et session-cleanup-script indique le script à utiliser à la fermeture

J'ai donc fait un ~/.profile qui contient :

source ~/.bash_profile


et un ~/.bash_profile contenant :

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

source /home/joseph/mountPandaShares
 


Le script mountPandaShares fait simplement les mount nécessaires pour accéder aux partages réseau.

Mais, à ma grande surprise, le contenu de ~./bashrc est bien exécuté (ce qui semble normal), mais aucune autre instruction de ~/.bash_profile (ce qui semble anormal !). Bon, qu'à cela ne tienne, j'ajoute dans /etc/lightdm.conf :

greeter-setup-script=~/.bash_profile


mais ça ne fonctionne pas mieux sad

Pour ce qui est de la fin de session, idem, ~/.bash_logout (qui lance les démontages des partages réseau uniquement) ne fonctionne pas... Pire : l'ajout dans /etc/lightdm.conf (toujours dans la section [SeatDefaults]) de :

session-cleanup-script=~/.bash_logout


fait qu'il faut attendre une bonne trentaine de secondes avant que la déconnexion se fasse, mais sans avoir fait les unmount demandés dans ~/.bash_logout...

Bon, manifestement, il y a un truc qui m'échappe ou que je fais de travers, mais quoi ?

Hors ligne

#2 29-12-2019 12:12:49

MicP
Membre
Inscription : 29-02-2016

Re : scripts de login et logout

Bonjour

…J'ai donc fait un ~/.profile qui contient :…
…et un ~/.bash_profile contenant :…
… le contenu de ~./bashrc est bien exécuté (ce qui semble normal), mais aucune autre instruction de ~/.bash_profile…

Dans mon système debian,

michel@debg53sw:~$ cat ~/.profile
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

michel@debg53sw:~$

Donc, en traduisant ces commentaires,
si le fichier ~/.bash_profile existe,
alors le fichier ~/.profile ne sera PAS exécuté.

=======

…l'ajout dans /etc/lightdm.conf …

Sur mon système,
il n'existe pas de fichier /etc/lightdm.conf

michel@debg53sw:~$ ls /etc/lightdm.conf
ls: impossible d'accéder à '/etc/lightdm.conf': Aucun fichier ou dossier de ce type
michel@debg53sw:~$

par contre,
il existe bien un fichier /etc/lightdm/lightdm.conf

michel@debg53sw:~$ ls /etc/lightdm/lightdm.conf
/etc/lightdm/lightdm.conf
michel@debg53sw:~$



=======
Les scripts exécutés avant la connexion et après la déconnexion
sont exécutés par le compte utilisateur root

Donc,

greeter-setup-script=~/.bash_profile

est équivalent à :

greeter-setup-script=/root/.bash_profile


et

session-cleanup-script=~/.bash_logout

est équivalent à :

session-cleanup-script=/root/.bash_logout

Hors ligne

#3 29-12-2019 17:01:45

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

Re : scripts de login et logout

Merci de ton aide smile

MicP a écrit :

Donc, en traduisant ces commentaires,
si le fichier ~/.bash_profile existe,
alors le fichier ~/.profile ne sera PAS exécuté.


Ok, j'avais zappé ça !
Reste donc à espérer que la réciproque soit vraie : si pas de ~/.bash_profile ni de ~/.bash_login, alors ~/.profile est exécuté... Je vais tester ça.

MicP a écrit :

Sur mon système,
il n'existe pas de fichier /etc/lightdm.conf

michel@debg53sw:~$ ls /etc/lightdm.conf
ls: impossible d'accéder à '/etc/lightdm.conf': Aucun fichier ou dossier de ce type
michel@debg53sw:~$

par contre,
il existe bien un fichier /etc/lightdm/lightdm.conf

michel@debg53sw:~$ ls /etc/lightdm/lightdm.conf
/etc/lightdm/lightdm.conf
michel@debg53sw:~$


Ooops ! Autant pour moi : j'ai loupé une marche dans l'escalier hiérarchique du chemin...

MicP a écrit :

Les scripts exécutés avant la connexion et après la déconnexion
sont exécutés par le compte utilisateur root

Donc,

greeter-setup-script=~/.bash_profile

est équivalent à :

greeter-setup-script=/root/.bash_profile


et

session-cleanup-script=~/.bash_logout

est équivalent à :

session-cleanup-script=/root/.bash_logout


Arrrgh... Je n'avais effectivement pas fait attention à ce "détail" ops.gif

Espérons que ~/.profile fonctionne, une fois ~/.bash_login supprimé, parce qu'il me faut des mount adaptés pour chaque utilisateur...

Une fois tout ça remis d'aplomb, il va rester le problème du logout... Pour le moment, je pourrai faire avec session-cleanup-script dans /etc/lightdm/lightdm.conf : il n'y a pas de gros inconvénients à faire démonter par root les partages non montés. Mais si j'ai autre chose de spécifique à l'utilisateur à faire, ça va être problématique...

Hors ligne

#4 29-12-2019 17:43:14

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

Re : scripts de login et logout

Bon, j'ai peut-être trouvé mon bonheur... Dommage que le wiki Debian soit moins complet que celui d'Ubuntu sad

Je ne peux pas tester pour le moment (looonnngue session ssh en cours...), mais j'essaie ASAP. Et si ça semble concluant, je verrai si je peux compléter le wiki.

Hors ligne

#5 30-12-2019 01:48:37

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

Re : scripts de login et logout

Bon, j'ai fait quelques essais. Déjà un truc : mon lightdm.conf contient

#
# Seat defaults
#
 


suivi d'un tas d'options commentées : si on met quelque chose à cet endroit, évidemment ça ne fonctionne pas ! il faut le mettre au-dessous de

#
[SeatDefaults]
 


entre crochets !

Après, je n'ai pas trop cherché pourquoi, mais session-setup-script n'aime pas ~/ sad Peut-être simplement parce qu'il va chercher le script dans /root, alors que le mien est dans les /home des utilisateurs ? Quoi qu'il en soit, ça ne fait pas mon affaire !

Le .profile (/home/user/.profile) est bien pris en compte, mais il fait tout planter (la session commence à s'ouvrir, mais les icônes n'apparaissent pas et le sablier reste indéfiniment, il n'y a plus qu'à killer le process lightdm... Quant au .bash_logout, il ne s'exécute pas sad sad

Du coup, j'ai dû contourner les problèmes :
- Au login, j'utilise "Applications au démarrage" pour lancer mon script
- Au logout, session-cleanup-script dans lightdm.conf (qui s'exécute en tant que root, c'est bien précisé ici contrairement à session-setup-script) m'appelle le script de démontage de tous les partages réseau, et appelé par le chemin absolu, donc script unique pour tous les utilisateurs sad

Pas génial, pas tout à fait ce que je voulais, mais bon, c'est fonctionnel.

Hors ligne

#6 30-12-2019 05:45:48

Switch
Membre
Distrib. : Stable
(G)UI : XFCE !
Inscription : 17-06-2012
Site Web

Re : scripts de login et logout

Salut,

- Systemd est-il une solution pour gérer ces scripts de login logout ? : https://doc.ubuntu-fr.org/creer_un_service_avec_systemd

-  Chez moi script de login mis dans le .profile est bien lancé ( graphique et ssh ); mais tu dis avoir eu un blocage . Ton script devrait-il utiliser l'option nohup pour se détacher de son lanceur pour ne pas bloquer la suite du lanceur .profile ? https://www.debian-fr.org/t/lancer-un-s … on/35115/8 Ce forum propose d'utiliser nohup , -x et -$ pour ne pas bloquer le .profile .

- Chez moi le .bash_logout fonctionne que pour une fermueture de session ssh pas pas graphique .

Hors ligne

#7 30-12-2019 13:55:12

MicP
Membre
Inscription : 29-02-2016

Re : scripts de login et logout

…le .bash_logout fonctionne que pour une fermueture de session ssh pas pas graphique .…

C'est parce que, pour établir la connexion ssh et lancer une instance du shell sur la machine à laquelle tu t'es connectée,
tu as eu besoin de t'identifier et de donner ton mot de passe (<=> utiliser un "login shell")

Par contre, dans l'interface graphique, tu t'es déjà identifié pour ouvrir ta session graphique de l'environnement de bureau,
et donc, quand tu lances une fenêtre d'émulateur de terminal, l'instance du shell lancé n'est pas un "login shell" <=> on ne te demande plus d'entrer un nom de login et le mot de passe correspondant.

Dernière modification par MicP (30-12-2019 13:56:33)

Hors ligne

#8 30-12-2019 23:59:30

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

Re : scripts de login et logout

Salut,

Switch a écrit :

- Systemd est-il une solution pour gérer ces scripts de login logout ? : https://doc.ubuntu-fr.org/creer_un_service_avec_systemd


Tiens, oui, ça a l'air d'être intéressant. Je ne sais pas si ça pourrait vraiment servir dans mon cas (apparemment, le logout est difficile à détecter !), mais ça peut être utile dans plusieurs cas...

Switch a écrit :

Ton script devrait-il utiliser l'option nohup pour se détacher de son lanceur pour ne pas bloquer la suite du lanceur .profile ?


Peut-être... Mais je comprendrais qu'il bloque l'exécution du .profile le temps qu'il s'exécute lui-même, alors que là il fait tout planter définitivement ! Bon, le coup des applications au démarrage est finalement pas mal, c'est côté logout que j'aurais aimé faire mieux, mais apparemment ce n'est pas possible.

MicP a écrit :

Par contre, dans l'interface graphique, tu t'es déjà identifié pour ouvrir ta session graphique de l'environnement de bureau,
et donc, quand tu lances une fenêtre d'émulateur de terminal, l'instance du shell lancé n'est pas un "login shell" <=> on ne te demande plus d'entrer un nom de login et le mot de passe correspondant.


Parle-t-on bien de la même chose ? Oui, si on lance une fenêtre d'émulateur de terminal, il ne s'agit pas d'un login shell. Par contre, la session graphique elle-même devrait pouvoir être considérée comme tel, et la fermeture de session comme la fermeture de ce login shell, non ? Bon, c'est vrai qu'une session graphique n'est pas vraiment un shell... Mais c'est quand même une "login session" !

Hors ligne

#9 01-01-2020 02:12:34

Switch
Membre
Distrib. : Stable
(G)UI : XFCE !
Inscription : 17-06-2012
Site Web

Re : scripts de login et logout

Switch a écrit :


    Ton script devrait-il utiliser l'option nohup pour se détacher de son lanceur pour ne pas bloquer la suite du lanceur .profile ?


jibe a écrit :

Peut-être... Mais je comprendrais qu'il bloque l'exécution du .profile le temps qu'il s'exécute lui-même, alors que là il fait tout planter définitivement ! Bon, le coup des applications au démarrage est finalement pas mal, c'est côté logout que j'aurais aimé faire mieux, mais apparemment ce n'est pas possible.


- En plus du nohup, tu pourrais tester d'ajouter un délai au debut de ton script ( pour que la session graphique charge proprement tout avant que ton script commence à faire ces montages ) avec une commande sleep ? Possible que ton script lancais une commande qui bug car la session n'était pas entierement démarrée ?

- Tu peux aussi tenter de faire du debug en demandant à ton script de loger chaque étape dans unfichier texte, comme ca  tu pourra voir à quelle étape il a bloqué ?

- Concernant le menu graphique "Applications au démarrage", je suppose que tu peux retrouver le fichier de conf sur lequel il se base ? Chez moi dans XFCE je l'ai trouvé. Ca peut aider si t'as besoin de faire ca en commande ou faire des scripts .

On pourrait mettre tout cas dans une page wiki debian facile, pour chaque environnement de bureau . Y'a pas de tuto pour ce que tu cherchais pour le moment hmm

Hors ligne

#10 01-01-2020 22:02:45

jibe
Membre
Distrib. : DF-Linux 10
Noyau : Linux 4.19.0-10-amd64
(G)UI : mate
Inscription : 19-06-2018

Re : scripts de login et logout

Salut et bonne année smile

Merci pour toutes ces suggestions, @Switch. Mais finalement, s'il faut mettre des tempos, lancer dans un shell différent et attendre que la session soit démarrée, autant utiliser les applications au démarrage ! En fait, si ça se trouve, ça a justement été fait pour ça. Et en fait, c'est plus le logout qui me gêne un peu, les montages au login vont très bien avec les applications au démarrage.

Après, effectivement, ça peut être intéressant de voir de plus près comment ça se comporte et de documenter le wiki. J'essaierai peut-être de voir ça, mais en ce moment je suis un peu surbooké.

Note aussi que les applications au démarrage permettent de lancer très facilement n'importe quel script ou exécutable, donc il n'y a normalement pas besoin de modifier la config (qui doit d'ailleurs l'être automatiquement lorsqu'on ajoute ou retranche des applis avec l'interface adéquat).

En tous cas, merci à tous les intervenants : même si je n'ai pas réussi à faire exactement ce que je voulais comme je voulais, la solution de contournement est à l'usage pleinement satisfaisante du point de vue fonctionnel. Seul le côté élégance de la solution me chagrine un peu.

Hors ligne

Pied de page des forums