GPS-Dilettant: Die GPS-Maus stellt die Uhr

Neulich beim OV-Abend durfte ich eine gute halbe Stunde über Linux am Beispiel von Linux Mint erzählen, dem System, bei dem ich nach meinem Abschied von Windows selbst gelandet bin. Live-Demo inklusive, also jene Sorte Vorführung, bei der man vorher dreimal prüft, ob der Laptop geladen ist und ob man das WLAN-Passwort noch weiß. Installation, Oberfläche, ein paar Programme und zum Schluss natürlich WSJT-X, schließlich saß da ein Raum voller Funkamateure.

In der Fragerunde meldete sich ein OM mit einer Frage, die ich gar nicht auf dem Zettel hatte: „Kann man unter Linux eigentlich die Uhrzeit mit einer GPS-Maus stellen?“ Der Hintergrund war schnell klar. Wer portabel unterwegs ist, bei POTA, SOTA oder am Fieldday, hat dort selten Internet. Und ohne Internet hat der Rechner keine Zeitquelle, mit der er seine Uhr für FT8 und FT4 ordentlich stellen könnte.

Meine Antwort war ein beherztes „Ja, klar“. Ich hatte mir dafür nämlich schon vor einiger Zeit ein kleines Shell-Script geschrieben. Das liest im Terminal die GPS-Daten aus und stellt die Systemzeit danach. Bei mir läuft das seit Langem ohne Murren. Nur: Terminal, sudo, Gerätedateien und die Frage, ob gpsd gerade die Maus festhält, das ist für jemanden, der Linux Mint an diesem Abend zum ersten Mal in Aktion gesehen hat, ungefähr so einladend, wie einem Lehrling ein Stemmeisen in die Hand zu drücken und zu sagen: „Der Rest ergibt sich.“

Auf der Heimfahrt reifte also die Idee, daraus ein richtiges Programm zu machen. Eines mit Symbol, Fenster und Knöpfen, das man ohne Terminal bedienen kann. Herausgekommen ist der GPS-Dilettant. Beim Namen musste ich nicht lange überlegen. Der Hausherr dieses Blogs nennt sich schließlich auch nicht anders, und mit dem CW-Dilettanten und dem DMR-Dilettanten hat er schon Geschwister.

Schauen wir uns zuerst an, warum FT8 so pingelig auf die Uhr schaut. Danach gehen wir einmal durch das Programm, und am Ende geht es darum, wie die Uhr tatsächlich gestellt wird und wie genau das klappt.

Warum FT8 auf die Sekunde schaut

FT8 und FT4 arbeiten in festen Zeitfenstern. Bei FT8 sind das 15 Sekunden, bei FT4 7,5 Sekunden. Alle Stationen senden im selben Takt, und der Decoder erwartet das Signal genau in diesem Fenster. Geht die eigene Uhr falsch, sendest du zur falschen Zeit und hörst die anderen zur falschen Zeit. Die Gegenstation sieht dann im besten Fall ein verstümmeltes Signal, im schlimmsten Fall gar nichts. Als Faustregel sollte die Rechneruhr auf etwa eine Sekunde genau gehen, besser auf wenige Zehntelsekunden. Wie FT8 im Inneren tickt, habe ich in FT8 – Digitaler Flüsterfunk aufgeschrieben, und für das noch flottere FT2 gilt das mit der Uhr erst recht.

Zu Hause ist das kein Thema. Linux Mint stellt die Uhr über das Internet per NTP, das erledigt der Dienst systemd-timesyncd im Hintergrund, und die Uhr stimmt auf wenige Millisekunden. Auf dem Gipfel oder dem Parkplatz am Waldrand fehlt aber das Internet, auch wenn die MC-20 Magnetic Loop längst steht. Die Uhr im Rechner läuft dann frei, und nach ein paar Tagen im Rucksack liegt sie gern ein Stück daneben.

Dazu kommt ein zweites Problem: der eigene Maidenhead-Locator. Zu Hause kennt man ihn auswendig. Auf einem fremden Berg kennt ihn meistens nur der Berg.

Eine GPS-Maus für wenige Euro löst beides auf einmal. Die GPS-Satelliten sind die pünktlichsten Plaudertaschen im Orbit: Sie erzählen ununterbrochen, wo sie sind und wie spät es ist. Die Maus hört zu, rechnet daraus Position und Uhrzeit aus und schickt beides per USB an den Rechner. Man muss die Daten nur noch abholen.

Ein kleiner Satellit neben der Uhr

Der GPS-Dilettant läuft unter Linux Mint 22 mit Cinnamon und nistet sich im Infobereich der Leiste ein, also dort, wo Uhr, Lautstärke und Netzwerk sitzen. Er zeigt einen kleinen Satelliten, und dessen Farbe und Form verraten, wie es um Empfang und Uhr steht.

ZustandFarbeFormBedeutung
Kein GerätgrauSatellit mit xkeine Maus gefunden oder seit 5 Sekunden keine Daten
Kein FixrotSatellit mit xdie Maus liefert Daten, kennt ihre Position aber noch nicht
2D-Fixorangeeine FunkwellePosition ohne Höhe, meist zu wenige Satelliten in Sicht
3D-Fixgrünzwei FunkwellenPosition mit Höhe, und die Systemuhr stimmt
Zeitwarnunggelbzwei FunkwellenFix in Ordnung, aber die Uhr weicht mehr als 0,1 s von der GPS-Zeit ab

Wer eine sehr dunkle oder sehr helle Leiste hat, schaltet in den Einstellungen auf einfarbige Symbole um. Dann erkennt man den Zustand an der Form, und die Zeitwarnung bekommt zusätzlich ein Ausrufezeichen.

Der Tooltip

Das eigentliche Herzstück ist der Tooltip. Lässt du den Mauszeiger kurz über dem Symbol ruhen, erscheint eine kleine Tabelle mit Position, Locator, Höhe, UTC-Zeit, Satelliten, HDOP und der Abweichung der Systemuhr.

Die letzte Zeile ist die wichtigste. „+0,04 s Abweichung“ heißt: Die Uhr des Rechners geht 40 Millisekunden vor. Ein Minus hieße, sie geht nach. Damit der Wert nicht nervös hin und her springt, glättet das Programm ihn über die letzten fünf Messungen.

Das Detailfenster

Ein Linksklick auf das Symbol öffnet das Detailfenster mit drei Reitern. Unter „Übersicht“ stehen alle Werte noch einmal untereinander, dazu Geschwindigkeit, Kurs und weitere Genauigkeitswerte (VDOP, PDOP). Unten gibt es drei Knöpfe: Position kopieren, Position in OpenStreetMap öffnen und Zeit synchronisieren.

Der Reiter „Satelliten“ ist mein persönlicher Liebling. Oben zeigt eine Himmelsansicht, wo die Satelliten gerade stehen: Norden oben, der Mittelpunkt ist der Zenit, der äußere Ring der Horizont. Gefüllte Punkte nutzt die Maus für die Berechnung, Ringe sieht sie nur. Darunter zeigen Balken die Signalstärke jedes Satelliten, die Farbe verrät das System (GPS, GLONASS, Galileo, BeiDou, SBAS, QZSS).

Praktisch ist das vor allem dann, wenn kein Fix zustande kommt. Stehen alle Satelliten in einer Ecke des Himmels oder sind die Balken kurz, versperrt meistens etwas die Sicht: ein Dach, eine Wand oder das eigene Auto. Die Maus will den Himmel sehen. Hinter der Fensterscheibe klappt es manchmal, mitten im Gebäude eher nicht.

Der dritte Reiter „Rohdaten“ ist für Neugierige und für die Fehlersuche. Hier laufen die NMEA-Sätze mit, die von der Maus kommen. Auf Knopfdruck zeichnet das Programm sie in eine Datei auf, die sich später mit gpsfake wieder abspielen lässt.

Das Kontextmenü

Ein Rechtsklick auf das Symbol öffnet das Menü. Dort findest du unter anderem „Position kopieren“ mit fünf Formaten, darunter Dezimalgrad, Grad/Minuten/Sekunden und natürlich der Locator. Der Locator steht sogar gleich im Menüeintrag, du siehst ihn also, ohne etwas zu kopieren. Für das Logbuch oder die Spot-Meldung auf dem Gipfel ist das Gold wert.

Die Uhr stellen: Das Programm petzt, du entscheidest

Jetzt zum eigentlichen Anlass, der Frage vom OV-Abend. Weicht die Systemuhr mehr als 100 Millisekunden von der GPS-Zeit ab (der Wert ist einstellbar), wird das Symbol gelb. Auf Wunsch erscheint zusätzlich eine Benachrichtigung mit einem Knopf zum Synchronisieren, höchstens alle zehn Minuten, damit sie nicht nervt.

Was das Programm dagegen nie tut: die Uhr eigenmächtig stellen. Es petzt, du entscheidest. Gestellt wird erst nach deinem Klick auf „Synchronisieren“ und nach der Passwortabfrage des Systems. An der Systemuhr eines Rechners dreht man nicht heimlich, das gehört sich einfach nicht.

Der Dialog zeigt GPS-Zeit, Systemzeit und Abweichung laufend auf die Millisekunde. Der Knopf „Synchronisieren“ ist nur aktiv, wenn alles passt: Die Maus hat mindestens einen 2D-Fix, nutzt mindestens vier Satelliten (einstellbar), meldet die Zeit als gültig, und die letzte Zeitangabe ist höchstens zwei Sekunden alt. Fehlt etwas, schreibt der Dialog hin, was genau fehlt. Kein Rätselraten also.

Eine Hürde gibt es noch. Solange NTP aktiv ist, lässt Linux die Uhr nicht von Hand stellen. Der GPS-Dilettant schaltet NTP deshalb vorher ab, und mit einem Haken bestimmst du, ob es danach wieder eingeschaltet wird. Mit Internet ist das sinnvoll, ohne Internet bringt es nichts, schadet aber auch nicht.

Das System fragt dabei nach dem Passwort, unter Umständen zweimal: einmal fürs Abschalten von NTP und einmal fürs Stellen der Uhr. Das Programm selbst läuft nie mit Administratorrechten. Es bittet den Systemdienst timedate1 höflich, die Uhr zu stellen, und das System kümmert sich über polkit um die Passwortabfrage.

Ein kleines Detail, auf das ich ein bisschen stolz bin: Das Programm übergibt dem System keine feste Uhrzeit, sondern eine Korrektur, etwa „Uhr um 0,34 s vorstellen“. Diese Korrektur bleibt gültig, egal wie lange du für das Passwort brauchst. Du darfst also auch mit kalten Fingern auf dem Gipfel in Ruhe tippen. Bricht man die Abfrage ab oder geht etwas schief, bleibt die Uhr unverändert, und NTP kommt in den Ausgangszustand zurück.

Latenz: Die Maus ist ein kleines bisschen langsam

Eine GPS-Maus weiß eigentlich schon in dem Moment, in dem eine Sekunde beginnt, wie spät es ist. Die Textzeile mit der Uhrzeit wird aber erst danach fertig, wandert über USB zum Rechner und wird dort gelesen. Das dauert einige bis einige hundert Millisekunden. Ohne Korrektur ginge die Uhr nach dem Stellen genau um diesen Betrag nach.

Dafür gibt es den Latenz-Offset. Den misst du einmal zu Hause mit Internet ein, denn dann dient die per NTP gestellte Uhr als Maßstab. Unter Einstellungen → Zeit klickst du auf „Offset jetzt einmessen“, wartest 60 Sekunden und speicherst das Ergebnis. Bei meiner u-blox 7 kamen etwa 50 Millisekunden heraus. Für den Weg über gpsd und den direkten Zugriff gibt es getrennte Werte, weil die Verzögerung je nach Weg verschieden sein kann.

Mit eingemessenem Offset erreicht man ohne zusätzliches PPS-Signal etwa ±50 bis 100 Millisekunden. FT8 und FT4 verkraften Abweichungen bis ungefähr einer Sekunde, das reicht also bequem. Ein Tipp aus der Praxis: Wird das Symbol gelb, obwohl NTP synchron ist, stimmt die Uhr und der Offset nicht. Der Tooltip weist dann darauf hin und schlägt auch keine Synchronisation vor.

Schaltsekunden, die kleinen Spaßbremsen

Die GPS-Zeit kennt keine Schaltsekunden und liegt derzeit 18 Sekunden vor UTC. Die Maus rechnet das selbst um. Den aktuellen Wert dafür senden die Satelliten aber nur etwa alle 12,5 Minuten. Nach einem Kaltstart, etwa wenn die Maus lange in der Schublade lag, rechnet sie womöglich noch mit einem veralteten eingebauten Wert. Die Zeit liegt dann um ganze Sekunden daneben, obwohl die Maus fröhlich „gültig“ meldet.

Dagegen hat der GPS-Dilettant zwei Warnungen eingebaut. Du kannst eine Mindestdauer für den Fix einstellen, ich empfehle nach einem Kaltstart 15 Minuten. Bis dahin zeigt der Dialog einen Hinweis. Außerdem warnt er, wenn die Abweichung verdächtig nahe an ganzen Sekunden liegt. Beides sind Warnungen, keine Sperren. Auch hier gilt: Das Programm petzt, du entscheidest.

Bonus: der Locator für WSJT-X

Wo die Position schon mal da ist, kann der GPS-Dilettant den Locator auch gleich an WSJT-X weiterreichen. WSJT-X nutzt ihn dann anstelle des Locators aus seinen eigenen Einstellungen, bis es beendet wird. Wechselst du unterwegs das Feld, bekommt WSJT-X den neuen Locator von selbst. Ohne Fix wird nichts gesendet.

Dafür trägst du in WSJT-X unter Einstellungen → Berichte (Reporting) als UDP-Server 127.0.0.1 und Port 2237 ein und setzt den Haken bei „UDP-Anfragen akzeptieren“ (Accept UDP requests). Im GPS-Dilettant schaltest du unter Einstellungen → WSJT-X die Übergabe ein. Eine Statuszeile zeigt, ob WSJT-X gefunden wurde und welcher Locator zuletzt rausging.

Ehrlicherweise muss ich dazu sagen: Diese Funktion ist gegen das Nachrichtenformat von WSJT-X geprüft, aber noch nicht mit einem laufenden WSJT-X ausprobiert. Hier freue ich mich über Rückmeldungen aus der Praxis. Wer zusätzlich JTAlert, GridTracker oder ein Logprogramm mitlaufen lässt, findet im Handbuch die Lösung mit einer Multicast-Adresse.

gpsd oder direkt?

Wer sich schon mit GPS unter Linux beschäftigt hat, kennt gpsd. Das ist ein Hintergrunddienst, der die Maus öffnet und die Daten an beliebig viele Programme verteilt. Brauchst du das? Meistens nicht. Ohne gpsd kann immer nur ein Programm gleichzeitig auf die Maus zugreifen, und wenn das der GPS-Dilettant ist, reicht das völlig.

Im Modus „Automatisch“, der Standardeinstellung, schaut das Programm zuerst, ob gpsd läuft und eine Maus kennt. Wenn ja, nimmt es gpsd. Wenn nicht, liest es die Maus direkt und probiert dabei die üblichen Baudraten selbst durch. Einrichten musst du dafür nichts. gpsd lohnt sich erst, wenn mehrere Programme die Maus gleichzeitig brauchen, etwa ein Logprogramm oder chrony. Wie man es einrichtet, steht im Handbuch.

Installation

Das fertige Paket gps-dilettant_0.1.0_all.deb liegt bei GitHub unter den Releases. Ein Doppelklick im Dateimanager öffnet die Paketinstallation von Mint, alternativ geht es im Terminal:

sudo apt install ./gps-dilettant_0.1.0_all.deb

Das ./ vor dem Dateinamen ist wichtig, sonst sucht apt im Internet nach einem Paket dieses Namens. Die nötigen Abhängigkeiten installiert apt automatisch mit. Danach steht „GPS-Dilettant“ im Startmenü unter „Zubehör“.

Für den direkten Zugriff auf die Maus muss dein Benutzer in der Gruppe dialout sein. Einmal ins Terminal tippen, dann ab- und wieder anmelden:

sudo usermod -aG dialout $USER

Das ist der einzige Terminalbefehl, um den du nicht herumkommst, versprochen. Damit das Programm bei jeder Anmeldung startet, setzt du in den Einstellungen unter „Allgemein“ den Haken bei „Beim Anmelden starten“.

Alles Weitere, von den Einstellungen im Einzelnen über gpsd bis zur Fehlersuche, steht im ausführlichen Handbuch im GitHub-Repository. Im Programm erreichst du es über Rechtsklick → „Hilfe“. Es setzt keine Vorkenntnisse voraus und erklärt auch die Grundlagen wie Fix, HDOP und Latenz.

Getestet ist das Ganze unter Linux Mint 22 mit Cinnamon und einer GPS-Maus mit u-blox-7-Chip. Andere Mäuse, die NMEA-Daten über USB senden, sollten ebenso funktionieren. Unter MATE und Xfce sollte es laufen, ausprobiert habe ich das aber noch nicht.

Wie der Dilettant entstanden ist

Am Anfang stand kein Code, sondern ein Plan. Bevor die erste Zeile geschrieben war, gab es ein Planungsdokument mit Zielen, Datenmodell, Oberfläche und zehn Etappen. Als Zimmermann weiß ich: Wer ohne Zeichnung anfängt, sägt zweimal.

Geschrieben ist das Programm in Python 3.12 mit GTK 3, beides ist in Mint 22 schon an Bord. Für das Symbol in der Leiste nutze ich XApp.StatusIcon, Mints eigene Lösung für den Infobereich. Die verbreitete Alternative AppIndicator kam nicht in Frage, denn sie kennt keine Tooltips, und der Tooltip ist hier die halbe Miete. Die Uhr stellt der Systemdienst timedate1 über D-Bus.

Programmiert habe ich das Ganze mit KI-Unterstützung. Die Rollenverteilung war klar: Ich war Auftraggeber, Tester mit echter Maus am Fenster und hauptberuflicher Bedenkenträger, die KI hat getippt und sich meine Einwände angehört. Ein Universaldilettant muss nicht alles selbst können, er muss nur wissen, was er will, und hinterher gründlich nachprüfen.

Das Ergebnis ist Version 0.1.0, steht unter MIT-Lizenz und spricht Deutsch und Englisch. Was es nicht kann und auch nicht können soll: Karten anzeigen, navigieren oder Tracks aufzeichnen. Dafür gibt es genug andere Programme. Der GPS-Dilettant macht zwei Dinge, Uhrzeit und Locator, und die macht er ordentlich.

Und der OM vom OV-Abend? Der bekommt den Link zu diesem Artikel. Ich bin gespannt, ob seine Uhr bei der nächsten Aktivierung pünktlicher ist als meine Kaffeemaschine. Rückmeldungen, Fehlerberichte und Ideen nehme ich gern über GitHub entgegen.

73 de DL6LG

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.