在使用 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
好的,
libcdio
经过O_RDWR
一位O_RDONLY
. 更新后,突然一切正常。不过还是谢谢你的提示!