Für eine sehr spezielle Softwareanwendung pflegen wir eine Basis von Maschinen, auf denen fvwm 2.5 läuft. Um die Menüstruktur zu aktualisieren, wird die Standardkonfigurationsdatei fvwm2rc während des von einem Paketverwaltungssystem durchgeführten Aktualisierungsprozesses ersetzt. Um die neue Menüstruktur nach einer Aktualisierung zu aktivieren, muss der Benutzer manuell eine Aktion ausführen: Maschine neu starten, erneut anmelden, fvwm neu starten. Die bevorzugte Aktion ist, „Window Manager > Fvwm2 neu starten“ zu wählen, da dann keine Anmeldung erforderlich ist und sogar die Fenster erhalten bleiben.
Frage: Wie kann ich von der Kommandozeile oder dem Paketverwaltungssystem aus eine äquivalente Aktion wie "Fvwm2 neu starten" aufrufen? Der folgende Befehl funktioniert nicht (ebenso wenig wie ähnliche):
fvwm -c "Restart"
[FVWM][SetupICCCM2]: <<ERROR>> another ICCCM 2.0 compliant WM is running, try -replace
"-replace" ist keine Option, da man sich nach dem Aufruf erneut anmelden muss.
Antwort1
Sie möchten, dass fvwm die Konfiguration entweder erneut liest oder komplett neu startet. Außerdem bin ich mir nicht ganz sicher, ob das das -c
bewirkt, was Sie möchten.
Der schnelle oder schmutzige Weg wäre:
killall fvwm
fvwm
Hinweis: Bitte führen Sie dies nicht auf einem BSD- oder Solaris-System aus, da killall dort den Init-Prozess beenden wird. Der Prozessname killall gilt nur für Linux.
Ich bin mir jedoch nicht sicher, ob dadurch nicht einige Fensterinformationen (Standort, Abmessungen usw.) zerstört würden. Oder Sie könnten versuchen, die aktuelle Sitzung zu ersetzen:
fvwm --replace
Dadurch sollte der alte fvwm-Prozess beendet, ein neuer gestartet und sogar die Fenster korrekt gehalten werden.
Wenn fvwm Ihre X-Session ist, können Sie immer noch versuchen,FvwmBefehl, die externe Befehlsschnittstelle, die scheinbar Befehle an das aktuell laufende fvwm senden kann.
Antwort2
Das Handbuchsagt uns:
Hier sind einige Fälle, in denen „Restart fvwm2“ oder „Restart fvwm“ Probleme verursachen:
- Ausführen von fvwm unter einem Sitzungsmanager
- Ausführen von FVWM mit Multihead-Displays
- mit Kommandozeilenargumenten wie -f themes-rc oder -cmd
- wenn das erste fvwm2 im $PATH ein anderes ist
Diese Punkte geben Hinweise darauf, warum Sie diese Nachricht sehen. Kreuzen Sie jeden einzelnen Punkt für Ihren Fall an.
Definieren Sie einige Tastaturkürzel, um den Neustartbefehl auszuführen (auch im Handbuch):
Key F1 R N Restart
Key F1 R N Restart fvwm -s
Key F1 R N Restart ~/bin/fvwm -f $HOME/.fvwm/main
Key F1 R N Restart fvwm1 -s -f .fvwmrc
Key F1 R N Restart xterm -n '"X console"' \
-T \"X\ console\" -e fvwm1 -s
Antwort3
FvwmCommand
erfordert, FvwmCommandS
dass der FIFO geöffnet ist. Wenn Sie nicht sicher sein können, dass alle Ihre Benutzer einen haben, funktioniert es nicht.
Aber FVWMWilleNeustart auf SIGUSR1.
Ein FVWM-Neustart funktioniert sogar, wenn es sich um den letzten Befehl handelt .Xsession
.
Aber wie andere bereits gesagt haben, wird FVWM nicht von selbst neu gestartet, wenn es unter einem X-Sitzungsmanager ausgeführt wird (und FVWM mit Sitzungsmanagerunterstützung kompiliert wurde), sondern lediglich beendet und erwartet, vom Sitzungsmanager neu gestartet zu werden. Dies wirkt sich auch auf das Verhalten von SIGUSR1 aus.
Antwort4
Bei mir funktioniert folgendes:
kill -SIGUSR1 pid
wobei pid die Prozess-ID des neu zu startenden fvwm-Prozesses ist; einfacher (unter Linux):
killall -SIGUSR1 fvwm