web-dev-qa-db-fra.com

Exécuter une commande lors de la connexion de l'utilisateur

Dans le système de bureau Linux, je veux exécuter une commande lorsque l'utilisateur se connecte.

Après avoir lu d'autres articles, j'ai essayé d'insérer la commande dans ~/.bashrc mais sans succès. De plus, le système utilise une interface graphique pour la connexion de l'utilisateur, de sorte que la commande ne doit pas être liée au démarrage d'un shell.

J'ai également essayé d'ajouter la commande à l'un des scripts contenus dans /etc/profile.d sans résultat.

Y a-t-il une autre façon de procéder? Tout fichier que le système lit après la connexion?

23
BowPark

Il n'y a aucune garantie que le gestionnaire d'affichage graphique lira les fichiers de démarrage classiques. Cela change entre les distributions et entre les gestionnaires d'affichage. Cependant, l'un des éléments suivants devrait fonctionner.

  1. Utilisez la méthode native de votre environnement de bureau pour définir les applications de démarrage. Les détails dépendent du DE que vous utilisez, mais vous pouvez créer un script qui exécute votre commande et l'ajouter à la liste des applications de démarrage. Par exemple, sur mon système (Cinnamon), vous pouvez le faire via "Paramètres système" => "Applications de démarrage".

  2. Utilisation ~/.xprofile, cela provient par au moins les gestionnaires de connexion GDM, LDM, LightDM et LXDM.

  3. Si aucun des éléments ci-dessus ne fonctionne, essayez d'ajouter la commande à ~/.profile: C'est le fichier d'initialisation principal pour les shells de connexion et est également lu par certains shells graphiques lors de la connexion.

  4. Comme @derobert l'a souligné dans les commentaires, vous pouvez également utiliser les standards de bureau gratuits :

    Les répertoires de démarrage automatique sont $ XDG_CONFIG_DIRS/autostart tels que définis conformément à la section "Référencement de cette spécification" dans la "spécification du répertoire de base du bureau".

    Si le même nom de fichier se trouve sous plusieurs répertoires de démarrage automatique, seul le fichier sous le répertoire le plus important doit être utilisé.

    Exemple: si $ XDG_CONFIG_HOME n'est pas défini, le répertoire de démarrage automatique dans le répertoire de base de l'utilisateur est ~/.config/autostart /

    Exemple: si $ XDG_CONFIG_DIRS n'est pas défini, le répertoire de démarrage automatique à l'échelle du système est/etc/xdg/autostart /

    Exemple: Si $ XDG_CONFIG_HOME et $ XDG_CONFIG_DIRS ne sont pas définis et que les deux fichiers /etc/xdg/autostart/foo.desktop et ~/.config/autostart/foo.desktop existent, alors seul le fichier ~/.config/autostart/foo. le bureau sera utilisé car ~/.config/autostart/est plus important que/etc/xdg/autostart /

Le ~/.bashrc est complètement hors de propos ici, il n'est lu que par des shells interactifs sans connexion, donc est ignoré sur les shells de connexion, graphiques ou non.

21
terdon

Une autre option consiste à utiliser pam - cela vous donnera un moyen précis de définir des actions à la connexion.

Pour une action générique, vous pouvez compter sur pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). Cependant, si vous devez effectuer une action plus spécifique de manière sûre, il peut exister des modules pam plus spécialisés qui conviendront mieux, tels que pam_mount couramment utilisé (pour les montages à la connexion - http: // manpages.ubuntu.com/manpages/hardy/man8/pam_mount.8.html ) ou pam_echo (pour les messages arbitraires aux utilisateurs - http://manpages.ubuntu.com/manpages/hardy/man8/ pam_echo.8.html ).

En général, pam est un système très soigné pour personnaliser les connexions, donc vous voudrez peut-être y réfléchir un peu plus, au lieu de vous fier à des scripts potentiellement dangereux, comme d'autres l'avaient suggéré.

Exemple

Étant donné un /etc/pam.d/system-auth assez typique, nous pouvons utiliser pam_exec après la connexion comme ceci:

session         optional        pam_ssh.so
session         required        pam_limits.so
session         required        pam_env.so
session         optional        pam_mktemp.so
session         required        pam_unix.so
session         optional        pam_exec.so /usr/local/bin/my_prog
session         optional        pam_permit.so

/usr/local/bin/my_prog est un programme arbitraire exécuté après une connexion utilisateur réussie.

6
oakad

Selon ce sujet: Exécuter la commande automatiquement après la connexion?

Vous avez la solution du .bashrc (pas ce dont vous avez besoin) et la solution des applications de démarrage. Je cite Daniel S .:

gnome-session-properties peut être utilisé pour configurer les applications de démarrage.

De plus, si vous voulez qu'une application s'exécute au démarrage du système, vous pouvez ajouter une règle comme la suivante à votre crontab (éditez crontab avec crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
2
Laurent C.