Eseguire un comando all'accesso dell'utente


23

Nel sistema desktop Linux, voglio eseguire un comando quando l'utente accede.

Dopo aver letto alcuni altri post, ho provato a inserire il comando ~/.bashrcma senza successo. Inoltre, il sistema utilizza un'interfaccia grafica per l'accesso dell'utente, quindi il comando non deve essere correlato all'avvio di una shell.

Ho anche provato ad aggiungere il comando a uno degli script contenuti /etc/profile.dsenza risultati.

c'è un altro modo per fare ciò? Qualche file che il sistema legge dopo il login?


Risposte:


21

Non è garantito che il display manager grafico legga i file di avvio classici. Ciò cambia tra le distribuzioni e tra i gestori display. Uno dei seguenti dovrebbe funzionare comunque.

  1. Utilizzare il metodo nativo dell'ambiente desktop per impostare le applicazioni di avvio. I dettagli dipenderanno dal DE che si sta utilizzando, ma è possibile creare uno script che esegue il comando e aggiungerlo all'elenco delle applicazioni di avvio. Ad esempio, sul mio sistema (Cinnamon), puoi farlo tramite "Impostazioni di sistema" => "Applicazioni di avvio".

  2. Usa ~/.xprofile, questo è fornito da almeno i gestori di login GDM, LDM, LightDM e LXDM.

  3. Se nessuna delle precedenti operazioni funziona, prova ad aggiungere il comando a ~/.profile: Questo è il file di inizializzazione principale per le shell di accesso e viene letto anche da alcune shell grafiche al momento dell'accesso.

  4. Come ha sottolineato @derobert nei commenti, puoi anche utilizzare gli standard desktop gratuiti :

    Le directory di avvio automatico sono $ XDG_CONFIG_DIRS / avvio automatico come definito in base alla sezione "Riferimenti a questa specifica" nella "Specifica della directory di base del desktop".

    Se lo stesso nome file si trova in più directory di avvio automatico, è necessario utilizzare solo il file nella directory più importante.

    Esempio: se $ XDG_CONFIG_HOME non è impostato, la directory di avvio automatico nella home directory dell'utente è ~ / .config / autostart /

    Esempio: se $ XDG_CONFIG_DIRS non è impostato, la directory di avvio automatico a livello di sistema è / etc / xdg / autostart /

    Esempio: se $ XDG_CONFIG_HOME e $ XDG_CONFIG_DIRS non sono impostati e i due file /etc/xdg/autostart/foo.desktop e ~ / .config / autostart / foo.desktop esistono solo il file ~ / .config / autostart / foo. il desktop verrà usato perché ~ / .config / autostart / è più importante di / etc / xdg / autostart /

Qui ~/.bashrcè completamente irrilevante, viene letto solo da shell interattive non di accesso, quindi viene ignorato su shell di accesso, grafico o meno.


5
Potrebbe voler menzionare ~/.config/autostarte /etc/xdg/autostart/quali sono le posizioni standard in base alle specifiche di avvio automatico delle applicazioni desktop . E anche /etc/X11/Xsession.de ~/.xsession.
derobert

6

Un'altra opzione è usare pam: questo ti darà un modo preciso per definire le azioni all'accesso.

Per un'azione generica puoi fare affidamento su pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). Tuttavia, se è necessario eseguire un'azione più specifica in modo sicuro, potrebbero esistere moduli pam più specializzati che si adatteranno meglio, come ad esempio pam_mount di uso comune (per montaggi all'accesso - http: //manpages.ubuntu. com / manpages / hardy / man8 / pam_mount.8.html ) o pam_echo (per messaggi arbitrari agli utenti - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html ).

In generale, pam è un sistema molto preciso per personalizzare gli accessi, quindi potresti voler esaminare un po 'di più, invece di fare affidamento su script potenzialmente non sicuri, come altri hanno suggerito.

Esempio

Dato un /etc/pam.d/system-auth abbastanza tipico possiamo usare pam_exec dopo il login in questo modo:

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

dove /usr/local/bin/my_progviene eseguito un programma arbitrario dopo un accesso utente riuscito.


2
Questa è una buona risposta, anche se dovresti includere un esempio della riga in cui aggiungere la pamconfigurazione poiché non banale.
Graeme

2

Secondo questo argomento: eseguire il comando automaticamente dopo il login?

Hai la soluzione del .bashrc(non quello che ti serve) e la soluzione delle applicazioni di avvio. Cito Daniel S .:

gnome-session-properties può essere utilizzato per configurare le applicazioni di avvio.

Inoltre, se si desidera eseguire un'applicazione all'avvio del sistema, è possibile aggiungere una regola come la seguente al proprio crontab (modificare crontab con crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.