You need to enable JavaScript to run this app. 为什么C语言编写的CGI脚本无法访问树莓派的ttyUSB0串口
优惠活动
大模型
产品
解决方案
定价
更多

为什么C语言编写的CGI脚本无法访问树莓派的ttyUSB0串口

问题根源

手动执行脚本时使用的是pi用户,该用户已加入拥有串口设备访问权限的dialout用户组,因此运行正常。通过网页访问时,CGI脚本由Web服务(如Apache、Nginx配套CGI进程)的运行用户(通常为www-data)执行,该用户默认不在dialout组内,没有串口设备的读写权限,因此抛出权限不足错误。
你可以执行ls -l /dev/ttyUSB0确认串口权限,默认输出类似如下格式,说明仅root用户和dialout组用户拥有读写权限:

crw-rw---- 1 root dialout 188, 0  6月 10 12:00 /dev/ttyUSB0

解决步骤

  • 确认Web服务运行用户:以常见的Apache、Nginx为例,默认运行用户为www-data,可执行ps aux | grep apache 或 ps aux | grep nginx 查看输出第一列的用户信息确认。
  • 将Web服务运行用户加入dialout用户组,假设运行用户为www-data,执行命令:
    sudo usermod -a -G dialout www-data
    
  • 重启Web服务使权限配置生效:
    Apache环境执行:
    sudo systemctl restart apache2
    
    Nginx环境需要重启配套的CGI服务(如fcgiwrap),执行:
    sudo systemctl restart fcgiwrap
    
  • 临时验证方案:如果配置后仍报错,可先执行sudo chmod 666 /dev/ttyUSB0临时放开串口权限,再访问网页测试,若此时运行正常即可确认是用户组配置问题,按上述步骤配置即可。注意临时权限重启后会失效,不要作为长期解决方案使用。

内容的提问来源于stack exchange,提问作者Stimm4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 00:57:01