Dies ist eine alte Version des Dokuments! —-

Fehlersuche und Problembehebung unter Linux

Firefox

Firefox per SSH auf einem anderen Rechner ausführen und die Ausgabe umleiten

Die Konstellation

Lokales Netzwerk mit 3 Rechnern mit Linux als Betriebssystem. Der Einfachheit halber nenne ich sie hier Rechner A, B und C.

An Rechner A habe ich zwei Monitore angeschlossen, das ist mein Hauptrechner, an dem hängen auch Trackball und Tastatur. Da ich ab und zu mehr Rechenleistung und RAM benötige, sind die Rechner B und C per Gigabit- Netzwerk angeschlossen. B und C agieren auch als Server.

Der Zugriff auf B und C erfolgt über ssh -X, dadurch werden die Ausgaben von grafischen Programmen auf den X-Server von Rechner A umgeleitet.
Dadurch habe ich alle Fenster der laufenden Programme der Rechner A, B und C auf einem Monitor1) und kann mit den Programmen hantieren, wie wenn sie auf einem Rechner laufen würden. Sehr angenehm. :-)

Das Problem

Das hat alles funktioniert, nur beim Firefox hatte ich ein seltsames Phänomen:

Auf Rechner A läuft Firefox, ich verbinde mich per ssh -X zu Rechner B und gebe dann firefox ein, um den Browser zu starten. Alles klar, Fenster geht auf, aber ich werde stutzig: da sind die selben Plugins geladen, die ich auf Rechner A installiert habe, auf Rechner B jedoch nicht!. Oha.
Also versuche ich, eine IPv6- Adresse aufzurufen. Da nur Rechner A eine IPv6- Verbindung ins Internet hat, müßte eine Fehlermeldung kommen, wenn ich z.B. http://ipv6.google.com2) aufrufe. Nix Fehler, die Seite wird geladen. Da stimmt was nicht! Definitiv!

Also hab ich auf Rechner B mal ps ax | grep firefox aufgerufen - Überraschung! Auf Rechner B läuft kein Firefox. Der Prozess wurde einfach an den laufenden Prozess von Rechner A „angedockt“.

So war das ja nicht gedacht. Nach einigen fehlgeschlagenen Versuchen, bekam ich ihm Chat bei einer Diskussion um etwas anderes die

Lösung

Wenn ich den Firefox auf Rechner B mit firefox -no-remote starte, bleibt der Prozess da, wo ich ihn haben will: auf Rechner B.

Das sieht dann so aus:

Links die Firefox- Instanz von Rechner A, rechts die von Rechner B.

Mir bekannte Fehlerquellen

Scripte

Scripte aus der Mailanzeige von KMail herauskopieren

Ich habe das Script download.sh gemailt bekommen.
Das habe ich per Copy&Paste aus KMail in einen Editor kopiert, in ~/bin abgespeichert und mit chmod +x ausführbar gemacht.

Das Problem

Beim Ausführen erhielt ich folgenden Fehler:

florian@florian:~/bin> ./download_test.sh 
./download_test.sh: line 7: syntax error near unexpected token `do' 
./download_test.sh: line 7: `  for m in $(seq 1 12); do'

Beim Absender geht es, bei mir nicht. Rätselraten. Probieren.

Die Ursache

Das Script enthält zwei oder mehr aufeinander folgende Leerzeichen.
Das ist eigentlich kein Problem.

Wenn ich mir das Script jedoch mit mcedit angesehen habe, wurde für jedes zweite der aufeinander folgenden Leerzeichen statt 0x20 das Zeichen 0xA0 aus der Zeichentabelle verwendet. Die sehen beide gleich aus, sind auch beides Leerzeichen.

Mit dem mcedit sieht das richtig codierte Leerzeichen so aus (rote Umrandung):

Das „falsch“ codierte Leerzeichen sieht im mcedit dagegen so aus (rote Umrandung):

ABER: 0x20 wird auch von der Shell als Leerzeichen erkannt und beim Ausführen ignoriert, 0xA0 wird aber versucht mit auszuführen.

In meinem Fall wollte die Shell also nicht

«for m in $(seq 1 12); do»

sondern

« for m in $(seq 1 12); do»

ausführen.
Beachte das Leerzeichen nach dem «! Das ist das 0xA0.
Und da « for» kein Befehl ist, sondern nur «for», kommt für die Shell anstelle von

for .. ; do irgendwas; for .. ; do irgendwas;

ein

for .. ; do irgendwas; do irgendwas;

heraus.

Die Lösung
  • Entweder im Script die problematischen Leerzeichen von Hand durch die „richtigen“ Leerzeichen ersetzen (aufwendig!)

oder

  • Die email abspeichern und dann mit einem Texteditor alles außer dem Script entfernen.
Anmerkung

Dieses Problem besteht auch mit einzelnen Befehlszeilen, wenn der Absender z.B. zwischen Befehl und Option(en) aus Versehen zwei Leerzeichen gemacht hat.
In diesem Fall einfach das überflüssige Leerzeichen entfernen.

Die Shell selber stört sich selber nicht an zwei oder mehreren Leerzeichen:

 
florian@florian:~/bin> head ../Homepage/bytecamp/grossing.de/index.php 
<?php 
header("Location: home.php"); 
exit(); 
?> 
florian@florian:~/bin> head          ../Homepage/bytecamp/grossing.de/index.php 
<?php 
header("Location: home.php"); 
exit(); 
?> 

Du möchtest selber ein wenig damit herumspielen? Du kannst dir das Script mit den problematischen Leerzeichen herunterladen



Du hast ein Script oder eine Konfigurationsdatei, die du gerne anderen hier zur Verfügung stellen möchtest?
Bitte mit den Kommentaren und eventuell einer Kurzbeschreibung (zum besseren Verständnis) mailen. Danke!
Florian Groß

1) ok, in meinem Fall zwei ;-)
2) nur per IPv6 erreichbar!

Eigene Werkzeuge