Andreas Pakulat <[EMAIL PROTECTED]> writes:

>On 30.Oct 2004 - 22:44:23, Helmut Waitzmann wrote:
>> Andreas Pakulat <[EMAIL PROTECTED]> writes:
>> 
>> >On 26.Oct 2004 - 02:06:34, Helmut Waitzmann wrote:
>> >> Andreas Pakulat <[EMAIL PROTECTED]> writes:

>> Die Auswahl "KDE" im Sessions-Menà des GDM, "/etc/gdm/Sessions/KDE",
>> macht es richtig:  Das shell script beginnt mit folgender Zeile:
>> 
>>    #!/bin/bash -login
>> 
>> Das ist ein (nicht-interaktives) Login-bash-Skript, das beim Start
>> zunÃchst /etc/profile und danach "$HOME/.bash_profile" oder
>> "$HOME/.profile" liest.

>
>Also /etc/kde3/kdm/Xsession sourced /etc/X11/Xsession und hat
>#! /bin/sh
>
>Also in unstables gdm gibts keine KDE Session und da die eine bash
>benutzt wuerde ich ja mal behaupten wollen, die hast du selbst
>geschrieben oder?

Bei mir war es in der Debian-Woody-Distribution so drin.  Ich habe daran
nichts verÃndert.

>> >Beim Login mittels eines Display-Managers haengt der X11-Server am
>> >Displaymanager:
>> >
>> >init
>> > ââkdmâââXFree86
>> > â     ââkdmâââx-session-managâââgnome-settings-
>> > â                             ââkwrapper
>> > â                             ââssh-agent
>> >                
>> >kdm, wiederum wird von init ausgefuehrt, als letztes der Init-Skripte
>> >und benutzt wiederum soweit ich das sehe eine nicht-interaktive
>> >nicht-login-shell.
>> 
>> Wenn da also kdm oder x-session-manag (ksmserver?) keine "$HOME/.profile"
>> entsprechende KonfigurationsmÃglichkeit bietet, sieht es in der Tat nicht
>> gut aus.
>
>x-session-manager == /etc/alternatives/x-session-manager und das zeigt
>aufs startkde Skript. Wie gesagt ich kann solche Sachen die nur einmal
>ausgefuehrt werden sollen mit in meine $HOME/.xsession schreiben, die
>wird beim Start der Session ausgefuehrt und sonst nicht, aehnlich
>.profile bei normalen login-Shells. 

Das stimmt in diesem Fall natÃrlich.  Was die Sache Ãrgerlich macht, ist,
dass das z.B. fÃr die Distribution "Fedora Core release 1" bereits nicht
mehr stimmt:  Dort finden sich in '/etc/X11/gdm/Sessions' die
Shellscripte 'GNOME' und 'KDE', die nichts tun, als ein

   exec /etc/X11/xdm/Xsession gnome

bzw.

   exec /etc/X11/xdm/Xsession kde

zu starten.  /etc/X11/xdm/Xsession aber ist ein bash-Shellscript, in dem
(je nachdem, was fÃr ein Session man ausgewÃhlt hat) zum Schluss eines
der folgenden Kommandos ausgefÃhrt wird:

   exec -l $SHELL -c "$SSHAGENT /usr/share/apps/switchdesk/Xclients.$1";
   exec -l $SHELL -c "xterm -geometry 80x24-0-0"
   exec -l $SHELL -c "$SSHAGENT gnome-session"
   exec -l $SHELL -c "$SSHAGENT /usr/share/apps/switchdesk/Xclients.kde"
   exec -l $SHELL -c "$SSHAGENT /usr/share/apps/switchdesk/Xclients.twm"
   exec -l $SHELL -c "$SSHAGENT $1"
   exec -l $SHELL -c "$SSHAGENT $HOME/.xsession"
   exec -l $SHELL -c "$SSHAGENT $HOME/.Xclients"
   exec -l $SHELL -c "$SSHAGENT /etc/X11/xinit/Xclients"
   exec -l $SHELL -c "xsm"

Das wird jedesmal des Benutzers "$SHELL" als nicht-interaktives
login-shell gestartet (siehe Beschreibung des Parameters "-l" zum
Kommando "exec" des bash) und ihm ein Kommando Ãbergeben, das dann
jeweils das gewÃnschte Session hochfÃhrt.  Das halte ich fÃr (beinahe)
vorbildlich:  Egal, welches shell sich der Benutzer als "$SHELL" (via
/etc/passwd o.Ã.) auch ausgesucht und via "$HOME"/.bash_profile,
"$HOME"/.profile oder "$HOME"/.login konfiguriert hat:  Es wird als
nicht-interaktives login-shell gestartet.  Damit ist eine ordentliche
Konfiguration nach des Benutzers WÃnschen sichergestellt.

KÃnnte so etwas Debian nicht auch hinbekommen?

"Beinahe vorbildlich" nenne ich es deshalb, weil beim Zusammensetzen der
Kommandozeile (der Parameter zum "$SHELL"-option '-c')
Variablen-Auswertungen ohne Quoting verwendet werden.  Soweit aber die
Variablen SSHAGENT, HOME und 1 fÃr das betreffende "$SHELL"
unzerbrechliche Werte enthalten (was vermutlich der Fall sein dÃrfte),
ginge das nochmal gut.  Das prÃft aber /etc/X11/Xsession zuvor nicht ab.

Allerdings ist shell-unabhÃngiges Quoting ziemlich schwierig.  Am ehesten
kÃnnte ich mir da noch folgende Vorgehensweise vorstellen:

1. Schreibe ein "'" (ohne die AnfÃhrungszeichen) hin.

2. Nimm den Variablenwert, setze hinter jedes darin enthaltene Apostroph
die Zeichenfolge "\''" (ohne die AnfÃhrungszeichen).

3. Schreibe noch ein "'" (ohne die AnfÃhrungszeichen) hin.

So entsteht ein in Apostrophe eingeschlossener Text, dessen in ihm
enthaltene Apostrophe ordentlich verpackt sind.

Der KÃnigsweg, statt beispielsweise

   exec -l $SHELL -c "$SSHAGENT $1"

lieber

   exec -l "$SHELL" -c '"$@"' -"`basename "$SHELL"`" "$SSHAGENT" "$1"

hinzuschreiben, scheitert daran, dass erstens der Ausdruck "$@" nicht in
allen shells fÃr die positional parameters steht und zweitens manche --
aber nicht alle -- shells in diesem Fall als ersten Parameter nach der
Kommandozeile den Namen des shells selbst, mit einem Minuszeichen vorne
dran versehen, verlangen:  Das bash und das bourne shell verlangen es,
das csh und das tcsh verbieten es, das ksh verlangt oder verbietet es je
nach Fassung oder OS.  Es ist ein Graus.
-- 
Wenn Sie mir E-Mail schreiben, stellen |  When writing me e-mail, please
Sie bitte vor meine E-Mail-Adresse     |  precede my e-mail address with
meinen Vor- und Nachnamen, etwa so:    |  my full name, like
Helmut Waitzmann <[EMAIL PROTECTED]>, (Helmut Waitzmann) [EMAIL PROTECTED]

Antwort per Email an