Вопрос или проблема
Я пытался и пытался заставить GPSD получать данные NMEA с моего устройства /dev/pts/2, но у меня это не получается. Я пытался изменить разрешения на 777, но это не помогло. Я могу вывести содержимое файла /dev/pts/2 и вижу данные NMEA, как на ладони, но GPSD продолжает говорить, что у него нет разрешения. Я пытался изменить файл /etc/apparmor.d/usr.sbin.gpsd. Я добавил
/dev/pts[0-9]* rw,
# стандартные пути для передачи GPS-данных в chrony
/{,var/}run/chrony.tty{,S,USB,AMA,pts}[0-9]*.sock rw,
Я перезагрузил apparmor, но ошибки остались теми же.
Я добавил своего пользователя в группу tty, а также пользователя root. Никакой помощи. Ошибки происходят как у моего локального пользователя, так и у пользователя root.
Спасибо за любую помощь. Я использую Ubuntu 22.04 на настольном компьютере.
gpsd:INFO: stashing device /dev/pts/2 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/2'
gpsd:ERROR: SER: device open of /dev/pts/2 failed: Permission denied - retrying read-only
gpsd:ERROR: SER: read-only device open of /dev/pts/2 failed: Permission denied
gpsd:ERROR: initial GPS device /dev/pts/2 open failed
gpsd:ERROR: can't run with neither control socket nor devices open
Ответ или решение
Проблема с доступом GPSD к /dev/pts/2 может возникать по нескольким причинам, и, как вы указали, попытки изменения прав доступа и конфигураций в AppArmor не привели к желаемому результату. Давайте рассмотрим ряд возможных решений, которые помогут устранить эту проблему.
-
Проверка прав доступа к устройству:
Убедитесь, что права на файл /dev/pts/2 установлены корректно. Вы можете использовать командуls -l /dev/pts/2
для проверки текущих прав. Если вы уже пробовали 777 (что дает полный доступ всем), попробуйте установить права для конкретной группы:sudo chown :tty /dev/pts/2 sudo chmod 660 /dev/pts/2
Затем убедитесь, что ваш пользователь добавлен в группу tty:
sudo usermod -aG tty $(whoami)
После этого выполните команду
newgrp tty
, чтобы обновить группы для текущей сессии. -
Конфигурация AppArmor:
Вы уже внесли изменения в конфигурацию AppArmor по GPSD. Однако убедитесь, что путь записан корректно. Для устройства, находящегося в/dev/pts
, ваши записи должны выглядеть следующим образом:/dev/pts/[0-9]* rw,
После изменения конфигурации убедитесь, что вы перезапустили AppArmor:
sudo systemctl restart apparmor
Проверить статус AppArmor можно с помощью:
sudo aa-status
Убедитесь, что ваш профиль для GPSD не нарушается и активен.
-
Запуск GPSD с правами суперпользователя:
Попробуйте запустить GPSD от имени пользователя root, чтобы проверить, не связана ли проблема с правами. Используйте следующую команду:sudo gpsd /dev/pts/2 -F /var/run/gpsd.sock
Обратите внимание на возможные ошибки, которые могут выводиться в терминале.
-
Логи и отладка:
Загляните в системные логи, чтобы получить больше информации о том, что происходит. Это можно сделать с помощью:journalctl -xe | grep gpsd
Логи могут дать подсказки о том, что может быть неправильно настроено.
-
Проверка на наличие конфликтов:
Убедитесь, что нет других процессов, которые могут блокировать доступ к устройству. Вы можете использоватьlsof /dev/pts/2
для проверки, какие процессы используют это устройство. -
Перезапуск системы:
Если никакие из вышеперечисленных шагов не помогли, возможно, будет целесообразно полностью перезагрузить систему, чтобы убедиться, что все изменения применены корректно.
Если после выполнения всех этих шагов проблема все еще сохраняется, возможно, стоит рассмотреть возможность использования другого интерфейса, так как /dev/pts/ предназначен для терминальных сессий и может вести себя нестабильно при использовании с GPSD. Возможно, вам стоит попробовать подключить GPS через другой интерфейс (например, USB или последовательный порт), если это возможно.