# Comment changer d'utilisateur dans un script sh?

**URL:** <https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 3:35 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497 "2016-02-20T15:35:54Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![malinkias](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/e79b87/32.png) [@malinkias](https://www.debian-fr.org/u/malinkias)\
**Post date:** [Février 20, 2016, 3:35 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/1 "2016-02-20T15:35:54Z")

</div>

Bonjour,  
Je souhaite lancer automatiquement mon client folding@home au démarrage de mon ordinateur. J’ai trouvé cette méthode : [debian-administration.org/articles/28](http://www.debian-administration.org/articles/28)

Pour faire un lancement propre, j’ai crée un utilisateur folding, par contre dans mon script j’arrive pas à changer d’utilisateur :

[code]#! /bin/sh

# /etc/init.d/folding@home

# 

# Some things that run always

touch /var/lock/folding@home

# Carry out specific functions when asked to by the system

case “$1” in  
start)  
echo "Starting script folding@home"  
su - folding  
cd /home/folding/folding  
nohup ./FAH504-Linux.exe &  
;;  
stop)  
echo "Stopping script folding@home"  
echo “Could do more here”  
;;  
\*)  
echo "Usage: /etc/init.d/folding@home {start|stop}"  
exit 1  
;;  
esac

exit 0  
[/code]

Au lancement du script à la main il semble s’arrêter après le changement d’utilisateur.  
Merci d’avance.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:35 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/2 "2016-02-20T15:35:55Z")

</div>

Bon, je ne sais pas si tu as vu qu’il y avait un paquet kfolding pour kde. Je ne le vois tirer aucune dépendance, mais tu peux peut être t’en sortir sans install “à la mano”.

Sinon, pour ton script, tu as bien chopé le principe mais pas les habitudes, comme c’est utile de respecter un format canonique, je m’étends:  
d’abord, on met un “cartouche” de commentaires indiquant quelques infos qui sont utilisés par rc-update, genre pour freshclam par exemple:

[code]### BEGIN INIT INFO

# Provides: clamav-freshclam

# Required-Start: $syslog

# Should-Start: clamav-daemon

# Required-Stop:

# Should-Stop:

# Default-Start: 2 3 4 5

# Default-Stop: 0 6

# Short-Description: ClamAV virus database updater

# Description: Clam AntiVirus virus database updater

### END INIT INFO[/code]Ca n’empêche pas de fonctionner, mais ça donne les éléments pour que le rc-update default fonctionne bien.

Ensuite, il est de bon usage de regrouper les noms des commandes et des fichiers utilisés dans des variables en début de script, et en particulier un élément important que tu n’utilises pas mais qui est bien utiles: le fichier de PID qui permet de killer facilement le demon:

`DAEMON=/home/folding/folding/FAH504-Linux.exe
NAME=folding@home
DESC="Démon de folding@home"
CHUID="folding"
PIDFILE=/var/run/folding.pid`  
Ensuite, il y a toute une batterie de fonctions standards de la lsb pour lancer proprement les démons, déclarées dans un include exterieur qu’il faut “sourcer” pour pouvoir les utiliser:

`if ! [-x "/lib/lsb/init-functions"]; then
  . /lib/lsb/init-functions
else
  echo "E: /lib/lsb/init-functions not found, lsb-base (>= 3.0-6) needed"
  exit 1
fi`  
on teste aussi à tous hasard que tout est là pour démarrer:

```auto

```

aprés, en utilisant les routines fournies par la lsb, l’ecriture de start et stop avec un user non root devient triviale:

`case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        start-stop-daemon --start --quiet \
                --pidfile $PIDFILE \
                --chuid $CHUID \
                --exec $DAEMON || log_end_msg 1
        log_end_msg 0
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        start-stop-daemon --stop --quiet --retry 15 --oknodo \
                --pidfile $PIDFILE \
                --exec $DAEMON || log_end_msg 1
        log_end_msg 0
        ;;
  restart|force-reload)
        #
        # If the "reload" option is implemented, move the "force-reload"
        # option to the "reload" entry above. If not, "force-reload" is
        # just the same as "restart".
        #
        echo -n "Restarting $DESC: "
        log_daemon_msg "Restarting $DESC: "
        start-stop-daemon --stop --quiet --retry 15 --oknodo --pidfile \
                /var/run/$NAME.pid --exec $DAEMON || log_end_msg 1
        start-stop-daemon --start --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON || log_end_msg 1
        log_end_msg 0
        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|force-reload}" >&2
        log_action_msg "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac`  
Et voilà !

---

<div class="post-metadata">

**Author:** ![malinkias](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/e79b87/32.png) [@malinkias](https://www.debian-fr.org/u/malinkias)\
**Post date:** [Février 20, 2016, 3:35 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/3 "2016-02-20T15:35:56Z")

</div>

Merci beaucoup pour ces explications, je test ça ce week-end.

---

<div class="post-metadata">

**Author:** ![usinagaz](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/u/ecae2f/32.png) [@usinagaz](https://www.debian-fr.org/u/usinagaz)\
**Post date:** [Février 20, 2016, 3:36 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/4 "2016-02-20T15:36:15Z")

</div>

Bravo tous les deux 😉  
j’ai buté pas mal de temps sur ce problème précis, et je vois là une réponse servie sur un plateau 🙂, super MattOTop 😉

---

<div class="post-metadata">

**Author:** ![malinkias](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/e79b87/32.png) [@malinkias](https://www.debian-fr.org/u/malinkias)\
**Post date:** [Février 20, 2016, 3:36 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/5 "2016-02-20T15:36:16Z")

</div>

Ca marche nickel.  
Le seul soucis, s’est qu’au premier lancement FAH504-Linux.exe, n’a pas trouvé son bon répertoire.

Donc j’ai pris l’exemple exact, pour lancer un script ksh qui fait un changement de répertoire et un nohup de FAH504-Linux.exe.

Merci beaucoup, pour cette solution.

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 20, 2016, 3:36 UTC](https://www.debian-fr.org/t/comment-changer-dutilisateur-dans-un-script-sh/6497/6 "2016-02-20T15:36:22Z")

</div>

dans la page de manuel de start-stop-daemon, tu verras qu’il y a un -d /path pour preciser dans quel répertoire ça se lance.
