gpsd: ОШИБКА: невозможно привязать к локальному сокету

Я пытаюсь заставить GPS-устройство BU-353 работать на Ubuntu 16.04 LTS через GPSD. Когда я побежал cgps Я был застрахован с ошибкой тайм-аута.

Я предположил, что что-то не так с GPS, потому что я не использовался некоторое время, поэтому я побежал gpsmon, GPS получил исправление на нескольких сальтилях и приобрел мой лат и лонг.

Это привело меня к мысли, что со стороны GPSD что-то не так, поэтому я выполнил команду gpsd -N -D3 -F /dev/ttyUSB0, Меня встретили:

gpsd:ERROR: can't bind to local socket /dev/ttyUSB0
gpsd:ERROR: control socket create failed, netlib error -1

Даже когда я направил GPSD в разъем с gpsd -N -D3 -F /var/run/gpsd.sock /dev/ttyUSB0(Код снят со страницы устранения неполадок GPSD) Я все еще получал ту же ошибку.

Я понятия не имею, что происходит не так. Я очень новичок в GPSD и не очень комфортно с Ubuntu в целом, поэтому, возможно, я делаю простую ошибку. Любая помощь очень ценится.

2 ответа

BU-353 должен работать из коробки с gpsd. Но у тебя происходит несколько вещей,

  • первый элемент systemd отвечает за запуск экземпляра gpsd. Пока не выключится (sudo service gpsd stopВы будете преследовать свой хвост.
  • -F Создает управляющий сокет для команд добавления и удаления устройства. Это должен быть допустимый путь к вашей локальной файловой системе. Сомнительно, что ваш контрольный разъем может быть USB-GPS, который вы пытаетесь прочитать. Обычно контрольный разъем /var/run/gpsd.sock но может быть /tmp/anything
  • у вас должны быть права на запись, чтобы открыть управляющий сокет. sudo gpsd -N -D3 -F /var/run/gpsd.sock работает, пока gpsd -N -D3 -F /var/run/gpsd.sock потерпит неудачу, потому что непривилегированный пользователь не может записать в сокет управления. Точно так же, gpsd -N -D3 -F /tmp/when_pigs_fly должно сработать. (Но никто не будет работать, если gpsd уже запущен.)

Кроме того, вы должны рассмотреть дополнительные инструкции в /etc/default/gpsd Например,

# Default settings for the gpsd init script and the hotplug wrapper.

# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="true"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyACM0"

# Other options you want to pass to gpsd
GPSD_OPTIONS=""

Они введены в /lib/systemd/system/gpsd.service как EnvironmentFile

Первая строка бесполезна. systemd отвечает и не прекращает процесс. Это работает с -N флаг.

Я установил USBAUTO="true", потому что gpsd использует udev и горячее подключение довольно прозрачно. Подключите что-нибудь, что GPS, и это работает. Если это не gps, он занимается своим делом.

Но я делаю код в местоположении GPS, с которым я сейчас работаю. Потому что, остановив / перезапустив gpsd без перезагрузки, gpsd не будет "знать" о gps в /dev/ttyACM0 (или где бы то ни было) без события горячего подключения. Я кодирую в этом месте, чтобы не приходилось отключать / подключать gps каждый раз, когда я перезагружаю gpsd без перезагрузки.

Другой GPSD_OPTIONS= может включать -n-G или же -b по вашему усмотрению.

Кроме того, есть другие тестовые клиенты (xgps), которые являются более надежными для проверки вывода GPS, но это должно направить вас в правильном направлении.

Это разрешения - получите ту же ошибку на малине, которая просто добавляет / запускает команду с разрешениями sudo/root.

sudo gpsd / dev / ttyUSB0 -F /var/run/gpsd.sock

Другие вопросы по тегам