【问题标题】:Why my CGI Script can't access to ttyUSB0?为什么我的 CGI 脚本无法访问 ttyUSB0?
【发布时间】:2021-09-21 14:32:36
【问题描述】:

我有一个 C 语言的 CGI 脚本,它在我的 Raspberry pi 中打开串行端口 ttyUSB0,在我的设备上发送数据并得到它的响应。

当我在终端中手动启动该脚本时,该脚本可以正确执行,但我的网页无法访问该端口来打开它。

我的代码:

int main (void) {

  printf("Content-type: text/html\n\n");

  const int fd = open ("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_SYNC);

  if (fd == -1)
  {
        printf ("error %d opening %s: %s", errno, "ttyUSB0", strerror (errno));
        return 0;
  }

网页中的响应:“error 13 opening ttyUSB0: Permission denied

在命令“id -Gn pi”的输出下方: pi adm tty uucp dialout cdrom sudo 音频 视频 plugdev 游戏 用户输入 netdev spi i2c gpio lpadmin

谢谢。

【问题讨论】:

  • "Manual" 程序的执行是从 shell 作为拥有 tty 设备的组中的用户执行的,例如拨出组。作为 CGI 脚本执行具有不同的进程所有者,该进程所有者不在拥有 tty 设备的组中。简单而正确的解决方案是将该进程用户添加到 dialout 组。
  • 我正在阅读一些问题,例如解决方案是像您的目的一样在组中添加拨出但使用命令后:“sudo usermod -a -G dialout pi”我的问题不是固定的。你有什么想法吗?
  • 您如何验证 CGI 脚本的进程所有者是谁?
  • 只需在论坛的不同主题中搜索并使用 ls -l /ttyUSB0 被群组拨出使用。然后,如果我使用命令:“top”并且我发出请求,apache 似乎与用户 www-data 一起执行,所以有些人要求执行命令“sudo adduser www-data dialout”,但这并没有解决我的问题。你能帮我吗?
  • 我的问题已通过命令 sudo adduser www-data dialout 解决并重新启动系统抱歉浪费了时间。

标签: linux apache raspberry-pi serial-port cgi


【解决方案1】:

下面的命令解决了我的问题:

sudo adduser www-data dialout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2011-01-31
    • 2010-11-16
    • 2015-01-11
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多