Wykonaj polecenie przy logowaniu użytkownika

23

W systemie Linux na pulpicie chcę wykonać polecenie, gdy użytkownik się zaloguje.

Po przeczytaniu kilku innych postów próbowałem wstawić polecenie ~/.bashrc ale bezskutecznie. Co więcej, system używa interfejsu graficznego do logowania użytkownika, więc polecenie nie powinno być powiązane z początkiem powłoki.

Próbowałem również dołączyć polecenie do jednego ze skryptów zawartych w /etc/profile.d bez rezultatów.

Czy jest na to inny sposób? Jakiś plik, który system czyta po zalogowaniu?

BowPark
źródło
askubuntu.com/questions/48321/...
Ciro Santilli 23 改造 中心 法轮功 六四 事件

Odpowiedzi:

21

Nie ma gwarancji, że graficzny menedżer wyświetlania odczyta klasyczne pliki startowe. To zmienia się między dystrybucjami i między menedżerami wyświetlania. Powinno jednak działać jedno z poniższych.

  1. Użyj natywnej metody środowiska pulpitu, aby ustawić aplikacje startowe. Szczegóły będą zależeć od używanego DE, ale możesz utworzyć skrypt, który uruchamia twoje polecenie i dodać go do listy aplikacji startowych. Na przykład w moim systemie (Cinnamon) możesz to zrobić poprzez „Ustawienia systemu” => „Aplikacje startowe”.

  2. Użyj ~/.xprofile, to jest pozyskiwane przynajmniej przez menedżerów logowania GDM, LDM, LightDM i LXDM.

  3. Jeśli żadne z powyższych nie działa, spróbuj dodać polecenie do ~/.profile : Jest to główny plik inicjujący powłoki logowania, a także odczytywany przez niektóre powłoki graficzne podczas logowania.

  4. Jak zauważył @derobert w komentarzach, możesz także użyć darmowych standardów pulpitu :

    Katalogami autostartu są $ XDG_CONFIG_DIRS / autostart zdefiniowane zgodnie z sekcją „Odwołanie do tej specyfikacji” w „specyfikacji katalogu podstawowego pulpitu”.

    Jeśli ta sama nazwa pliku znajduje się w wielu katalogach Autostart, należy użyć tylko pliku z najważniejszego katalogu.

    Przykład: Jeśli $ XDG_CONFIG_HOME nie jest ustawiony, katalog Autostart w katalogu osobistym użytkownika to ~ / .config / autostart /

    Przykład: Jeśli $ XDG_CONFIG_DIRS nie jest ustawiony, katalog Autostart dla całego systemu to / etc / xdg / autostart /

    Przykład: Jeśli $ XDG_CONFIG_HOME i $ XDG_CONFIG_DIRS nie są ustawione, a dwa pliki /etc/xdg/autostart/foo.desktop i ~ / .config / autostart / foo.desktop istnieją tylko plik ~ / .config / autostart / foo. zostanie użyty pulpit, ponieważ ~ / .config / autostart / jest ważniejszy niż / etc / xdg / autostart /

Jest ~/.bashrcto tutaj całkowicie nieistotne, jest odczytywane tylko przez interaktywne powłoki niezalogowane, więc jest ignorowane w powłokach logowania, graficznie lub nie.

terdon
źródło
5
Może warto wspomnieć ~/.config/autostarti /etc/xdg/autostart/jakie są standardowe lokalizacje zgodnie ze specyfikacją autostartu aplikacji komputerowej . A także /etc/X11/Xsession.di ~/.xsession.
derobert
6

Inną opcją jest użycie pam - da ci to precyzyjny sposób definiowania akcji podczas logowania.

W przypadku akcji ogólnej możesz polegać na pam_exec ( http://manpages.ubuntu.com/manpages/hardy/man8/pam_exec.8.html ). Jeśli jednak musisz wykonać bardziej konkretną akcję w bezpieczny sposób, mogą istnieć bardziej wyspecjalizowane moduły pam, które będą lepiej pasować, takie jak powszechnie używany pam_mount (dla montowań podczas logowania - http: //manpages.ubuntu). com / manpages / hardy / man8 / pam_mount.8.html ) lub pam_echo (dla dowolnych wiadomości dla użytkowników - http://manpages.ubuntu.com/manpages/hardy/man8/pam_echo.8.html ).

Ogólnie pam jest bardzo fajnym systemem do dostosowywania loginów, więc możesz chcieć przyjrzeć się temu bardziej, zamiast polegać na potencjalnie niebezpiecznych skryptach, jak sugerowali inni.

Przykład

Biorąc pod uwagę dość typowy /etc/pam.d/system-auth możemy zastosować pam_exec po zalogowaniu w następujący sposób:

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

gdzie /usr/local/bin/my_progjest uruchamiany dowolny program po pomyślnym zalogowaniu użytkownika.

dąb
źródło
2
To dobra odpowiedź, chociaż należy dołączyć przykład linii, do której należy dodać pamkonfigurację, ponieważ nie jest to trywialne.
Graeme
2

Zgodnie z tym tematem: Uruchomić polecenie automatycznie po zalogowaniu?

Masz rozwiązanie .bashrc(nie to, czego potrzebujesz) i rozwiązanie aplikacji startowych. Cytuję Daniela S .:

gnome-session-properties może służyć do konfigurowania aplikacji startowych.

Ponadto, jeśli chcesz, aby aplikacja działała podczas rozruchu systemu, możesz dodać do tabeli crontab następującą regułę (edytuj plik crontab za pomocą crontab -e):

@reboot /run/this/program/at/boot >/dev/null 2>&1
Laurent C.
źródło