You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Ubuntu与Firefox后/dev/ttyACM0端口访问报错求助

排查方向与解决方案

1. 检查Web服务器进程的用户权限

命令行运行PHP时用的是当前登录用户,但web服务器(如Apache的www-data、PHP-FPM的www-data)的运行用户可能没有访问/dev/ttyACM0的权限:

  • 查看web服务器运行用户:
    # Apache
    ps aux | grep apache2
    # PHP-FPM
    ps aux | grep php-fpm
    
  • 将该用户加入串口设备所属的dialout或tty组:
    sudo usermod -aG dialout www-data
    sudo usermod -aG tty www-data
    
  • 重启服务生效:
    sudo systemctl restart apache2
    # 若用PHP-FPM则执行
    sudo systemctl restart php8.2-fpm
    

2. 验证AppArmor限制

Ubuntu升级后AppArmor规则可能更新,限制了web服务器访问串口设备:

  • 查看AppArmor状态:
    sudo aa-status
    
  • 检查是否有针对Apache/PHP-FPM的profile限制了/dev/ttyACM0:
    sudo grep -r ttyACM0 /etc/apparmor.d/
    
  • 若存在限制,编辑对应profile文件(如/etc/apparmor.d/usr.sbin.apache2),添加允许规则:
    /dev/ttyACM0 rw,
    
  • 重新加载AppArmor:
    sudo systemctl reload apparmor
    

3. 确认PHP的open_basedir限制

Ubuntu升级后PHP配置可能被重置,open_basedir可能禁止访问/dev目录:

  • 查看当前open_basedir配置:
    php -i | grep open_basedir
    # 或通过web端phpinfo()输出搜索open_basedir
    
  • 若未包含/dev,修改php.ini或站点对应的php-fpm配置:
    open_basedir = /var/www/html/:/dev/:/tmp/
    
  • 重启PHP-FPM或Apache生效

4. 排除Firefox端干扰(低概率)

  • 用Firefox隐私窗口(Ctrl+Shift+P)访问,排除浏览器扩展干扰
  • 清空Firefox缓存与Cookie后重新测试

5. 调试上下文差异

在program.php中添加调试代码,对比命令行与web端的执行差异:

<?php
echo "当前运行用户: " . get_current_user() . "\n";
echo "ttyACM0权限: " . substr(sprintf('%o', fileperms('/dev/ttyACM0')), -4) . "\n";
echo "设备所属组: " . posix_getgrgid(filegroup('/dev/ttyACM0'))['name'] . "\n";
?>

通过Firefox访问该脚本,和命令行执行php program.php的输出对比,定位权限或上下文差异点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:16