web-dev-qa-db-fra.com

Comment puis-je vérifier si l'utilisateur est connecté avec une session graphique ET que le même utilisateur exécute le script

J'ai un script bash qui utilise entre autres la commande gsettings. Il me semble que pour que cette commande fonctionne, l'utilisateur doit être connecté avec une session graphique et, évidemment, doit également exécuter le script comme lui-même (c'est-à-dire pas root).

Je pourrais vérifier s'ils utilisent un terminal graphique en regardant la variable TERM, mais comment puis-je m'assurer que le bourreau du script est le même utilisateur qui est connecté avec une session graphique?

1
tjespe
  • Pour vérifier qui est connecté , vous pouvez utiliser who .

  • Pour vérifier quel utilisateur a exécuté le script :

    ps aux | grep $0 | awk '{ print $1 }' | uniq
    

    ps aux: Répertorie tous les processus en cours d'exécution, y compris l'utilisateur respectif dans la première colonne.

    grep $0: Recherche le script actuel

    awk '{ print $1 }': Imprime uniquement le contenu de la première colonne

    uniq: supprime les doublons possibles

  • Pour vérifier si l'utilisateur qui a exécuté le script est le même que l'utilisateur connecté :

    LOGED_USER=$(who | awk '{ print $1 }') 
    EXEC_USER=$(ps aux | grep $0 | awk '{ print $1 }' | uniq)
    
    if [ $LOGED_USER == $EXEC_USER ]; then
          echo "Same USER"
    else 
          echo "Different USER"
    fi
    
1
M. Becerra