Thinclient, Speicherbedarf X-Server

14/02/2008 - 20:12 von Adalbert Michelic | Report spam
Hallo,

ich schließe mich mal Alex an, und bastle auch ein wenig an meinem
Thin Client:

Ich hab das Problem, daß Firefox zeitweise durchdreht, und den
X-Server dazu bringt, Speicher in Unmengen zu belegen, und ihn in
Folge in den Tod reisst. Die Kiste hat 512 MB RAM, in einer "festen"
Installation mit genug Swap quittiert er das mit endlosem swappen
und Unansprechbarkeit; bei der "thin client" Installation ohne swap
kriegt er vom Kernel eine übergebrannt[1].

Als "thin client" hat er zwar keinen swap, aber eigentlich sollte er
mit 512 MB auskommen - im Normalfall tut er das auch, es sind keine
120 MB RAM belegt (neben dem X-Server laufen nur dropbear[3] und
pulseaudio).

Hat jemand eine Ahnung, wie man den X-Server dazu bekommt, sich ein
bißchen zivilisierter zu verhalten, auch wenn ein Client[2] spinnt?
Von mir aus soll er die Verbindung zu dem Programm schließen, und es
auf diese Weise umbringen - aber bitte nicht immer die ganze Sitzung
abwürgen ...

Ach ja, die Software: X.org 7.1.1 aus einem heftig kastrierten
Debian 4.0.


Zweite Frage, vor allem an Alex: Wie handhabt man das Ende der
Sitzung vernünftig? Blöde Frage. Was ich will: Bei einer lokal
laufenden Sitzung mit z.B. Gnome und gdm hat man ja die Möglichkeit,
sich entweder zu auszuloggen, oder beim Ausloggen direkt den
Shutdown anzustossen. Nachdem bei mir nur der X-Server lokal làuft,
der xdm/gdm/kdm aber auf dem Server, funktioniert das so natürlich
nicht.

Ich hab das derzeit so gelöst, daß ich X mit den Parametern -query
und -once aufrufe. Der Aufruf steht direkt in /sbin/init (ein
Skript), nach dem Ende des X-Servers wird poweroff aufgerufen. Das
war mit den oben erwàhnten Abstürzen aber höchst làstig, weil ich
dann immer den Rechner neu booten musste[4].

Das konnte ich zwar mittlerweile entschàrfen, indem ich den
X-Server bei exit code ungleich 0 nochmal neu starte, aber diese
Lösung ist auch partiell unbefriedigend - ich hàtt gerne die Chance,
mich auszuloggen, und mit anderem User neu einzuloggen (ohne die
Kiste neu zu starten).

Hat jemand bessere Ideen als ich?


Adalbert

[1] Nachdems grad war, hier die Ausgabe von dmesg:
http://lopez.at/~adalbert/oom-dmesg
[2] Ich meine Client für den X-Server, als ein Programm.
[3] Den brauch ich, weil ich gelegentlich mal mit avrdude einen
Mikrocontroller programmieren möchte, und das muß halt dort
laufen, wo auch der Parallelport ist.
[4] Das Linux-System startet zwar binnen 3-4 Sekunden, aber das BIOS
tut vorher elendslang herum, vor allem das BIOS für den
Highpoint-Chip, der unnötigerweise auf dem Motherboard drauf
ist. Und làsst sich leider nicht so einfach zum Schweigen
bringen, wie der SCSI-Controller, dem ich einfach den BIOS-Chip
rausgezogen habe, weils in das System-BIOS integriert ist.
 

Lesen sie die antworten

#1 Alexander Griesser
15/02/2008 - 18:45 | Warnen spam
Adalbert Michelic wrote:
Hat jemand eine Ahnung, wie man den X-Server dazu bekommt, sich ein
bißchen zivilisierter zu verhalten, auch wenn ein Client[2] spinnt?



Gute Frage, ich glaube nicht, dass X das kann.

Zweite Frage, vor allem an Alex: Wie handhabt man das Ende der
Sitzung vernünftig? Blöde Frage. Was ich will: Bei einer lokal
laufenden Sitzung mit z.B. Gnome und gdm hat man ja die Möglichkeit,
sich entweder zu auszuloggen, oder beim Ausloggen direkt den
Shutdown anzustossen. Nachdem bei mir nur der X-Server lokal làuft,
der xdm/gdm/kdm aber auf dem Server, funktioniert das so natürlich
nicht.



Sofern du nicht irgendwelche Skripte laufen hast die den X Server wieder
stàndig neu spawnen beendet sich der X Server automatisch nachdem der
letzte Eintrag der .xinitrc ausgeführt wurde, d.h. wenn dein Window-
Manager der letzte Eintrag in der xinitrc ist, musst du den beenden
(Logout Button, z.B.) damit der X server auch beendet wird.

Ich weiß ja nicht ob du immer nur die gleichen Applikationen auf dem
Thinclient brauchst, also z.B. nur Firefox oder so, dann könntest du
natürlich den firefox als letzte Instanz in der xinitrc starten und
wenn Firefox beendet wird, dann schließt sich auch dein X Server.

Alles andere wird zur Bastelei.

Ich hab das derzeit so gelöst, daß ich X mit den Parametern -query
und -once aufrufe. Der Aufruf steht direkt in /sbin/init (ein
Skript), nach dem Ende des X-Servers wird poweroff aufgerufen. Das
war mit den oben erwàhnten Abstürzen aber höchst làstig, weil ich
dann immer den Rechner neu booten musste[4].



Meine Thinclients fahren nur nach Drücken auf den POWER Knopf hinunter.
Wenn die Sitzung aus irgendeinem Grund beendet wird, gehts (ab der
graphischen Oberflàche) wieder von vorne los (sinnvoll, da meistens
Citrix Clients und so emuliert man dann eine schnelle
Benutzerumschaltung).
Mein letzter Eintrag in der xinitrd ist also ein kleines Skripterl
namens "respawn-client" welches den XClient of choice (rdesktop, wfica,
etc.) automatisch neu startet nachdem er beendet wurde.

Um ein sauberes Logout mach ich mir da keine Sorgen, ist in meinem
Fall auch nicht notwendig.

Das konnte ich zwar mittlerweile entschàrfen, indem ich den
X-Server bei exit code ungleich 0 nochmal neu starte, aber diese
Lösung ist auch partiell unbefriedigend - ich hàtt gerne die Chance,
mich auszuloggen, und mit anderem User neu einzuloggen (ohne die
Kiste neu zu starten).



Also wenn du dich ausloggen willst dann empfiehlt sich die Verwendung
eines kleines Skriptes welches xinit bis zur Unendlichkeit <buzz>und
noch viel weiter!</lightyear> immer wieder neu startet, sowas z.B.:

COUNTER=1
while true; do
if [ "$COUNTER" = "5" ]; then
# if the graphical user interface cannot be started or has been
# stopped five times, drop the user back to the command line
exit
fi
/usr/bin/xinit -- /usr/bin/Xorg -config /tmp/xorg.conf -nolisten tcp
COUNTER=$((COUNTER + 1))
done &


ciao,
Alex

Ähnliche fragen