Comment exécuter une application au démarrage en tant qu'un certain utilisateur?

17

Existe-t-il un moyen de lancer une application au démarrage sous un certain compte utilisateur?

Par exemple, je voudrais avoir a_small_appexécuté sous le compte d'utilisateur bob(qui est dans le groupe bobsgroup). Dois-je ajouter quelque chose /etc/init.d?

Remarque: Je ne souhaite pas que l'application démarre après la connexion d'un utilisateur, mais plutôt au démarrage de l'ordinateur.

Nathan Osman
la source
Voulez-vous que l'application démarre avant de vous connecter dans la fenêtre de connexion?
Martin Owens -doctormo-
@Martin: Eh bien, cela n'a pas vraiment d'importance ... J'utilise Apache comme exemple ici. Ça commence quand?
Nathan Osman

Réponses:

13

Une méthode indépendante du système de démarrage. Vous pouvez l'utiliser dans /etc/rc.local, un /etc/init.d/...script, un fichier de configuration Upstart et probablement aussi une configuration systemd.

sudo -u oli /full/path/to/application

Cette commande s'exécutera en tant qu'utilisateur root et se déroulera jusqu'à l'utilisateur sudo"oli". Modifiez évidemment l'utilisateur et la commande selon vos besoins.

Je dois ajouter qu'il y a au moins une douzaine de façons de faire exactement cela ... Mais d'après mon expérience, elles sont toutes en grande partie identiques. Voici un exemple parvenu en utilisant sa setuidstrophe:

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

setuid oli
respawn

exec /full/path/to/application
Oli
la source
Je suggère que l'exemple
waltinator
Je reçoissudo: unknown group: 1004
ThorSummoner
En outre, percez : Temps à la ligne de mise à jour au sujet arriviste.
muru
@muru je le ferai. Mais le groupe n'est pas requis. sudo utilisera le groupe par défaut de l'utilisateur spécifié .
Oli
Mieux vaut le modifier, alors. Cette commande est erronée depuis trois ans depuis que quelqu'un l'a améliorée ! : D
muru
1

Il semble que la première réponse ne fonctionne plus dans Ubuntu 14.10.

Voici comment je le fais là (mettez-le dans /etc/rc.local)

su <username> - -c "<command>"
vrodic
la source
Si vous avez besoin d'un shell de connexion, l'équivalent est sudo -i -u ....
muru