socatを使って偽のGPSデバイスを作成してください。

socatを使って偽のGPSデバイスを作成してください。

背景:

私は出力に間違った時間を置くことができるように偽のGPSデバイスを作成しようとしています。次に、設定したときに設定したシリアルソースから時間を取得することを確認しchronyてくださいgpsd。実際のGPS出力を使用している場合は、NTPがまだ時間を受信して​​いるかどうかは実際にはわかりません。

私が試したこと:

私はこれに従いました:https://stackoverflow.com/questions/52187/virtual-serial-port-for-linux

socat -d -d pty,raw,echo=0 pty,raw,echo=0

次に、次のように新しく変更されたフィードをパイピングしてみました。

cat /dev/ttyUSB0 | sed 's/11/15/g' > /dev/pts/5

(現在11:??UTCなので時間を変更する必要があります)

このように出力を見ればcat /dev/pts/6そうです。 (cat /dev/ttyUSB0交換後も同様)

今接続してみてください。

gpsd -D 5 -N -n /dev/pts/10

悪いニュースがあります:

$ sudo gpsd -D 5 -N -n /dev/pts/6
gpsd:INFO: launching (Version 3.22)
gpsd:IO: opening IPv4 socket
gpsd:IO: opening IPv6 socket
gpsd:INFO: listening on port gpsd
gpsd:PROG: NTP: shmat(15,0,0) succeeded, segment 0
gpsd:PROG: NTP: shmat(16,0,0) succeeded, segment 1
gpsd:PROG: NTP: shmat(17,0,0) succeeded, segment 2
gpsd:PROG: NTP: shmat(18,0,0) succeeded, segment 3
gpsd:PROG: NTP: shmat(19,0,0) succeeded, segment 4
gpsd:PROG: NTP: shmat(20,0,0) succeeded, segment 5
gpsd:PROG: NTP: shmat(21,0,0) succeeded, segment 6
gpsd:PROG: NTP: shmat(22,0,0) succeeded, segment 7
gpsd:PROG: successfully connected to the DBUS system bus
gpsd:PROG: shmget(0x47505344, 24512, 0666) for SHM export succeeded
gpsd:PROG: shmat() for SHM export succeeded, segment 23
gpsd:INFO: stashing device /dev/pts/6 at slot 0
gpsd:PROG: no /etc/gpsd/device-hook present, skipped running ACTIVATE hook
gpsd:INFO: SER: opening GPS data source type 6 at '/dev/pts/6'
gpsd:ERROR: SER: device open of /dev/pts/6 failed: Permission denied - retrying read-only
gpsd:ERROR: SER: read-only device open of /dev/pts/6 failed: Permission denied
gpsd:ERROR: initial GPS device /dev/pts/6 open failed
gpsd:ERROR: can't run with neither control socket nor devices open

万が一に備えて777編集しました。/dev/pts/5/dev/pts/6

これは実際に権限の問題ですか?それとも私の偽のGPSが足りないのでしょうか?


注:私が得ることができるアドバイスは何でも受け入れます。

  • GPSから時間を取得するより良い方法
  • 偽のGPSデバイスを作成するより良い方法
  • 上記の偽のGPSに私は何が間違っていたのですか?

コメントに応じて、以下が関連性があると思いますstrace

openat(AT_FDCWD, "/dev/pts/9", O_RDWR|O_NOCTTY|O_NONBLOCK) = -1 EACCES (Permission denied)                                                                                                                         
...
openat(AT_FDCWD, "/dev/pts/9", O_RDONLY|O_NOCTTY|O_NONBLOCK) = -1 EACCES (Permission denied)

1つは最初の試みで、2番目は読み取り専用で再試行することです。 root btwでgpsdを実行しています。sudo strace /usr/sbin/gpsd -D 5 -N -n /dev/pts/9

(/dev/pts#は設定されるたびに変わります。すべて一貫していないので申し訳ありません。)

ベストアンサー1

おすすめ記事