/ dev / hidraw:读取权限

用户

要获得对/ dev / hidraw *的读取权限,我该怎么做?

我正在网上看到有关udev规则的内容,并在网上看到了,但是udev的世界对我来说就像是一块异乡,如果有某种更简单的解决方案,我只是将自己添加到一个花花公子的团队中...

(Ubuntu 13.10预览)

随意重提问题-我不太想知道“ hidraw”到底会发生什么。

编辑:

好的,所以,仅提供一些更多信息来阐明问题:我逐字逐句地执行了调用POSIXopen()方法的代码,并获得了errno权限不足的提示。cat以普通用户身份运行文件会导致权限不足错误,而以普通用户身份运行会su导致成功(尽管没有意义)cat操作。

编辑编辑:

根据要求,我将通过POSIX调用提供相关代码。它来自Signal11的HIDAPI库(函数hid_open_path)。我相信这段代码是正确的,因为它显然已经使用了很长时间了。errno在GDB中进行相关阅读的位置添加了一条注释

hid_device *dev = NULL;

hid_init();

dev = new_hid_device();

if (kernel_version == 0) {
    struct utsname name;
    int major, minor, release;
    int ret;
    uname(&name);
    ret = sscanf(name.release, "%d.%d.%d", &major, &minor, &release);
    if (ret == 3) {
        kernel_version = major << 16 | minor << 8 | release;
        //printf("Kernel Version: %d\n", kernel_version);
    }
    else {
        printf("Couldn't sscanf() version string %s\n", name.release);
    }
}

/* OPEN HERE */
dev->device_handle = open(path, O_RDWR);

// errno at this location is 13: insufficient permissions

/* If we have a good handle, return it. */
if (dev->device_handle > 0) {

    /* Get the report descriptor */
    int res, desc_size = 0;
    struct hidraw_report_descriptor rpt_desc;

    memset(&rpt_desc, 0x0, sizeof(rpt_desc));

    /* Get Report Descriptor Size */
    res = ioctl(dev->device_handle, HIDIOCGRDESCSIZE, &desc_size);
    if (res < 0)
        perror("HIDIOCGRDESCSIZE");


    /* Get Report Descriptor */
    rpt_desc.size = desc_size;
    res = ioctl(dev->device_handle, HIDIOCGRDESC, &rpt_desc);
    if (res < 0) {
        perror("HIDIOCGRDESC");
    } else {
        /* Determine if this device uses numbered reports. */
        dev->uses_numbered_reports =
            uses_numbered_reports(rpt_desc.value,
                                  rpt_desc.size);
    }

    return dev;
}
else {
    /* Unable to open any devices. */
    free(dev);
    return NULL;
}
用户

我放弃了尝试找出除udev规则以外的其他方法,而只是学习了一些有关udev的知识,并编写了一个固定的规则。将以下行放置在下方.rules文件(我称为mine 99-hidraw-permissions.rules)中/etc/udev/rules.d

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="plugdev"

基本上,这会将来自内核中的hidraw子系统的所有设备分配给该组plugdev,并将权限设置为r / wr / wr(分别针对root [默认所有者],plugdev和其他所有人)。将我自己添加到plugdev组中,一切都变得很花花公子。

不像我预期的那样融化。实际上udev的规则似乎很简单......我的意思是,他们看起来像他们可以,如果你正在处理个别产品ID和诸如此类的东西得到可笑,但他们似乎很该死驯服为他们做什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章