Odpowiedzi:
Jeśli jesteś zwykłym użytkownikiem Ubuntu Desktop, jedyną powłoką logowania jest ... Twój pulpit (wpisujesz hasło, prawda;)? Cóż, technicznie rzecz biorąc, jest to powłoka logowania, która uruchamia GUI, ale wchodzi w żargon. I tak, wczyta ustawienia.profile
Jedyny raz, kiedy Ty (normalny użytkownik) prawdopodobnie zobaczysz powłokę logowania, która wygląda jak powłoka logowania, masz problem z pulpitem i przełączasz się na terminal wirtualny za pomocą skrótu Ctrl+ Alt+ F1.
ssh
(lub połączenie lokalne ssh localhost
)bash -l
(lub sh -l
)root
powłoki logowania za pomocąsudo -i
sudo -u username -i
root
root
użytkownik niebędący użytkownikiem za pomocą (i ich hasła)su - username
sudo login
polecenia, aby przełączyć użytkownika~/.pam_environment
(tylko zmienne, nie ma tam poleceń bash!), Wyloguj się, zaloguj i obserwuj wszystko magicznie pojawiające się na pulpicie, a także w terminalu gnome!
/etc/profile
, /etc/profile.d
lub ~/.profile
.
Nie sądzę, że poprawnej odpowiedzi można udzielić bez „technicznego żargonu”. Ponieważ to pytanie pojawia się jako pierwsze w Google w odpowiedzi na zapytanie „co to jest powłoka logowania”, poniżej podaję bardziej poprawną odpowiedź:
Powłoka logowania to po prostu powłoka, o której mówiono, że jest powłoką logowania. To nie nie znaczy powłoki, które pojawia się po zalogowaniu, choć zwykle aplikacja, która loguje się mówi skorupę uruchamia się powłoki logowania. Istnieją następujące sposoby, aby powiedzieć powłoce, że powinna to być nazwa logowania:
-l
lub --login
przy założeniu, że go zna (nie znam żadnych powłok, które nie wiedzą -l
, ale --login
są obsługiwane tylko przez kilka powłok).argv[0]
ustawionym na -{some_string}
(tj. Z HYPHEN-MINUS dodanym do zwykłego argv[0]
lub do innego łańcucha). Oto, co robią ssh i su: su po prostu uruchamia plik wykonywalny -su
jako argv[0]
(cześć wszystkim, którzy myślą, że argv[0]
ma to coś wspólnego z aktualnie uruchomioną nazwą pliku wykonywalnego), ssh uruchamia zsh, -zsh
gdy użytkownik ustawił /bin/zsh
swoją powłokę.Logiczność powłoki nie ma absolutnie nic wspólnego z tym, że ktoś prosi cię o hasło lub wykonuje inną procedurę uwierzytelniania. Niektóre programy, takie jak ssh lub login (lub niektóre emulatory terminali, takie jak urxvt) uruchamiają powłoki jako te, argv[0]
które używają logowania, zaczynając od HYPHEN-MINUS. Niektóre takie jak su lub sudo (lub zsh: patrz -
modyfikator polecenia wstępnego opisany w rozdziale PRECOMMAND MODIFERY w man zshmisc
) nie robią tego domyślnie, ale można to powiedzieć. Niektóre mają jedyną opcję, aby powiedzieć shellowi, aby był loginem, używając swojego argumentu (tj. bash -l
): Ssh z argumentem polecenia (który wyraźnie mówi ssh, co uruchomić na zdalnym końcu).
Zasadniczo lepiej najpierw zapoznać się z dokumentacją programu używanego do wywoływania powłoki, aby ustalić, czy powłoka będzie loginem, a następnie wykonać kilka testów w celu ustalenia, czy aplikacja uruchomi powłokę logowania (np. Poprzez dodanie echo
do .profile
).
argv[0]
do jednej z exec*
funkcji, naturalne i nieuchronne: ty zawsze dostarczać zarówno argv[0]
i ścieżkę do polecenia faktycznie uruchomić przy użyciu exec*
funkcji, nawet jeśli nie zawsze chcą argv[0]
być różny od biegu poleceń. Inne języki zapewniają własne sposoby. W szczególności bash pozwala na użycie exec -a new_argv0 bash
, ale to oczywiście zastąpi aktualnie działającą powłokę tym, co exec
(exec -a -zsh zsh)
$0
, a być może ustawiono także coś innego (zmienną, ustawienie itp.), aby logiczność powłoki mogła zostać wykryta w pliku konfiguracyjnym, ale kto tak naprawdę to wykrywa, aby to miało znaczenie? To wszystko co wiem.