Führen Sie bei der Benutzeranmeldung einen Befehl aus

23

In Linux-Desktopsystemen möchte ich einen Befehl ausführen, wenn sich der Benutzer anmeldet.

Nachdem ich einige andere Beiträge gelesen hatte, habe ich versucht, den Befehl einzufügen, ~/.bashrcaber erfolglos. Darüber hinaus verwendet das System eine grafische Oberfläche für die Benutzeranmeldung, sodass der Befehl nicht mit dem Start einer Shell verknüpft sein sollte.

Ich habe auch versucht, den Befehl an eines der in enthaltenen Skripte anzuhängen, /etc/profile.dohne Ergebnisse.

Gibt es eine andere Möglichkeit, dies zu tun? Gibt es eine Datei, die das System nach dem Login liest?

BowPark
quelle

Antworten:

21

Es kann nicht garantiert werden, dass der grafische Anzeigemanager die klassischen Startdateien liest. Dies ändert sich zwischen Verteilungen und zwischen Display-Managern. Eine der folgenden Möglichkeiten sollte jedoch funktionieren.

  1. Verwenden Sie die native Methode Ihrer Desktop-Umgebung, um Startanwendungen festzulegen. Die Details hängen von dem DE ab, das Sie verwenden. Sie können jedoch ein Skript erstellen, das Ihren Befehl ausführt, und es der Liste der Startanwendungen hinzufügen. Auf meinem System (Cinnamon) können Sie dies beispielsweise über "Systemeinstellungen" => "Startanwendungen" tun.

  2. Verwendung ~/.xprofile, dies wird von mindestens den GDM-, LDM-, LightDM- und LXDM-Anmeldemanagern bereitgestellt.

  3. Wenn keines der oben genannten Verfahren funktioniert, fügen Sie den Befehl hinzu zu ~/.profile: Dies ist die Hauptinitialisierungsdatei für Anmeldeshells und wird beim Anmelden auch von einigen grafischen Shells gelesen.

  4. Wie @derobert in den Kommentaren ausführte, können Sie auch die kostenlosen Desktop-Standards verwenden :

    Die Autostart-Verzeichnisse lauten $ XDG_CONFIG_DIRS / autostart, wie im Abschnitt "Referenzieren dieser Spezifikation" in der "Desktop-Basisverzeichnisspezifikation" definiert.

    Befindet sich derselbe Dateiname unter mehreren Autostart-Verzeichnissen, sollte nur die Datei unter dem wichtigsten Verzeichnis verwendet werden.

    Beispiel: Wenn $ XDG_CONFIG_HOME nicht festgelegt ist, lautet das Autostart-Verzeichnis im Ausgangsverzeichnis des Benutzers ~ / .config / autostart /

    Beispiel: Wenn $ XDG_CONFIG_DIRS nicht festgelegt ist, lautet das systemweite Autostart-Verzeichnis / etc / xdg / autostart /

    Beispiel: Wenn $ XDG_CONFIG_HOME und $ XDG_CONFIG_DIRS nicht festgelegt sind und die beiden Dateien /etc/xdg/autostart/foo.desktop und ~ / .config / autostart / foo.desktop vorhanden sind, ist nur die Datei ~ / .config / autostart / foo vorhanden. Desktop wird verwendet, da ~ / .config / autostart / wichtiger ist als / etc / xdg / autostart /

Das ~/.bashrcist hier völlig irrelevant, es wird nur von interaktiven Nicht-Login-Shells gelesen, wird also auf Login-Shells ignoriert, grafisch oder nicht.

terdon
quelle
5
Erwähnen möchten, ~/.config/autostartund /etc/xdg/autostart/welches sind die Standardspeicherorte gemäß der Desktop Application Autostart Specification . Und auch /etc/X11/Xsession.dund ~/.xsession.
Derobert
6

Eine weitere Option ist die Verwendung von pam. Auf diese Weise können Sie präzise Anmeldeaktionen definieren.

Für eine allgemeine Aktion können Sie sich auf pam_exec verlassen ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). Wenn Sie jedoch eine spezifischere Aktion auf sichere Weise ausführen müssen, gibt es möglicherweise speziellere Pam-Module, die besser passen, z. B. pam_mount (für Mounts bei Anmeldung - http: //manpages.ubuntu). com / manpages / hardy / man8 / pam_mount.8.html ) oder pam_echo (für beliebige Nachrichten an Benutzer - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html ).

Im Allgemeinen ist pam ein sehr übersichtliches System zum Anpassen von Anmeldungen. Sie sollten sich also ein bisschen mehr damit befassen, anstatt sich auf potenziell unsichere Skripte zu verlassen, wie andere vorgeschlagen hatten.

Beispiel

Bei einem ziemlich typischen /etc/pam.d/system-auth können wir pam_exec nach der Anmeldung folgendermaßen einsetzen:

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

Wo /usr/local/bin/my_progwird ein beliebiges Programm nach einer erfolgreichen Benutzeranmeldung ausgeführt.

oakad
quelle
2
Dies ist eine gute Antwort, obwohl Sie ein Beispiel für die Zeile einfügen sollten, in der Sie die pamKonfiguration hinzufügen würden, da dies nicht trivial ist.
Graeme
2

Zu diesem Thema: Befehl nach Anmeldung automatisch ausführen?

Sie haben die Lösung der .bashrc(nicht was Sie brauchen) und die Lösung der Startup-Anwendungen. Ich zitiere Daniel S .:

gnome-session-properties kann zum Konfigurieren von Startanwendungen verwendet werden.

Wenn eine Anwendung beim Systemstart ausgeführt werden soll, können Sie Ihrer Crontab eine Regel wie die folgende hinzufügen (Crontab bearbeiten mit crontab -e):

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