![在 Linux 应用程序中通过 ioctl 对 wifi 适配器进行非 root 访问 - 如何授予?](https://linux22.com/image/225721/%E5%9C%A8%20Linux%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E9%80%9A%E8%BF%87%20ioctl%20%E5%AF%B9%20wifi%20%E9%80%82%E9%85%8D%E5%99%A8%E8%BF%9B%E8%A1%8C%E9%9D%9E%20root%20%E8%AE%BF%E9%97%AE%20-%20%E5%A6%82%E4%BD%95%E6%8E%88%E4%BA%88%EF%BC%9F.png)
我正在尝试在 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”或类似组,但找不到任何可能与此处相关的组名称。