Nowe posty

Autor Wątek: xface nie obsługuje .bash_profile  (Przeczytany 6197 razy)

firestorm

  • Gość
xface nie obsługuje .bash_profile
« dnia: 2011-11-24, 13:17:01 »
Witam,

Mam Slackavare 12.3 a na nim Xface.
Niestety gdy jestem w trybie graficznym nie działają mi aliasy
z .bash_profile.
(które oczywiście funkcjonują w "gołym" środowisku testowym

Stworzyłem w swoim katalogu domowym
plik .Xdefaults ktory zawiera tylko jeden wpis:

xterm*loginShell: true


Niestety aliasy nie działają nadal.


Czy może mi ktoś coś podpowiedzieć?

chmooreck

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #1 dnia: 2011-11-24, 14:11:53 »
poczytaj o .bashrc

firestorm

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #2 dnia: 2011-11-24, 14:49:59 »
Dzięki za podpowiedź :) pomogło

Jednak ponieważ lubię wiedzieć więcej i gdybym kiedyś
musiał wymusić korzystanie  w X11 z .bash_profile
co jeszcze powinienem zrobić?

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
xface nie obsługuje .bash_profile
« Odpowiedź #3 dnia: 2011-11-24, 16:26:01 »
.bash_profile jest wykonywane w powłoce logowania (po wpisaniu nazwy użytkownika i hasła) -- np. przy logowaniu przez ssh, albo "/bin/bash --login".

.bashrc wykonywany jest w trybie interaktywnym, kiedy nie jest wymagana powłoka logowania (login:, password:), np "su" albo "bash".

Jeżeli uruchamiasz powłokę w trybie nieinteraktywnym (np "bash -c komenda") żaden skrypt nie jest wykonywany.


Jeżeli chcesz mieć wszędzie aliasy, uruchom ".bashrc" w ".bash_profile", natomiast wspólne ustawienia wrzuć do ".bashrc".

.bash_profile
    if [ -f ~/.bashrc ]; then
       source ~/.bashrc
    fi
Jeżeli chcesz zmienić parametry xterma, to może spróbuj je ustawić w ".Xresources" zamiast ".Xdefaults". Z tego co widzę, to próbowałeś ustawić mu login shell.

firestorm

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #4 dnia: 2011-11-24, 16:37:30 »
Dziękuje bardzo za wyczerpującą odpowiedź!

Skorzystam też z twoich podpowiedzi.

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #5 dnia: 2011-11-24, 22:55:23 »
To jeszcze zależy od menedżera logowania. Np. GDM z GNOME 2.x (GDM3 nie używałem) czytał plik ~/.profile, ale olewał ~/.bash_profile (co jest zresztą całkiem sensowne). No a jako że można się logować na różne sposoby, to w ~/.bash_profile w pewnym momencie musiałem wczytywać zarówno ~/.profile, jak i ~/.bashrc. Nie ma w tym nic złego, ale trochę to mało eleganckie.

Ostatnio przeglądałem skrypty z katalogu /etc/X11/Xsession.d/ i z ich analizy wynika, że takie ogólne rzeczy (jak aliasy czy jakieś zmienne środowiskowe) można sobie wpisać do pliku ~/.xsessionrc. Ale z drugiej strony przy logowaniu przez /sbin/getty, ten plik nie zostanie odczytany. I tak źle i tak niedobrze.

Nawiasem mówiąc, jeżeli kiedykolwiek istniała merytoryczna różnica pomiędzy ~/.Xresources a ~/.Xdefaults, to zaginęła ona w mroku dziejów. Ja polecam utworzyć jeden a z drugiego zrobić dowiązanie symboliczne do pierwszego.

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
xface nie obsługuje .bash_profile
« Odpowiedź #6 dnia: 2011-11-25, 10:53:12 »
Cytat: Minio
Ostatnio przeglądałem skrypty z katalogu /etc/X11/Xsession.d/ i z ich analizy wynika, że takie ogólne rzeczy (jak aliasy czy jakieś zmienne środowiskowe) można sobie wpisać do pliku ~/.xsessionrc. Ale z drugiej strony przy logowaniu przez /sbin/getty, ten plik nie zostanie odczytany.
Właśnie dlatego można, ale nie powinno się tego robić. Ten plik nie jest do tego przeznaczony. Pytanie, po co kombinować, skoro można trzymać się standardów. Odpowiednie ustawienia w odpowiednim miejscu i nie ma takich problemów.

Czasami zastanawia mnie dlaczego wielu ludzi stara się zmieniać ustawienia powłoki w ustawieniach X, mimo, że X uruchamia się w powłoce, a nie odwrotnie.

Cytat: Minio
Nawiasem mówiąc, jeżeli kiedykolwiek istniała merytoryczna różnica pomiędzy ~/.Xresources a ~/.Xdefaults, to zaginęła ona w mroku dziejów. Ja polecam utworzyć jeden a z drugiego zrobić dowiązanie symboliczne do pierwszego.
Różnica jest zasadnicza -- "~/.Xdefaults" jest przestarzałe i od dobrych paru lat praktycznie nieużywane.

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #7 dnia: 2011-11-25, 13:06:41 »
Cytat: vanhelzing
Czasami zastanawia mnie dlaczego wielu ludzi stara się zmieniać ustawienia powłoki w ustawieniach X, mimo, że X uruchamia się w powłoce, a nie odwrotnie.
Jeżeli logujesz się przez /sbin/getty i potem uruchamiasz startx, to tak -- X uruchamia się w powłoce.
Jeżeli korzystasz z graficznego menedżera logowania, to X uruchamia się na uprawnieniach roota. Potem menedżer logowania na uprawnieniach użytkownika uruchamia dla niego środowisko graficzne. Powłoka uruchamiana jest dopiero przez użytkownika w środowisku X -- czyli jest właśnie odwrotnie.

Dodatkowo ta powłoka nie jest powłoką logowania, więc plik ~/.bash_profile (czy analogiczny) nie zostanie nigdy wczytany.

Istnieje wiele sytuacji, w których jakieś ustawienia mają być obecne już przy uruchomionym X. Choćby dopisanie do zmiennej $PATH katalogu ~/bin/, aby programy stamtąd można było uruchamiać z programu do uruchamiania poleceń (jak krunner czy gmrun) bez konieczności podawania pełnej ścieżki.

Niektóre menedżery logowania (np. KDM) są na tyle miłe, że wczytują zawartość pliku powłoki logowania przy logowaniu użytkownika. Inne (np. GDM z GNOME 2.x) tego nie robią.

Jasne -- można wszystkie zmienne, aliasy czy funkcje wpisać do pliku ~/.bashrc (lub analogicznego) i przy każdym uruchomieniu powłoki nadpisywać je tymi samymi wartościami. Przy zasobach, którymi dysponują dzisiejsze komputery, nie będzie to miało praktycznie żadnego znaczenia. Natomiast nie uważam, żeby było to rozwiązanie eleganckie. Znacznie lepiej zdać sobie sprawę, że programy potomne dziedziczą ustawienia środowiska po swoich rodzicach, i najważniejsze ustawienia środowiska wystarczy zmienić tylko w jednym miejscu.

Jednak ja do tej pory nie znalazłem takiego jednego miejsca, z którego korzystałyby wszystkie programy logujące. Wszystko wskazuje na to, że trzeba sobie taki plik samemu stworzyć, i wczytywać go w skryptach uruchamianych przez różne programy przy logowaniu. Alternatywą jest odmienne środowisko w zależności od sposobu logowania (co zresztą w pewnych sytuacjach można wykorzystać na swoją korzyść).

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
xface nie obsługuje .bash_profile
« Odpowiedź #8 dnia: 2011-11-25, 14:45:14 »
Cytat: Minio
Potem menedżer logowania na uprawnieniach użytkownika uruchamia dla niego środowisko graficzne.
Skoro lubisz grzebać w plikach konfiguracyjnych, wejdź do jakiegokolwiek skryptu uruchomieniowego dla sesji X, np w "/etc/X11". W pierwszej lini znajdziesz

#!/bin/sh
Hmmm... ciekawe co to oznacza? Sesja uruchamiana jest w powłoce, podobnie jak serwer X. Kropka.

Cytat: Minio
Dodatkowo ta powłoka nie jest powłoką logowania, więc plik ~/.bash_profile (czy analogiczny) nie zostanie nigdy wczytany.
Podaj mi jeden powód, dla którego powinna być.

Cytat: Minio
Niektóre menedżery logowania (np. KDM) są na tyle miłe, że wczytują zawartość pliku powłoki logowania przy logowaniu użytkownika. Inne (np. GDM z GNOME 2.x) tego nie robią.
Nie są miłe, tylko głupie. Od ustawień jest plik ".bashrc", ".bash_profile" pełni zupełnie inną funkcję, a dołączają go tylko i wyłącznie po to, żeby nie mieć problemów. Nie za bardzo wiem po co xDM miałby go wczytywać.

Cytat: Minio
Jednak ja do tej pory nie znalazłem takiego jednego miejsca, z którego korzystałyby wszystkie programy logujące.
/etc/profile

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #9 dnia: 2011-11-25, 22:33:09 »
Cytat: vanhelzing
Hmmm... ciekawe co to oznacza? Sesja uruchamiana jest w powłoce, podobnie jak serwer X. Kropka.
Przy czym:
a) nie jest to powłoka logowania, więc skrypty ~/.*_profile nie zostaną wczytane.
b) nie jest to powłoka interaktywna a większość dystrybucji domyślnie na początku ~/.bashrc zawiera coś pokroju:
[ -z "$PS1" ] && return
Co nie jest takim głupim pomysłem, bo w przeciwnym wypadku programy nie znoszące danych na wejściu się burzą.

Więc nagle się okazuje, że co prawda jest uruchamiany w powłoce, natomiast abstrahuje od większości ustawień tej powłoki.

Cytat: vanhelzing
Podaj mi jeden powód, dla którego powinna być.
Moja teza nie brzmi, że powinien być wczytywany, a ja nie czuję obowiązku podawania argumentów na rzecz tezy, której nigdy nie wysuwałem.

Cytat: vanhelzing
Nie są miłe, tylko głupie. Od ustawień jest plik ".bashrc", ".bash_profile" pełni zupełnie inną funkcję, a dołączają go tylko i wyłącznie po to, żeby nie mieć problemów.
Czyli wg Ciebie plik ~/.bash_profile nie jest od ustawień?
Wg mnie jest. Jest od tych z nich, które mają być ustawione raz i tylko raz. Takie jak LC_*, LANG, SHELL, pewnie aliasy, przynajmniej część funkcji. Po co wczytywać to wszystko za każdym razem, kiedy tylko uruchomiona jest powłoka?

Cytat: vanhelzing
Nie za bardzo wiem po co xDM miałby go wczytywać.
Np. dlatego, że XDM jest menedżerem logowania, a pliki ~/.*_profile zawierają te komendy, które mają być uruchomione przy zalogowaniu użytkownika?

Cytat: vanhelzing
/etc/profile
No dobrze. A dla użytkownika będzie ~/.profile. Chyba że akurat użytkownik ma zarówno plik ~/.profile jak i ~/.bash_profile (z dowolnego powodu), kiedy to bash radośnie oleje ten pierwszy. Wtedy okaże się, że ~/.profile jednak nie jest wczytywany za każdym razem.

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
xface nie obsługuje .bash_profile
« Odpowiedź #10 dnia: 2011-11-26, 01:19:11 »
Czyli ogólnie przyznajesz mi rację, ale się ze mną nie zgadzasz? Prawdę mówiąc, to już zupełnie przestałem Ciebie rozumieć, i pozwolisz, że nie ustosunkuję się do większości Twoich filozoficznych wywodów, tym bardziej, że można w trzech linijkach, zmienić konfigurację w taki sposób, żeby działało to dokładnie tak, jak chcesz, bez wnikania w to, czy to słuszne czy nie.


1) Powłoka uruchomiona w jakimkolwiek trybie, nawet, jeżeli "abstrahuje od większości ustawień", nadal jest powłoką.

2) ".bash_profile" zawiera konfigurację powłoki logowania, a nie to, co fachowo nazwałeś "tym co uruchamia się po zalogowaniu". Powłoka logowania nie jest powłoką nadrzędną w stosunku do innych, tak jak sugerujesz, jest to szczególny typ powłoki interaktywnej, w której użytkownik się zalogował, lub została wymuszona przez podanie odpowiednich parametrów.

3) ".bash_profile" z założenia wykonywany jest, jeżeli logujesz się z konsoli tekstowej do systemu, albo przez ssh.

4) xDM uruchamia powłokę w trybie nieinteraktywnym, czyli powłokę, która z definicji nie może być powłoką logowania. A skoro taką nie jest, to plik ".bash_profile" nie powinien być wczytany. Od ustawień sesji X są pliki .xsessionrc, .xinitrc i .xsession.

5) Faktem jest, że jeżeli ktoś pracuje wyłącznie w sesji X i nie loguje się przez ssh, to plik ".bash_profile" jest dla niego praktycznie zbędny, co nie znaczy, że jest bezużyteczny.

6) O to co się uruchamia, albo nie uruchamia podczas odpalania Twojego systemu, powinieneś mieć pretensję do twórców swojej dystrybucji, albo administratora Twojego komputera, a nie do standardów.

7) Więcej czytaj, mniej filozofuj.

--- Dodane:
Myślę, że na tym zakończę, bo temat wyczerpałem do końca, chyba, że masz jakiś konkretny problem. Naprawdę trudno mi dyskutuje się z humanistami.

  • Gość
xface nie obsługuje .bash_profile
« Odpowiedź #11 dnia: 2011-11-26, 21:26:31 »
Cytat: vanhelzing
tym bardziej, że można w trzech linijkach, zmienić konfigurację w taki sposób, żeby działało to dokładnie tak, jak chcesz, bez wnikania w to, czy to słuszne czy nie.
Tylko widzisz, dla mnie istotne jest to, żeby problemy były rozwiązane poprawnie, a nie byle jak. Nie wystarczy mi żeby cel został osiągnięty, wybrany środek również powinien być adekwatny.

Cytat: vanhelzing
2) ".bash_profile" zawiera konfigurację powłoki logowania, a nie to, co fachowo nazwałeś "tym co uruchamia się po zalogowaniu". Powłoka logowania nie jest powłoką nadrzędną w stosunku do innych, tak jak sugerujesz, jest to szczególny typ powłoki interaktywnej, w której użytkownik się zalogował, lub została wymuszona przez podanie odpowiednich parametrów.
O, i to jest bardzo istotne rozróżnienie. Widać po tylu latach używania Linuksa nadal mam pewne braki w podstawach.

Natomiast odnosząc się do:
Cytat: vanhelzing
7) Więcej czytaj, mniej filozofuj.
Podaj mi proszę, gdzie konkretnie mogę sobie poczytać o powłoce logowania i tym, co czyni ją odmienną od innych powłok. Do man bash nie ma co zaglądać, tam tylko piszą że "powłoka logowania to powłoka uruchomiona z odpowiednim parametrem". Natomiast nie piszą istotnej rzeczy -- dlaczego w ogóle takie rozróżnienie na powłokę logowania i inne powłoki zostało wprowadzone. Bo skoro -- jak mnie uświadomiłeś -- nie chodzi o to, że po powłoce logowania dziedziczą wszystkie uruchamiane programy, to musi chodzić o coś innego.

Cytat: vanhelzing
chyba, że masz jakiś konkretny problem
Forum, jak sama nazwa wskazuje, służy również do dyskutowania, a nie tylko rozwiązywania problemów.