Lancer un script au démarrage d'une session

Bonsoir,

étant sous Debian 6, je recherche le moyen de lancer un script bash, qui dans un premier temps, me permettrait d’afficher dans un terminal un “Bonjour $USER”.
Mon but est au final de mettre en place des script pour changer de fond d’écran, d’afficher des messages, etc, le tout quand un utilisateur se connecte à sa session.

J’ai regardé du côté de /etc/profile.d/ où tout les scripts mis dans ce dossier se lancent (si certains fichier sont au préalable bien configuré) quand l’utilisateur lance un terminal, ce qui ne me convient pas ici car le script doit se lancer automatiquement sans intervention de l’utilisateur (si ce n’est que de se connecter).

Auriez-vous une piste à me donner svp ?

Merci d’avance pour votre aide.

Bon déjà… c’est bien comme ça qu’il faut faire pour les sessions console.

Vu que ça ne te convient pas, j’en déduis (boule de cristal) que tu parles de session X.
Partant de là, deux pistes :
[ul][li] /etc/X11/Xsession.d/ pour les scripts qui doivent être lancés pour tous les utilisateurs[/li]
[li] ~/.config/autostart/ devrait concerner uniquement un utilisateur particulier (je dis “devrait” car étant sous KDE, j’utilise ~/.kde/share/autostart/ sachant que ~/.kde/Autostart/ fonctionne tout aussi bien).[/li][/ul]

Merci pour ta réponse.

J’ai lu en complément de ta réponse des explications ici :http://www.debian-administration.org/articles/50

Et j’avoue ne pas comprendre pourquoi mon script bash ne se lance pas car quand je vais dans le dossier /etc/X11/Xsession.d/ et que je lance monscript.sh : il s’exécute normalement.

Par contre, il ne se lance pas lorsque je me connecte à ma session …

Voici mon script :

#!/bin/sh

# On récupère l'id de l'utilisateur
userSID=$(ldapsearch -x -h 192.168.1.1 -b uid=$USER,ou=Users,dc=utopia,dc=net | grep uidNumber | cut -f2 -d:)

# On récupère le dernier chiffre qui correspond au script
scriptNumber=$(echo $userSID | cut -f1 -d0)

# On récupère le chemin du script correspondant 
chemin=$(ldapsearch -x -h 192.168.1.1 -b number=$scriptNumber,ou=GPO,dc=utopia,dc=net | grep directory | cut -f2 -d:)

# On execute le script

sh $chemin

En fait, je recherche dans ma base LDAP l’userID pour en isoler le dernier chiffre. En fonction de ce dernier chiffre, je recherche dans ma base LDAP le chemin du script correspondant.

[quote=“man run-parts”]run-parts exécute tous les fichiers exécutables situés dans répertoire, et dont le nom satisfait les contraintes décrites ci-dessous. Les autres fichiers sont ignorés.
Si ni l’option --lsbsysinit ni l’option --regex n’est utilisée, alors les noms ne doivent comporter que des lettres ASCII (minuscules ou majuscules), des chiffres ASCII, des tirets de soulignement (« underscore ») ASCII ou des tirets (signes moins) ASCII.[/quote]
Accessoirement, ces fichiers sont exécutés dans l’ordre alphabétique, tu remarqueras que ceux déjà présents commencent par deux chiffres (00 à 99) donc c’est pas une mauvaise idée de faire pareil pour le tien, histoire de contrôler précisément à quel moment il va se lancer par rapport aux autres.

J’ai renommé mon script en “95scriptDebut.sh”, sans que cela ne change rien lors de la connexion d’un utilisateur.

Dans quel(s) log(s) pourrais-je regarder pour déceler le problème ?

Edit : Je me demande si ce n’est pas le .sh qui pose problème en fait …

Sans blague ? :icon-lol:

J’ai recréé un fichier, que j’ai nommé “96scriptDebut”, dans lequel j’ai mis le code plus haut mais amputé de la première ligne avec “#!/bin/sh”.

J’ai vérifié à ce que ce fichier ai les même droit que les autres fichiers “XXnomFichier” et rien ne change lorsque que je me connecte …

Aurais-tu une idée de ce que j’ai vraisemblablement loupé ?

Salut,

Écris dans le ~/.profile du répertoire d’accueil de l’utilisateur dont tu te sers pour faire tes tests ( ton rép à toi à priori : ~/.profile, ou ~/.bash_profile, regarde, moi j’ai fait mes tests avec .profile sous Squeeze/Bash, et ce que j’écris ci-dessous fonctionne parfaitement) :

-nohup pour que ton script ne meure pas à la fin de l’exécution du .profile
-x pour que le gnome-terminal execute ton script ~/le_nom_de_ton_script.sh
-& pour que ton script ait son propre PID ( sinon il va bloquer le .profile tant que ton script ne sera pas fini, et ça c’est môche :smiley: )

N’oublies pas de remettre #! /bin/sh au début de ton script (ligne shebang)

Tu n’es pas obligé d’avoir un terminal, mais c’est mieux pour la mise au point …

Tu verras que ton script est bien lancé à l’ouverture de session X, par contre le gnome-terminal se fermera à la fin de celui-ci ( parce que le processus qui l’a engendré a disparu je pense )

Profites-en pour lire ceci :

[code]head -5 .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.

see /usr/share/doc/bash/examples/startup-files for examples.

the files are located in the bash-doc package.

[/code]
Je ne saurai pas comment faire autrement, il y a sans doute d’autres moyens mais je les connais pas. En dehors de ça :

[code]head -3 /etc/X11/Xsession.d/20x11-common_process-args

$Id: 20x11-common_process-args 305 2005-07-03 18:51:43Z dnusinow $

This file is sourced by Xsession(5), not executed.[/code]

tu lis bien “not executed”

Tu peux appronfondir ça (processus fils, parallélisme) dans “Shells Linux et Unix par la pratique” ch. Prog shell avancée (ch6) de Christophe Blaess

Tiens nous au courrant, ça m’intéresse, bon courage.

J’aurais tendance à te dire de commencer par valider que le script s’exécute réellement, par exemple en créant un fichier précis dans /tmp
Genre, au tout début de ton script :

Ça donnera déjà des pistes de recherche : si le fichier apparaît bien dans /tmp c’est que le script s’exécute et que le problème vient de tes autres commandes (auquel cas on retombe certainement sur les suggestions de Rantanplan : nohup et &).

D’ailleurs au vu de ton script je vérifierais en même temps que la variable $USER est bien renseignée au moment de l’appel de ton script :

Si c’est ça qui déconne, utilise $(whoami) à la place.