Comment exécuter automatiquement un script shell lors de la connexion à Ubuntu

15

Comment obtenir un script à exécuter automatiquement lorsque je me connecte? Pas au démarrage de la machine, et pas pour tous les utilisateurs, mais uniquement lorsque je (ou tout utilisateur spécifique avec le script) me connecte via l'interface utilisateur GNOME.

En lisant ailleurs, j'ai pensé que c'était .bash_profiledans mon répertoire personnel, mais pour moi, cela n'a aucun effet. Lorsque je l'exécute manuellement dans une fenêtre de terminal en tapant, ~/.bash_profilecela fonctionne, mais il ne s'exécute pas automatiquement lorsque je me connecte.

J'utilise Ubuntu 11.04. L'autorisation de fichier sur mon .bash_profile est -rwx------. Aucun .bash_profile n'existait dans mon répertoire personnel avant de le créer aujourd'hui.

Il me semble que les anciennes versions de Linux avaient un .profilefichier pour chaque utilisateur, mais cela ne fonctionne pas non plus.

Comment est-il fait? Dois-je configurer autre chose pour que le .bash_profile fonctionne? Ou le script de connexion par utilisateur doit-il figurer dans un autre fichier?

Mike Rowave
la source
.bash_profile, .profile et .bashrc (qui est celui réellement utilisé par ubuntu) sont chargés à chaque fois que vous ouvrez un terminal bash. Donc, en fait, je ne suis pas sûr qu'ils seront chargés si vous vous connectez simplement à GDM.
Juan Sebastian Totero
La publication de votre version d'Ubuntu pourrait vous aider. Dans Ubuntu 10.10 .bashrc "fonctionne pour moi (TM)".
Vlueboy
Voulez-vous dire lorsque vous vous connectez à l'interface graphique ou au shell?
Flimzy
bash les charge lorsque vous démarrez un nouveau shell, ils ne seront donc chargés que lorsque vous ouvrirez une fenêtre de terminal ou vous connecterez à un terminal virtuel, pas lorsque vous vous connecterez à Gnome (GDM).
shiftycow
J'utilise Ubuntu 11.04, comme je l'ai mentionné dans la question d'origine.
Mike Rowave

Réponses:

11

Vous pouvez simplement ajouter la commande suivante dans Système> Préférences> Applications de démarrage:

bash /full/path/to/your/script.sh

Cela devrait faire l'affaire ;)

Juan Sebastian Totero
la source
Tu sais quoi, j'ai fait ça avant et ça n'a pas marché ... sauf que je n'ai pas écrit "bash" avant le chemin du script! Je vais l'essayer avec le bash plus tard. Par curiosité, lorsque vous saisissez quelque chose via l'interface graphique dans les applications de démarrage, dans quel fichier est-il enregistré?
Mike Rowave
Les programmes de démarrage doivent être enregistrés dans/etc/xdg/autostart
shiftycow
L'ajout bash /home/myusername/scriptnameà "Applications de démarrage" a fonctionné! Merci. Cependant, cela peut être spécifique à GNOME sur Ubuntu, c'est pourquoi je me demandais où les entrées de cet élément de menu "Applications de démarrage" sont enregistrées, car cela serait plus susceptible d'être similaire dans d'autres versions modernes de Linux.
Mike Rowave
2
/etc/xdg/autostartsemble être un fichier à l'échelle du système, non spécifique à un utilisateur.
Mike Rowave
Pour les versions ultérieures d'ubuntu, voir askubuntu.com/questions/159887/…
TooTone
8

Donc, fondamentalement, comme l' a suggéré nodiscc , créez un lanceur de bureau: ~ / .config / autostart / script.desktop avec le contenu suivant:

[Desktop Entry]
Type=Application
Name=Autostart Script
Exec=autostart
Icon=system-run
X-GNOME-Autostart-enabled=true

Créez ensuite le script de démarrage automatique: ~ / bin / démarrage automatique avec votre contenu bash:

#!/bin/bash
# Execute bash script below

Assurez-vous que ~ / bin / autostart est exécutable

Bert Regelink
la source
5

Vous pouvez ajouter une ligne dans crontab -

crontab -e

Ajoutez ensuite cette ligne au fichier qui s'ouvre:

@reboot /path/to/your/cool/script

Cela exécutera le script au redémarrage. Pour plus de détails, voirman crontab

inLoveWithPython
la source
Je ne sais pas pourquoi, mais je ne peux pas exécuter les fichiers .sh sur les "applications de démarrage", donc la façon la plus simple de le faire maintenant est cron
Albert Català
1

Essayez ~/.xinitrc(quelques informations ici: https://wiki.archlinux.org/index.php/Xinitrc ). N'oubliez pas que tout ce que vous démarrez dans ce script doit être démarré / exécuté en arrière-plan, sinon il pourrait interférer avec la connexion X.

Slartibartfast
la source
-1

Extension de la réponse @JuanSebastianTotero .

Au lieu de:

bash /full/path/to/your/script.sh

Essayer

sh /full/path/to/your/script.sh

bashn'a pas fonctionné pour moi sur Ubuntu 13.04et 14.04. Mais shoui.

Rahil Wazir
la source