Ausführen eines Skripts beim Start, bevor X in Ubuntu 9.10 gestartet wird

6962
Epcylon

Ich habe ein Skript, das ich beim Start ausführen möchte, um X-configs je nach Standort zu wechseln. Ich kann jedoch nicht herausfinden, wo ich es ablegen soll, damit es vor dem Start von X ausgeführt werden kann. Dies führt dazu, dass ich X neu starten muss, um die korrekte Konfiguration auszuführen.

Derzeit befindet sich mein Skript in /etc/init.d/whereami, mit Symlinks in /etc/rc[2-5].d/S25whereami. Ich habe versucht herauszufinden, wann X gestartet wird, falls das Problem einfach das ist 25, aber ich scheine die Antwort nicht zu finden ...

Jede Hilfe wird geschätzt.

2

2 Antworten auf die Frage

6
quack quixote

Ubuntu startet X-Windows von GDM (für Systeme, die den Standard Ubuntu-Desktop verwenden ) oder von KDM (für Systeme, die Kubuntu-Desktop verwenden ).

Um ein Skript vor dem Starten von GDM / KDM auszuführen, können Sie entweder

  1. Schreiben Sie Ihr eigenes Upstart-Skript zur Ausführung vor GDM. oder
  2. Ändern Sie das GDM-Skript des Systems, um ein benutzerdefiniertes externes Skript (z. B. Ihr Skript /etc/init.d/whereami ) als eine der ursprünglichen Aufgaben auszuführen.

Ubuntu verwendet Runlevel im Debian-Stil: Runlevel 1 ist der Einzelbenutzer-Wiederherstellungsmodus. Runlevel 2-5 sind alle gleich (GUI-Multi-User); und standardmäßig startet das System auf Runlevel 2 .

Ubuntu 9.10 verwendet Upstart, das Dienststart-Skripts in / etc / init bereitstellt . Die traditionelleren Init-Skripte in /etc/init.d und /etc/rc.d stehen weiterhin für Dienste zur Verfügung, die nicht auf Initstart- Scripts im Upstart-Stil portiert wurden, aber GDM hat eines. (Hinweis: Ubuntu 9.10 enthält /etc/init.d/gdm, erstellt jedoch keine /etc/rcX.d-Symlinks dafür.)

Der GDM-Start wird von / etc / init / gdm gesteuert . Diese Zeilen oben im Skript geben an, wann GDM gestartet und gestoppt werden soll. Beachten Sie, dass es keine Runlevel- Spezifikation für das Starten von GDM gibt - nur Dienste, die zuerst gestartet werden müssen.

start on (filesystem and started hal and tty-device-added KERNEL=tty7 and (graphics-device-added or stopped udevtrigger)) stop on runlevel [0156]  emits starting-dm 

Informationen zu Upstart-Skripts finden Sie in man 5 init. In den Dateien /etc/init/*.conf Ihres Systems finden Sie einige Beispiele. Siehe auch die Start- Event- Manpage:

Beispiel
Ein Dienst, der immer dann, wenn ein anderer Dienst zu laufen will, würde laufen, begann vor und gestoppt, nachdem es könnte, benutzen Sie :

start on starting apache stop on stopped apache 

Eine Aufgabe, die ausgeführt werden muss, bevor eine andere Aufgabe oder ein anderer Dienst gestartet wird, kann Folgendes verwenden:

start on starting postgresql 

Beachten Sie auch, dass die GDM / KDM-Upstart-Skripts ein Signal ausgeben, das "start -dm" ist, das auch nützlich sein kann.

Daher sollte ein Upstart-Skript, das vor der Ausführung von GDM ausgeführt wurde, eine der folgenden Start- Klauseln verwenden:

# run only when starting GDM start on starting gdm  # run when starting GDM or KDM start on (starting gdm  or starting kdm)  # run when starting any DM # starting-dm is a custom event emitted by the GDM/KDM/etc scripts start on starting-dm 
Gibt es eine Möglichkeit, anzugeben, dass mein Skript vor gdm ausgeführt werden muss, ohne dass das Skript gdm.conf geändert werden muss? Ich möchte meine Änderungen nicht jedes Mal erneut vornehmen, wenn gdm ein Upgrade erhält. Epcylon vor 14 Jahren 0
@epcylon: siehe die Art und Weise, wie das gdm-Skript angibt, "start on" ... ** "und gestartet hal" **? das bezieht sich auf das Upstart-Skript * / etc / init / hal.conf *. also ... hm ... ok, lass mich den Rest in die Antwort geben. quack quixote vor 14 Jahren 0
0
Sven

Normalerweise wird X in Runlevel 5 gestartet. Da das Skript vor X (in Form von xdm / kdm / gdm) gestartet werden soll, benötigen Sie eine niedrigere Nummer als den Eintrag Sxxxdm. Auf meinem System wird xdm also mit S111xdm gestartet, sodass Sie einen Symlink benötigen /etc/rc5.d/S10whereami.

Ich habe nirgendwo einen SXXxdm-Eintrag. Ich glaube, ich verwende gdm (die Standardeinstellung für Ubuntu), aber ich kann auch nirgendwo einen SXXgdm-Eintrag finden. Das ist zum Teil mein Problem .. Epcylon vor 14 Jahren 0
Ah ja, Ubuntu bedeutet seit 9.10 Upstart und funktioniert anders als herkömmliches SysV-Init, aber ich weiß nicht, wie genau (es noch nicht verwendet wurde), also sollten Sie diese Frage wirklich auf superuser.com verschieben. :) Sven vor 14 Jahren 0
@epcylon: ubuntu folgt der Debian-Runlevel-Konfiguration: Runlevel 1 ist Einzelbenutzer und Runlevel 2-5 sind alle gleich (GUI-Mehrbenutzer). standardmäßig bootet Ubuntu auf Runlevel 2. quack quixote vor 14 Jahren 0