如何设置 ioctl CDROM_SEND_PACKET 命令运行所需的权限?

如何设置 ioctl CDROM_SEND_PACKET 命令运行所需的权限?

在使用 CDIO 库向 USB CD-ROM 驱动器发出弹出命令时,我遇到了由于缺乏权限而导致的错误。我总是收到这样的错误消息:

INFO: ioctl CDROM_SEND_PACKET for command PREVENT ALLOW MEDIUM REMOVAL (0x1e) failed: Operation not permitted

ioctl调用是我调用的应用程序的一部分,cdda-player如下所示:

cdda-player -ev /dev/sr0

查看之后源代码libcdio,我发现这行代码很麻烦:

int i_rc = ioctl (p_env->gen.fd, CDROM_SEND_PACKET, &cgc);

当我以 root 身份运行代码(使用sudo)时,一切正常。以下是我的 CD-ROM 驱动器的权限:

pi@autoradio:/import/valen/autoradio/libcdio-master $ ls -al /dev/sr0 
brw-rw----+ 1 root cdrom 11, 0 Jul  5 22:42 /dev/sr0

pi@autoradio:/import/valen/autoradio/libcdio-master $ ls -al /dev/sg0 
crw-rw----+ 1 root cdrom 21, 0 Jul  5 22:38 /dev/sg0

pi@autoradio:~ $ getfacl /dev/sr0 
getfacl: Removing leading '/' from absolute path names 
# file: dev/sr0 
# owner: root 
# group: cdrom 
user::rw- 
user:pi:rw- 
group::rw- 
mask::rw- 
other::---

用户pi是组的一部分cdrom。不过,标准eject实用程序确实有效。

现在:我必须设置哪些权限才能以普通用户身份进行弹出操作?谢谢。

更新:这是我的内核版本:

pi@autoradio:/import/valen/autoradio/libcdio-master $ uname -a 
Linux autoradio 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux 

答案1

好吧,经过一位维护者的提示libcdio,我发现我安装的版本已经过时,并且包含一个基于O_RDWRvs.的错误使用的错误O_RDONLY。更新后,突然一切正常。不过还是谢谢你的提示!

相关内容