在 Linux 应用程序中通过 ioctl 对 wifi 适配器进行非 root 访问 - 如何授予?

在 Linux 应用程序中通过 ioctl 对 wifi 适配器进行非 root 访问 - 如何授予?

我正在尝试在 Odroid 板上的 Ubuntu 20.04 中调试 Qt5 c 应用程序。该应用程序通过 ioctl() 与 wifi 适配器通信,例如:

int fd = iw_sockets_open();
struct ifreq ifreq;
//ifreq.ifr_name holds "wlxe894f617ebe6" from "iw dev" output
if (ioctl(fd, SIOCSIFFLAGS, &ifreq) == -1) {
  return FALSE;
}

问题是它仅在作为 sudo 运行时才有效。当我从 QtCreator 运行它时,它在上面的 ioctl() 调用中失败,返回 -1,perror() 说“不允许操作”。从 sudo 下它可以正常通过并进一步工作。

lsusb 将适配器命名为:

Bus 001 Device 012: ID 148f:5572 Ralink Technology, Corp. RT5572 Wireless Adapter

iw dev 给出:

phy#0
        Interface wlxe894f617ebe6
                ifindex 3
                wdev 0x1
                addr e8:94:f6:17:eb:e6
                type managed
                txpower 20.00 dBm

另外,适配器似乎在/dev/目录中没有相应的文件。在这种情况下如何授予用户对 ioctl() 的访问权限?

我尝试像其他 USB 设备一样授予访问权限,添加行

SUBSYSTEM=="usb", ATTRS{idVendor}=="148f", ATTRS{idProduct}=="5572", MODE="0666"

到/etc/udev/rules.d/50-myusb.rules,但没有结果。我想我应该将用户添加到某个组,例如“wlan”或类似组,但找不到任何可能与此处相关的组名称。

相关内容