gpsdというgpsのデータを流してくれるプログラムがあるのだが、起動オプションに-G を付ければ、あらゆるネットワークインターフェースで受け付けしてくれるはずだった。
しかし、Debian 7あたりから外部から接続できなくなった。
どうやら systemd が余計な事をしてくれていて、ローカルホスト以外を受け付けないように邪魔しているようなのだが、新しく導入されたシステムなので解決方法が分からなかった。
今日、検索してやっと解決方法を見つけた。
But we aren’t there yet. gpsd may be listening on all interfaces, but systemd’s hold on the socket means gpsd can’t hear anything on interfaces other than the loopback. We have to tell systemd to allow gpsd to hear other interfaces. We run
systemctl edit --full gpsd.socket
. Then we can edit it. After editing, the [Socket] stanza looks like so:
123456 [Socket]ListenStream=@RUNDIR/gpsd.sockListenStream=[::1]:2947# ListenStream=127.0.0.1:2947ListenStream=0.0.0.0:2947SocketMode=0600When you are done editing, systemctl does what it needs to do internally to preserve your changes from being over-written during upgrades. It also does the equivalent of a
systemctl daemon-reload
for you.We now restart both gpsd units like so:
1 <a href="https://www.freedesktop.org/software/systemd/man/systemctl.html#restart%20PATTERN%E2%80%A6">systemctl restart</a> gpsd.socket gpsd.service
こんなもんわかるかボケ!
これでやっとデスクトップマシンの地図表示プログラムで、サーバーからデータを取得してGPSの現在位置を表示できる。
自宅固定だからほぼ動かないけど、測定誤差でふらふら動くから結構おもしろい。