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