Nee, nee,
das wird nix - das hatte ich schon. Es ist tatsächlich so, dass die rc.local (mehr oder weniger) unabhängig vom upstart-System ausgeführt wird. Wenn man in die rc.local bspw. ein SLEEP 60 einbaut, dann schäft die rc.local tatsächlich für 'ne Minute ein, aber das hindert den Rechner nicht im mindesten daran, vorher bzw. parallel dazu schon die Login-Prozedur mit allem drum und dran durchzuziehen. Ich hab dafür in die rc.local vor und nach dem SLEEP 60 (und auch in einige andere Dienst.conf-Aufrufe im /etc/init-Verzeichnis) eine ganze Reihe von BEEPs in unterschiedlicher Tonhöhe hineingeschrieben, so dass der Rechner während des Bootens lustig vor sich hin gepiept hat - und ich anhand der Tonfolge nachvollziehen konnte, wann welcher Prozess abgearbeitet wurde.
Ja, ok, vielleicht etwas unorthodox, aber ganz aufschlussreich.
Der langen Rede dumpfer Sinn: So wird das nix.
Aber da mir die Sache keine Ruhe ließ, habe ich nochmal in den upstart-Dateien herumgepfuscht - und siehe da: ES IST VOLLBRACHT!!!
Die Lösung (für die Workaround-Krücke!) ist folgende. Die gdm.conf sieht im Original so aus:
# gdm - GNOME Display Manager
#
# The display manager service manages the X servers running on the
# system, providing login and auto-login services
description "GNOME Display Manager"
author "William Jon McCann <mccann@jhu.edu>"
start on (filesystem
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udevtrigger))
stop on runlevel [016]
emits starting-dm
env XORGCONFIG=/etc/X11/xorg.conf
script
if [ -n "$UPSTART_EVENTS" ]
then
[ ! -f /etc/X11/default-display-manager -o "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/sbin/gdm" ] || { stop; exit 0; }
# Check kernel command-line for inhibitors
for ARG in $(cat /proc/cmdline)
do
case "${ARG}" in
text|-s|s|S|single)
plymouth quit || : # We have the ball here
exit 0
;;
esac
done
fi
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
elif [ -r /etc/environment ]; then
. /etc/environment
export LANG LANGUAGE
fi
export XORGCONFIG
exec gdm-binary $CONFIG_FILE
end script
Da wird also ein Skript abgearbeitet!
Jetzt habe ich (einfach) in die Lücke zwischen "script" und dem ersten "if" meinen kleinen Warte-Code hineingebastelt. Und sieh da - ES KLAPPT.
Meine modifizierte gdm.conf sieht jetzt so aus:
# gdm - GNOME Display Manager
#
# The display manager service manages the X servers running on the
# system, providing login and auto-login services
description "GNOME Display Manager"
author "William Jon McCann <mccann@jhu.edu>"
start on (filesystem
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udevtrigger))
stop on runlevel [016]
emits starting-dm
env XORGCONFIG=/etc/X11/xorg.conf
script
####### jetzt kommt meine Warteschleife ##########################
beep -f 261,6 -l 100
NOCHMAL=true
FILESERVER="192.168.0.10"
SCHLEIFE=0
while $NOCHMAL
do
SCHLEIFE=$(($SCHLEIFE+1))
if ping -w 2 -c 2 $FILESERVER > /dev/null ; then
NOCHMAL=false
beep -f 523,2 -l 100
fi
if [ $SCHLEIFE -gt 40 ]; then
NOCHMAL=false
beep -f 392 -l 100
fi
beep -f 329,6 -l 100
sleep 1
done
beep -f 523,2 -l 100 -n -f 392 -l 100 -n -f 329,6 -l 100 -n -f 261,6 -l 100
########### Ab hier gehts normal weiter #####################################
if [ -n "$UPSTART_EVENTS" ]
then
[ ! -f /etc/X11/default-display-manager -o "$(cat /etc/X11/default-display-manager 2>/dev/null)" = "/usr/sbin/gdm" ] || { stop; exit 0; }
# Check kernel command-line for inhibitors
for ARG in $(cat /proc/cmdline)
do
case "${ARG}" in
text|-s|s|S|single)
plymouth quit || : # We have the ball here
exit 0
;;
esac
done
fi
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
elif [ -r /etc/environment ]; then
. /etc/environment
export LANG LANGUAGE
fi
export XORGCONFIG
exec gdm-binary $CONFIG_FILE
end script
Da sind auch noch all die vielen Test-Piepser drin.
Seltsamerweise hat es mit dem WOL aus diesem Skript heraus nicht geklappt, so dass ich (im Wissen darum, dass die rc.local ja unabhängig verwurstet wird) den WOL-Aufruf dorhin verbannt habe.
Nochmals vielen Dank bis hierher!!!
Der Vollständigkeit halber (und um Menschen mit gleichgelagertem Problem vor diesen Irrwegen zu bewahren) füge ich hier meine zwei wesentlichsten Fehlschläge auf diesem Weg an:
1. Zuerst habe ich versucht, eine eigene warte-auf-server.conf zu schreiben und dann die gdm.conf davon abhängig zu machen. Nach dem Fehlversuch und einen Blick in die Dokumentation ahnte ich: mit dem Einfügen von "and started warte-auf-server" in die gdm.conf ist es nicht getan, denn die gdm.conf wartet dann nicht etwa, bis das warte-auf-server-Skript fertig abgearbeitet ist, sondern nur solange, bis es zwar gestartet ist - aber während seiner Abarbeitung vielleicht noch lustig vor sich hin wartet - da hat es ziemlich durcheinander gepiept 😉
Anmerkung dazu: der ganze Upstart-Prozess ist katastrophal schlecht dokumentiert. Vielleicht sollte mal jemand mit Durchblick versuchen, den Start-Vorgang von Ubuntu mit all seinen upstart-Abhängigkeiten visuell darzustellen???
2. Dann habe ich versucht der plymouth-splash.conf ein pre-start Script zu verpassen. Zwar hat der show-splash-Aufruf hübsch gewartet, bis das Skript fertig war, aber show-splash ist leider nicht relevant für den Login-Zeitpunkt (?).
So weit, so gut - und bis zum nächsten Problem
eckisch
NACHTRAG:
Die Erkenntnisse bezüglich UPSTART, die ich aus meinen Versuchen der letzten Tage ziehen konnte, habe ich versucht im Wiki-Artikel Upstart unterzubringen.