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