Où sont les scripts de démarrage pour Unity Desktop?

11

Je veux exécuter un script dès que mon authentification lightdm réussit et que mon unité commence à se charger. et je veux exécuter mes scripts en tant qu'utilisateur root.

où se trouvent les scripts de démarrage dans Unity?

Shnd
la source
Je veux exécuter le script une fois mon X chargé.
Shnd
@Shnd X démarre en fait avant lightdm, car lightdm s'exécute également dans X. Donc, si vous voulez exécuter quelque chose en tant qu'utilisateur, vous le voulez probablement "après que l'authentification lightdm a réussi" ou en d'autres termes "lorsque le bureau démarre". Il est également possible d'exécuter un script lorsque votre ordinateur démarre simplement, peu importe si vous avez un utilisateur connecté ou non (c'est ce qui démarre X par exemple) que c'est une question complètement différente. Si vous souhaitez exécuter quelque chose en tant qu'utilisateur, vous le souhaitez probablement et la réponse dépend de votre système d'initialisation.
erikbwork

Réponses:

5

Mettez d'abord votre script dans /usr/binet donnez la permission d'exécution.

Créez maintenant un fichier .desktop dans /home/[user-name]/.config/autostart/lequel exécuter votre script qui s'exécute au démarrage.

Exemple: - Laissez votre nom de fichier de script est "exemple" ou "exemple.sh"

Créez un fichier .desktop avec gedit avec les lignes suivantes et enregistrez-le sous le nom de fichier.desktop dans /home/[user-name]/.config/autostart/

[Desktop Entry]
Type=Application
Exec=sudo example
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=myscript
Comment=Startup Script

Ici Exec=sudo exampleou Exec=sudo example.shexécute votre script en tant que racine à partir de l' /usr/bin autorisation d'exécution sur le fichier .desktop

Maintenant, Script s'exécute au démarrage.

Pandya
la source
1
pour exécuter sudo sans mot de passe, voir askubuntu.com/questions/39281/…
Pandya
Merci ça marche. Mais avec upstart, vous pouvez rendre la même chose peut-être un peu plus simple (regardez ma réponse).
TuKsn
Ce serait parfait avec un lien vers les spécifications
erikbwork
Je ne pense pas que le fichier .desktop doive être marqué comme exécutable.
Julian
4

Une autre possibilité:

Créez un fichier dans $HOME/.config/upstart/my-upstart-script.conf

start on desktop-start
stop on desktop-end

script
  sudo fdisk -l > /home/[user-name]/upstart-test.txt        
end script

Plus de détails sur Upstart :

http://ifdeflinux.blogspot.de/2013/04/upstart-user-sessions-in-ubuntu-raring.html

http://upstart.ubuntu.com/cookbook/

Infos pour courir sudosans mot de passe:

Comment exécuter une application avec sudo sans mot de passe?

Comment exécuter des commandes sudo spécifiques sans mot de passe?

TuKsn
la source
"$ HOME / .config / upstart" aucun répertoire de ce type sur ma machine.
Kalamalka Kid
1
@KalamalkaKid Quelle version d'Ubuntu utilisez-vous? Le répertoire upstart doit se trouver à cet emplacement /home/yourusername/.config/upstart/. Ouvrez votre directeur de maison dans nautilus, appuyez sur Ctrl + H et vous devriez voir le répertoire .config
TuKsn
2

Pour exécuter une commande en tant que root , après la connexion, il existe une autre astuce simple:

Cela prend deux étapes:

  • créer un fichier déclencheur à la connexion
  • créez un cronjob, exécuté par root (défini dans /etc/crontab), pour exécuter un petit script (exécutant votre commande) si et seulement si le fichier de déclenchement existe. Le fichier déclencheur étant supprimé par le même script, votre commande ne s'exécute qu'une seule fois.

La séquence est alors:

USER LOGIN > trigger file is created > cronjob runs script (with your command) and removes trigger file, > next time the script passes, since the trigger file does not exist anymore

La mise en place

Les deux petits scripts:

Un pour créer le fichier déclencheur lors de la connexion:

#!/bin/sh
touch $HOME/.trigger

et deux exécutent la commande:

#!/bin/bash

FILE="/path/to/your/homedirectory/.trigger"
# don't use $HOME here, since you run it by root

if [ -f $FILE ]; then
   <your command here, run by root>
   rm -f $FILE
fi
  • copiez les deux scripts dans deux fichiers vides, enregistrez-les sous create_trigger.shet run_command.sh.
  • Pour des raisons de commodité, rendez-les tous les deux exécutables.
  • Ajoutez la commande suivante à vos applications de démarrage (Dash> Applications de démarrage> Ajouter)

    /path/to/create_trigger.sh
    
  • Ajoutez la ligne suivante au /etc/crontabfichier ( sudo nano /etc/crontab):

    * * * * * root /path/to/run_command.sh
    

Maintenant, la commande définie s'exécute une seule fois dans la minute qui suit la connexion.

Jacob Vlijm
la source