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

23

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

Après avoir lu quelques autres articles, j'ai essayé d'insérer la commande ~/.bashrcmais sans succès. De plus, le système utilise une interface graphique pour la connexion de l'utilisateur, donc 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.dsans résultat.

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

BowPark
la source
askubuntu.com/questions/48321/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

21

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. Utilisez ~/.xprofile, cela provient au moins des gestionnaires de connexion GDM, LDM, LightDM et LXDM.

  3. Si aucun des éléments ci-dessus ne fonctionne, essayez d'ajouter la commande à ~/.profile: Il s'agit du 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 normes de bureau gratuites :

    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 ~/.bashrcest totalement hors de propos ici, il n'est lu que par des shells interactifs sans connexion, il est donc ignoré sur les shells de connexion, graphiques ou non.

terdon
la source
5
Pourrait mentionner ~/.config/autostartet /etc/xdg/autostart/quels sont les emplacements standard selon la spécification de démarrage automatique de l'application de bureau . Et aussi /etc/X11/Xsession.det ~/.xsession.
derobert
6

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_progest le programme arbitraire exécuté après une connexion utilisateur réussie.

Oakad
la source
2
C'est une bonne réponse, mais vous devez inclure un exemple de la ligne à laquelle vous ajouteriez la pamconfiguration, car cela n'est pas trivial.
Graeme du
2

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
Laurent C.
la source