Я надеюсь, что кто-то на этом форуме захочет помочь мне получить некоторые GPS на базе USB для работы с gpsd на Ubuntu 20.04.2 LTS. У нас с другом такая же проблема с двумя разными моделями GPS на свежих установках Ubuntu. После подключения GPS-устройств к нашим системам, устройства доступны как tty-устройства, но gpsd не имеет их в списке устройств, а cgps выводит сообщение об истечении времени. Мы используем gpsd версии 3.20.
Мы можем заставить gpsd работать, вручную остановив сокет gpsd и вручную запустив gpsd с помощью этих команд:
sudo systemctl stop gpsd.socket
gpsd -N -D3 /dev/ttyUSB0 (on my friend’s system)
or
gpsd -N -D3 /dev/ttyACM0 (on my system)
Я IT-специалист на пенсии с приличным опытом работы в Windows и небольшим опытом работы в Linux. Я могу следовать инструкциям, если кто-то может указать мне, что делать дальше, чтобы выяснить, почему gpsd не работает автоматически.
Я исследовал эту проблему в списке рассылки пользователей gpsd и увидел несколько сообщений, которые указывают на то, что у других людей были подобные проблемы на Ubuntu. Типичным ответом в списке рассылки gpsd является то, что они считают, что проблема связана с systemd, и умывают руки. Я надеюсь, что кто-то на этом форуме может быть более полезным, чем просто сказать: "Изучите, как работает systemd, и заставьте его работать."
Подробнее:
Мой GPS - это VK-162 G-Mouse USB GPS Dongle. Его ID производителя - 1546
, а ID продукта - 01a7
. Ubuntu отображает мой GPS как устройство ttyACM0.
GPS NEO-7M-0-00 моего друга имеет ID производителя 10c4
и productid ea60
. Ubuntu сопоставляет GPS моего друга с ttyUSB0.
Согласно lsusb
, Ubuntu распознает мой GPS как устройство u-blox 7:
Bus 002 Device 008: ID 1546:01a7 U-Blox AG [u-blox 7]
lsusb
показывает, что Ubuntu распознает GPS моего друга как устройство CP210x UART Bridge:
Bus 002 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
Вот правила udev для двух GPS в /lib/udev/rules.d/60-gpsd. правила:
u-blox AG, u-blox 7 [linux module: cdc_acm]
ATTRS{idVendor}=="1546", ATTRS{idProduct}=="01a7", SYMLINK+="gps%n", TAG+="systemd", ENV{SYSTEMD_WANTS}="gpsdctl@%k.service"
Cygnal Integrated Products, Inc. CP210x Composite Device (Used by Holux m241 and Wintec grays2 wbt-201) [linux module: cp210x]
ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="gps%n", TAG+="systemd", ENV{SYSTEMD_WANTS}="gpsdctl@%k.service"
Включение питания моей системы Ubuntu с отключенным GPS и запуск systemctl показывает одну запись, связанную с gpsd:
gpsd.socket loaded active listening GPS (Global Positioning System) Daemon Sockets
После подключения GPS к моей системе, systemctl находит эти процессы, связанные с gpsd:
gpsdctl@ttyACM0.service loaded active exited Manage ttyACM0 for GPS daemon
system-gpsdctl.slice loaded active active system gpsdctl.slice
gpsd.socket loaded active listening GPS (Global Positioning System) Daemon Sockets
Мы можем заставить gpsd работать, остановив сокет gpsd и запустив gpsd вручную этими командами:
sudo systemctl stop gpsd.socket
gpsd -N -D3 /dev/ttyUSB0 (on my friend’s system)
или
gpsd -N -D3 /dev/ttyACM0 (on my system)
После остановки сокета и запуска gpsd вручную, gpspipe -w показывает устройства в списке устройств gpsd. Например, в моей системе:
al@Al-HP-Linux:~$ gpspipe -w
{"class":"VERSION","release":"3.20","rev":"3.20","proto_major":3,"proto_minor":14}
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/ttyACM0","activated":"2021-05-16T17:48:25.283Z","native":0,"bps":9600,"parity":"N","stopbits":1,"cycle":1.00}]}
{"class":"WATCH","enable":true,"json":true,"nmea":false,"raw":0,"scaled":false,"timing":false,"split24":false,"pps":false}
{"class":"DEVICE","path":"/dev/ttyACM0","driver":"NMEA0183","activated":"2021-05-16T17:48:26.082Z","native":0,"bps":9600,"parity":"N","stopbits":1,"cycle":1.00}
Мой логин linux находится в группах dialout и tty.
На случай, если у кого-то еще возникнет такая же проблема с GPS, я выкладываю решение, которое заставило мой GPS работать на моей системе Ubuntu и на системе Ubuntu моего друга, без необходимости запускать ручные команды после перезапуска Ubuntu.
Я могу перезагрузить свою систему с подключенным GPS, и gpsd просто работает. Я могу отключить GPS и подключить другой GPS (или наоборот), система обнаружит изменения, и gpsd будет использовать новый GPS.
Решение заключалось в добавлении некоторых записей в конфигурационный файл /etc/default/gpsd. Вот записи, которые я добавил в /etc/default/gpsd:
START_DAEMON="true"
USBAUTO="true"
Если в вашем файле /etc/default/gpsd есть строка DEVICES, как показано ниже, вы должны изменить строку DEVICES на пустую строку. То есть, если у вас есть что-то вроде этого: DEVICES="/dev/ttyUSB0". Измените ее на следующую: DEVICES=""
Обратите внимание, что вы должны редактировать файл /etc/default/gpsd от имени root, поэтому запустите редактор с помощью sudo. Не уверен, что это было необходимо, но после сохранения изменений я перезагрузил свою систему Ubuntu.
Надеюсь, эта информация поможет другим пользователям GPS.