Comment exécuter rc.local en tant qu'utilisateur normal?

8

J'ai quelques félicitations que je souhaite être appelé juste après la connexion, y compris 'startx', et j'ai pensé que cela rc.localsemble être un bon endroit pour eux, mais le problème est qu'il rc.localest exécuté en tant que root et je ne veux pas cela, évidemment je peux le faire quelque chose comme ça:

su username -c somecommend-here

Mais je cherche un moyen d'exécuter l'ensemble de "rc.local" en tant qu'utilisateur normal, ou peut-être qu'il y a un meilleur endroit pour mettre mon code?

PS. J'utilise Ubuntu-mini-remix 1104i386

Merci

omeid
la source
AFAIK rc.local est exécuté parallèlement à la connexion à la fin de la séquence de démarrage. Je veux dire, il sera exécuté même si vous ne vous connectez pas, mais vous pouvez être connecté et il pourrait être en attente d'exécution.
Javier Rivera
@JavierRivera Alors quelle serait la solution?
omeid

Réponses:

6

La manière la plus simple de lancer une commande lorsqu'un utilisateur se connecte est de créer un .desktopfichier pour la commande et de le coller dans le ~/.config/autostartdossier. À quoi ressemble le fichier de bureau? Voici un exemple qui récupère la page d'accueil Ask Ubuntu à wgetchaque fois que l'utilisateur se connecte:

[Desktop Entry] 
Name=Launch wget
Comment=Fetches the Ask Ubuntu home page.
Exec=wget http://askubuntu.com/
Nathan Osman
la source
Ne semble pas une bonne idée de lancer startx(comme l'OP l'a demandé) après la connexion graphique.
enzotib
@enzotib: Il n'est pas fait mention d'une connexion graphique.
Nathan Osman
Peut - être que j'ai mal compris la question, je croyais que l'utilisateur doit commencer à startxpartir rc.local. Désolé
enzotib
1

Je ne connais pas les différences entre /etc/rc.local et un crontab, mais je crée généralement un compte de service et j'ajoute le travail approprié. Par exemple: sudo crontab -u p4padmin -e

@reboot ~/bin/p4p -d -r ~/var/p4p/cache/foo -p 2020 -t depot:2020 -L ~/var/p4p/log/foo.log

Vous n'avez pas besoin de vous connecter pour que le service s'exécute.

Stephen Niedzielski
la source
0

La manière Linux est d'ajouter vos commandes à la ~/.bashrcplace de /etc/rc.local.

Chaque utilisateur a un .bashrcdans son répertoire personnel. Ce fichier de script est exécuté automatiquement juste après la connexion d'un utilisateur. Il est exécuté avec les informations d'identification de l'utilisateur, donc suaucune commande n'est nécessaire.

Il me semble que c'est exactement ce que vous recherchez.

thom
la source
Ce n'est pas tout à fait correct, car il .bashrcn'est pas lu lorsqu'un utilisateur se connecte en utilisant la normale lightdm, par exemple.
J'ai conclu trop vite que l'utilisateur utilisait une connexion en ligne de commande au lieu d'un gestionnaire d'affichage en raison de la commande startx "manuelle" qu'il a mentionnée .... mon mauvais :-)
thom