twgps

PCに接続されたUSB/シリアルGPS受信機を利用して、コンピューターをStratum 1 NTPサーバーにするデスクトップアプリケーション。TWSNMPシリーズプロジェクト。

View on GitHub

twgps

English

twgps は、PC に接続された USB/シリアル GPS 受信機を利用して、お使いのコンピューターを Stratum 1 NTP サーバー にする軽量なマルチプラットフォーム対応のデスクトップアプリケーションです。GPS 受信機を自動的に検出し、衛星の配置や信号強度(SNR)をビジュアル化し、高精度な NTP 時刻を提供します。

Wails (Go + Svelte) を使用して構築されています。

twgps インフォグラフィック

twgps ダッシュボード


必要な機材

本ソフトウェアを使用するには、NMEA 規格に対応した USB 接続の GPS 受信機が必要です。

動作確認済み機材:

DOCTORADIO GR7-10HZ


主な機能


インストール方法

GitHub の Releases ページから、ビルド済みのバイナリをダウンロードできます。


操作方法

  1. GPS 受信機の接続: NMEA 出力に対応した USB またはシリアル接続の GPS 受信機をコンピューターに接続します。
  2. twgps の起動: アプリケーションを起動します。
  3. 自動スキャン: バックグラウンドでシリアルポートの自動スキャンが開始されます。有効な NMEA データストリームが検出されると、接続ステータスが緑色になり、衛星情報の更新が始まります。
  4. 測位の完了: GPS 受信機が衛星を捕捉し測位(Fix)するまで待ちます。測位が完了すると、経緯度、高度、正確な UTC 時刻がダッシュボードに表示されます。
  5. NTP サーバーの起動:
    • 動作させたいポート番号を入力します(デフォルトは 123)。
    • Start NTP ボタンをクリックします。
    • 注意: Linux や macOS で標準の 123 ポートを使用するには、特権が必要です。後述の Linux での使用時の設定 を参照してください。

Linux での使用時の設定

1. シリアルポートのアクセス権限設定 (Permission Denied 回避)

一般ユーザーのまま USB シリアルデバイス(/dev/ttyACM0 や /dev/ttyUSB0 など)にアクセスするには、ユーザーを適切なグループに追加する必要があります。

[!IMPORTANT] グループ設定を反映させるには、一度ログアウトして再ログイン(またはシステムを再起動)する必要があります。

なぜ sudo で twgps を起動してはいけないのか

sudo ./twgps のようにルート権限で起動すると、panic: failed to init GTK というエラーでクラッシュします。これは、ルートユーザーが現在のログインユーザーのディスプレイサーバー(X11 や Wayland)へのアクセス権を持たないためです。必ず一般ユーザーのまま、上記のコマンドでシリアルポートへのアクセス権限を付与してください。

2. 特権ポート (123) のバインド設定

Linux では、1024 未満の特権ポート(UDP 123 など)へのバインドはルート権限に制限されています。アプリ全体を sudo で動かす代わりに、バイナリに対してネットワークバインド権限のみを付与することができます。

sudo setcap 'cap_net_bind_service=+ep' ./twgps

3. 古い GPU やドライバ使用時の画面描画トラブル(画面が真っ白になる問題など)

起動時にウィンドウ内が真っ白な状態のままになったり、アプリがクラッシュしたりする場合、WebKit2GTK とグラフィックスドライバ(古い Intel/AMD チップや Mesa ドライバなど)の相性が原因である可能性があります。 その場合、環境変数を設定して DMABUF レンダリングやハードウェアアクセラレーションを無効化することで解決できます。

# DMABUF レンダラーを無効化する (古い GPU/Intel/Mesa での推奨設定)
WEBKIT_DISABLE_DMABUF_RENDERER=1 ./twgps

# 描画トラブルが解消しない場合は、コンポジットモードを完全に無効化
WEBKIT_DISABLE_COMPOSITING_MODE=1 ./twgps

ローカルでのビルド方法

前提条件

ソースコードからビルドするには、以下のツールがインストールされている必要があります。

ビルド手順

  1. リポジトリのクローン:
    git clone https://github.com/twsnmp/twgps.git
    cd twgps
    
  2. 開発モードでの起動: ホットリロードが有効な開発用ウィンドウを立ち上げます。
    wails dev
    # または mise を使用する場合:
    mise run dev
    
  3. 本番用ビルドの生成: 実行中の OS に合わせた本番用バイナリをコンパイルします。
    wails build
    # または mise を使用する場合:
    mise run build
    

ライセンス

本プロジェクトは Apache License, Version 2.0 の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。