[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: benutzte Shells und shell-Einstellungen unter X11R6



Thorsten Haude schrieb am Friday, 09. February 2007 um 17:30:51 +0100:
|* Michelle Konzack wrote (2007-02-09 16:20):
|>Am 2007-02-04 01:45:26, schrieb Thorsten Haude:
|>> yooden@eumel % head -1 ~/.xsession
|>> #!  /bin/sh
|>> 
|>> Allerdings habe ich das noch nicht wirklich getestet.
|>
|>Das ist nutzlos, denn die xsession wird gesourced.
|
|Aha, gut. Von wem?

/usr/bin/X11/xdm startet auf mir noch unbekannte Weise /etc/X11/xdm/Xsession

/etc/X11/xdm/Xsession sourced /etc/X11/Xsession

/etc/X11/Xsession definiert die 2 Variablen:
USERXSESSION=$HOME/.xsession
ALTUSERXSESSION=$HOME/.Xsession

diese werden in /etc/X11/Xsession aber nicht
verwendet und in /etc/X11/xdm/Xsession auch nicht.

/etc/X11/Xsession sourced /etc/X11/Xsession.d/50xfree86-common_determine-startup

In
/etc/X11/Xsession.d/50xfree86-common_determine-startup
wird
STARTUP=$HOME/.xsession
oder
STARTUP="sh $HOME/.xsession"
eingestellt, falls das executable Flag bei
$HOME/.xsession gesetzt, bzw. gelöscht ist und
falls $HOME/.xsession existiert.  Wenn die Datei
nicht existiert, aber dafür $HOME/.Xsession, wird
STARTUP mit diesem Dateinamen genauso eingestellt,
wie sonst mit $HOME/.xsession.

/etc/X11/Xsession sourced danach /etc/X11/Xsession.d/99xfree86-common_start

/etc/X11/Xsession.d/99xfree86-common_start exec(ed) $STARTUP

Also:

$HOME/.xsession wird nicht gesourced, sondern
exec(uted) von derjenigen Shell, die
/etc/X11/xdm/Xsession ausführt, falls die Datei
als executable eingestellt ist und von sh, die
irgendwo im PATH steht, falls das Flag x der Datei
nicht gesetzt ist.

Also die Shell, die /etc/X11/xdm/Xsession
ausgeführt hat, verschwindet aus der Prozessliste
und wird ersetzt durch das, was in $HOME/.xsession
im Pseudokommentar angegeben ist, oder durch sh,
das in
/etc/X11/Xsession.d/50xfree86-common_determine-startup
eingestellt wird.

Scheinbar wird bei diesem exec die Umgebung der
aufrufenden Shell teilweise, z. B. PATH,
übernommen.  Ihre Hash-Tabelle wird jedoch
z. B. nicht übernommen.


Auf Userebene sollte es damit möglich sein, durch
den Pseudokommentar in $HOME/.xsession die zu
verwendende Shell mit Optionen festzulegen, wie
z. B.

#!/bin/bash -l
oder
#!/bin/zsh
oder
/bin/sh -l
oder ...

Sinnvoller fände ich, wenn xdm die Shell aus
/etc/passwd oder der jeweils benutzten
Authentifizierungsschnittstelle verwendete, die
der Benutzer dort für sich persönlich als Login -
Shell eingestellt hat und diese als Login-Shell
startete.


Einen Teilerfolg habe ich erzielt mit Änderung der
ersten Zeile der Datei
/etc/X11/xdm/Xsession
von
#!/bin/sh
auf
#!/bin/sh -l
.


Das könnte aber schief gehen, je nachdem, was ein
User bei sich für eine Login-Shell eingestellt
hat, denn ich kenne nicht alle Shells gut genug.
An dieser Stelle sollte IMHO /bin/bash oder
/bin/zsh oder /bin/pdksh oder /bin/csh
usw. aufgerufen werden, je nach dem Eintrag des
Benutzers, der sich da neu einloggt, welches
Programm derjenige als Login-Shell verwenden will.

Bei einem Standard Debian System wird also die
bash in der abgespeckten Version als Bourne Shell
mit dem Namen sh verwendet, non-login und
non-interactive.

Es geht bei der ganzen Sache darum, dass alle
Programme, die von einem beliebigen User in
~/.xsession gestartet werden, beim Start eine
bestimmte definierte Umgebung erhalten, die
Systemweit festgelegt und normalerwese von der
login-shell eingestellt wird, ohne dass jeder
einzelne Nutzer diese Umgebung selbst für sich
nochmal neu einstellen und erzeugen muß.  Im Falle
der bash fehlt, z.B. die Variable BASH_ENV, die
normalerweise im Laufe der Initialisierung der
login-shell eingestellt wird, mit allen -
negativen - Folgen für alle mit dieser -
fehlerhaften oder ungenügenden - Umgebung
aufgerufenen Scripte und Programme.  Das alles ist
letztlich eine Folge davon, dass die shell, die
beim login aufgerufen wird, nicht als login-shell
aufgerufen wird, sondern als non-login und
non-interactive.

Die ganze Problematik kommt vermutlich - wie ich
es zur Zeit vermute - daher, dass die shell (sh),
die xdm aufruft, non-interactive sein muß und
scheinbar daher auch als non-login-shell
aufgerufen wird zum Einen und zum Anderen daher,
dass man für diese shell eine genau definierte
shell mit definiertem Befehlssatz braucht für die
Ausfürung aller Scripte, die zum X-System gehören.


Alles Gute
Helmut H. Franke

-- 
http://www.worte-des-lebens.net/Vaterworte/vaterworte.html
http://www.lorber-verlag.de/  http://firethegrid.org/
http://www.anastasia-de.com/Megre_Buecher/Megre_Buecher.htm
http://itc.napier.ac.uk/e-Petition/bundestag/
Avatar Chat Systeme:  http://www.amiculi.net  http://pgm.amoris.org
Servamus vitam terramque istam, quas amans pater noster ipse dedit nobis!

Attachment: pgpWSplPVva4X.pgp
Description: PGP signature


Reply to: