如何在启动时自动启动 GPSD?

如何在启动时自动启动 GPSD?

我正在尝试弄清楚是什么阻止了gpsd通过 USB 自动连接到外部 GPS BU 353 加密狗并接收数据。我的两台笔记本电脑(使用不同的硬件)都遇到了同样的问题,所以这纯粹是一个软件配置问题。

我已经设法gpsd使用以下步骤手动开始工作,但每次关闭机器时,我都必须再次执行这些步骤。

  1. sudo killall gpsd

  2. 删除gpsd可能遗留的所有插座:

    sudo rm /var/run/gpsd.sock

  3. 检查设备路径:

    dmesg - which shows PLU353 
    
  4. 确保没有其他程序正在使用该设备。没有列出

    lsof -n | grep /dev/ttyUSB0
    
  5. 手动启动gpsd

    sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
    
  6. 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 现在可以正常工作。

相关内容