![如何在启动时自动启动 GPSD?](https://linux22.com/image/1164237/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%20GPSD%EF%BC%9F.png)
我正在尝试弄清楚是什么阻止了gpsd
通过 USB 自动连接到外部 GPS BU 353 加密狗并接收数据。我的两台笔记本电脑(使用不同的硬件)都遇到了同样的问题,所以这纯粹是一个软件配置问题。
我已经设法gpsd
使用以下步骤手动开始工作,但每次关闭机器时,我都必须再次执行这些步骤。
sudo killall gpsd
删除
gpsd
可能遗留的所有插座:sudo rm /var/run/gpsd.sock
检查设备路径:
dmesg - which shows PLU353
确保没有其他程序正在使用该设备。没有列出
lsof -n | grep /dev/ttyUSB0
手动启动
gpsd
:sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
xgps
看到 GPS 输出 - 所以这是可行的
我最好的猜测是,gpsd
需要加入一个组或被授予额外的权限,或者,这是配置问题udev
。但我在黑暗中摸索,只是胡乱猜测。
答案1
你是对的 - 这是一个群组成员问题。首先,看看谁拥有该设备:
ls -l /dev/ttyUSB0
在我的系统上,我没有,所以/dev/ttyUSB0
我将使用/dev/ttyS0
walt@bat:~(0)$ ls -l /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 Feb 23 08:19 /dev/ttyS0
walt@bat:~(0)$
该命令的输出ls
显示它归所有root:dialout
,并且允许组访问该设备。
使用以下命令将您的用户添加到组dialout
(或适合您的系统的任何组):
sudo adduser $USER dialout
然后,为了使该组成员身份生效,请注销/登录,或者newgrp dialout
以该组成员身份启动 shell。
使用 检查您的群组成员身份/usr/bin/id
。
答案2
- 在防火墙中打开 TCP 端口 2947(如果您希望其他网络客户端访问)
- 在
terminal
... sudo adduser $USER dialout
# 将用户添加到组 dialout- 注销/登录以完成 adduser 命令
sudo -H gedit /etc/default/gpsd
# 编辑 gpsd 设置文件
# 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/ttyUSB0"
DEVICES=""
# Other options you want to pass to gpsd
GPSD_OPTIONS=""
- 保存文件并退出 gedit
sudo systemctl restart gpsd
# 重启 gpsd
gpsmon、cgps 和 xgps 现在可以正常工作。