IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Applications et environnements graphiques Discussion :

Exécuter une commande à la déconnexion de l'utilisateur en mode graphique


Sujet :

Applications et environnements graphiques

  1. #1
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut Exécuter une commande à la déconnexion de l'utilisateur en mode graphique
    Bonjour,

    j'essaie de mettre en place un mécanisme pour que les utilisateurs d'une machine s'authentifient. En effet ce PC pour des raisons techniques ne possède qu'un seul compte utilisateur, mais plusieurs personnes travaillent dessus. C'est un PC isolé (connecté à aucun réseau). Je précise que je suis sous CentOS avec Gnome et shell bash.

    Je voudrais qu'au moment où l'utilisateur se connecte, une fenêtre lui demandant son nom et son prénom apparaisse. J'ai réussi à faire cette partie en ajoutant le script suivant dans le dossier /etc/profile.d:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/bin/bash
    if ! [ -f $HOME/.fichierLogUtilisationPC_tmp.txt ]	# Si le fichier temporaire n'existe pas: c'est une connexion
    then
    	touch $HOME/.fichierLogUtilisationPC_tmp.txt	# Cree le fichier temporaire (pour ne pas redemander le nom a chaque ouverture de terminal)
    	/etc/profile.d/AuthentificationUtilisateur	        # Demande son nom a l'utilisateur et ajoute une ligne au fichier log (~/.fichierLogUtilisationPC.txt)
    fi
    Cela fonctionne bien, à la connexion j'ai bien mon programme "AuthentificationUtilisateur" qui s'exécute. Ce programme affiche une fenêtre demandant nom et prénom puis ajoute une ligne dans un fichier de log situé sous le $HOME (du type: "16/10/2018 12:35:21: connexion de Mokochan").
    Je crée également un fichier temporaire, sinon mon programme se réexécute à chaque fois que l'utilisateur ouvre un terminal.

    Mon problème est le suivant: comment supprimer ce fichier temporaire lorsque l'utilisateur ferme la session?
    J'ai tenté d'utiliser la commande trap en ajoutant ceci à la fin de mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    trap 'rm -rf $HOME/.fichierLogUtilisationPC_tmp.txt' SIGHUP
    Mais cela ne fonctionne pas. Le fichier temporaire est effectivement supprimé si j'ouvre une console et la referme (ce que je ne veut pas justement), par contre si j'utilise le menu graphique "fermer la session" SIGHUP n'est pas émis.

    Quelqu'un aurait il une solution?

    Merci d'avance!

  2. #2
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    Si tu as un fichier .bash_logout dans les répertoires utilisateurs ( pour centos j'en sais rien je suis sous mint ) le fichier dit ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # ~/.bash_logout: executed by bash(1) when login shell exits.
     
    # when leaving the console clear the screen to increase privacy
     
    if [ "$SHLVL" = 1 ]; then
        [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
    fi
    Il devrait être possible d'ajouter une commande avant #when living... ? Mais il faudra le faire pour tous les utilisateurs.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    mais ceci s'applique uniquement à bash.
    lorsque tu quittes une session graphique, tu ne quittes pas bash (à moins d'avoir un terminal ouvert, évidemment, et même alors, à l'arrache, je ne suis donc pas certain que .bash_logout soit exécuté...).

    n'est-il pas possible d'inverser les propositions, et de purger les précédentes exécutions au début du script ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Merci pour vos réponses,
    en effet sous CentOS j'ai bien un .bash_logout mais comme le dit N_BaH ce fichier ne s'exécutera pas quand l'utilisateur fermera sa session car il ne passe pas par un terminal.

    n'est-il pas possible d'inverser les propositions, et de purger les précédentes exécutions au début du script ?
    Désolée je n'ai pas compris ce que tu veux dire?

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    mouais, je suis d'accord, c'est pas clair.

    comment l'exécution de ton script est-elle déclenchée ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Bonjour,
    Il faudrait savoir comment est lancée la session.
    Si c'est via gdm ou lightdm, il y a possibilité de créer des scripts exécutés sous root au démarrage ou a l'arrêt de la session.
    Pour gdm, que je ne connais pas, il y a /etc/gdm/PostSession et certainement 'PreSession'.
    Pour lightdm, il y a ça dans lightdm.conf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #display-setup-script=
    #display-stopped-script=
    #greeter-setup-script=
    #session-setup-script=
    #session-cleanup-script=
    Cordialement.

  7. #7
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    il y a /etc/gdm/PostSession/ et certainement 'PreSession'.
    Sous mint c'est dans /etc/mdm/PostSession/Default ( Il suffit de rechercher 'session' dans /etc pour le trouver ) reste à savoir si le fichier s'exécute avant ou après la fermeture mais ça reste à essayer.

  8. #8
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Comment l'exécution de ton script est-elle déclenchée ?
    A priori tous les scripts positionnés dans /etc/profile.d sont exécutés automatiquement au démarrage du shell. En tout cas cela fonctionne bien chez moi.

    Sous mint c'est dans /etc/mdm/PostSession/Default ( Il suffit de rechercher 'session' dans /etc pour le trouver ) reste à savoir si le fichier s'exécute avant ou après la fermeture mais ça reste à essayer.
    Excellent, je n'avais pas vu ces répertoires, cela fonctionne tout à fait comme je le veux à présent.

    Pour résumer:
    - Dans /etc/profile.d j'ai un script "authentification.sh" avec le contenu suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    if ! [ -f $HOME/.fichierLogUtilisationPC_tmp.txt ]	        # Si le fichier temporaire n'existe pas: c'est une connexion
    then
    	touch $HOME/.fichierLogUtilisationPC_tmp.txt	# Cree le fichier temporaire (pour ne pas redemander le nom a chaque ouverture de terminal)
    	/etc/profile.d/AuthentificationUtilisateur	        # Demande son nom a l'utilisateur et ajoute une ligne au fichier log (~/.fichierLogUtilisationPC.txt)
    fi
    - Toujours dans /etc/profile.d j'ai mis un exécutable AuthentificationUtilisateur, qui est une petite application graphique que j'ai développé (C++/Qt) demandant simplement le nom et le prénom de l'utilisateur avec un bouton valider. Un clic sur ce bouton écrira une nouvelle ligne dans le fichier "fichierLog.txt" placé dans le $HOME du compte utilisateur, puis l'application se ferme.

    - Dans /etc/gdm/PostSession, j'ai un fichier nommé Default qui contient les commandes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    rm -rf $HOME/.fichierLogUtilisationPC_tmp.txt       # Supprime le fichier temporaire
    exit 0
    Avec tout ça, quand l'utilisateur se logge avec gdm (donc en mode graphique), il voit bien la fenêtre demandant nom et prénom, le fichier de log est mis à jour et le fichier temporaire est créé. Grâce au fichier Default dans /etc/gdm/PostSession, ce fichier temporaire est bien supprimé lorsque l'utilisateur ferme sa session (toujours en mode graphique).

    Merci beaucoup!

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    tous les scripts positionnés dans /etc/profile.d sont exécutés automatiquement au démarrage du shell
    donc, comment ça se passe, précisément :
    l'utilisateur accède à Gnome à partir de GDM ? ou quoi ?
    puis, il doit ouvrir un terminal ? et , du coup, s'il n'ouvre pas de terminal, tu ne sauras pas qu'il s'est connecté...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    - Dans /etc/gdm/PostSession, j'ai un fichier nommé Default qui contient les commandes suivantes:
    Que ça ? On dirait qu'a l'origine il était vide.
    Le mien est plus fourni:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/bin/sh
     
    PATH="/usr/bin:$PATH:/bin:/usr/bin"
    OLD_IFS=$IFS
     
    mdmwhich () {
      COMMAND="$1"
      OUTPUT=
      IFS=:
      for dir in $PATH
      do
        if test -x "$dir/$COMMAND" ; then
          if test "x$OUTPUT" = "x" ; then
            OUTPUT="$dir/$COMMAND"
          fi
        fi
      done
      IFS=$OLD_IFS 
      echo "$OUTPUT"
    }
     
    # Use common Xreset framework if it exist
    if [ -x /etc/X11/Xreset ] ; then
      /etc/X11/Xreset
    fi
     
    exit 0
    C'est juste pour info au cas ou je voudrais essayer centos un de ces jours.

  11. #11
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    N_BaH: l'utilisateur se connecte effectivement avec GDM. Dès qu'il a fini d'entrer son login et mot de passe ma fenêtre demandant le nom et prénom s'affiche immédiatement, donc il n'a pas besoin d'ouvrir un terminal. désolée si je n'ai pas employé les bons termes, en disant "au démarrage du shell" je voulais dire que les scripts de profile.d semblent s'exécuter à la connexion, qu'on soit via GDM ou non.

    mm_71 en effet mon fichier Default ne contenait rien d'autre que "exit 0". Pa contre ce n'est pas une version récente de CentOS (je suis sous CentOS6).

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Points : 539
    Points
    539
    Par défaut
    Salut,
    Je pense qu'il vaudrait mieux déplacer ton script /etc/profile.d/authentification.sh vers /etc/gdm/PreSession/Default.
    Ton exécutable AuthentificationUtilisateur n'a rien a faire là, je pense que tu pourrais le mettre dans /usr/local/bin/ et adapter ton .sh en conséquence.
    Cordialement.

  13. #13
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Points : 2 053
    Points
    2 053
    Par défaut
    je pense que tu pourrais le mettre dans /usr/local/bin/ et adapter ton .sh en conséquence.
    A mon avis il suffirait de mettre le contenu du script /etc/profile.d/AuthentificationUtilisateur dans /etc/gdm/PreSession/Default au bon endroit. Ça devrait fonctionner et ce qui est cité ci-dessous ne serait sans doute plus nécessaire.
    Je crée également un fichier temporaire, sinon mon programme se réexécute à chaque fois que l'utilisateur ouvre un terminal.

  14. #14
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Je pense qu'il vaudrait mieux déplacer ton script /etc/profile.d/authentification.sh vers /etc/gdm/PreSession/Default.
    J'ai essayé mais malheureusement cela ne fonctionne pas, après le login utilisateur l'IHM se fige et tout est bloqué. Du coup je vais le laisser dans /etc/profile.d...

    Par contre c'est vrai qu'il serait mieux de déplacer mon exécutable dans /usr/bin, ce que je vais faire.

    Merci!

  15. #15
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    voire, puisque tu es sur Gnome, inscrire ton exécutable dans les "Programmes au démarrage"
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/02/2006, 12h43
  2. [Run]Exécuter une commande paramétrable
    Par nice dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/01/2006, 14h27
  3. exécuter une commande de logiciel
    Par MrsFrizz dans le forum C
    Réponses: 4
    Dernier message: 17/01/2006, 10h48
  4. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  5. Exécuter une commande linux.
    Par casafa dans le forum Linux
    Réponses: 4
    Dernier message: 20/07/2005, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo