gpsd не работает автоматически после перезагрузки системы

Я надеюсь, что кто-то на этом форуме захочет помочь мне получить некоторые 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.

1
задан 22 May 2021 в 16:26

1 ответ

На случай, если у кого-то еще возникнет такая же проблема с 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.

1
ответ дан 28 July 2021 в 11:39

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

Похожие вопросы: