直到Fedora 14为止,我一直成功cdctl
用于启用/禁用笔记本电脑(Thinkpad T410)上的CD / DVD弹出按钮。遗憾的是,它现在已停止工作。
我已经咨询了以下两个问题中讨论的方法:
没有一个对我有用。因此,我回过头来cdctl
看看我们是否无法解决它的问题,因为它已经工作了很长时间。
调试问题
因此,从cdctl
开关开始,我注意到大多数事情似乎都可以正常工作。
例子
这些东西起作用。
弹出驱动器
$ cdctl -e
列表功能
$ cdctl -k
Tray close : 1
Tray open : 1
Can disable eject : 1
Selectable spin speed : 1
Is a jukebox : 0
Is multisession capable: 1
Can read the MCN (UPC) : 1
Can report media change: 1
Can play audio discs : 1
Can do a hard reset : 1
Can report drive status: 1
根据该列表,cdctl
甚至认为它可以启用/禁用弹出按钮。
Can disable eject : 1
因此,我继续调试该问题。
调试cdctl
因此,我想让我们继续进行strace
下去cdctl
,看看它是否可以阐明正在发生的事情。
$ strace cdctl -o1
...
brk(0) = 0x1371000
open("/dev/cdrom", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/dev/cd", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/dev/scd0", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/dev/sr0", O_RDONLY|O_NONBLOCK) = 3
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++
奇怪的是,似乎cdctl
认为它正在禁用该按钮。
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
注意:如果我了解此权利,则返回0表示成功。
在此引起我注意的一件事cdctl
是尝试与之交互的设备列表。所以我想“如果我尝试这些设备会eject
怎样?”
弹出命令
我几年前使用的其他命令之一是eject
与CD / DVD设备进行交互的命令。我注意到该命令现在也具有类似的命名开关:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
例
$ eject -i 1 /dev/sr0
eject: CD-Drive may NOT be ejected with device button
$ eject -i 0 /dev/sr0
eject: CD-Drive may be ejected with device button
因此eject
也认为这是禁用按钮,但事实并非如此。用strace
在这里我看到了同样的系统调用:
$ strace eject -i 1 /dev/sr0 |& grep ioctl
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace eject -i 0 /dev/sr0 |& grep ioctl
ioctl(3, CDROM_LOCKDOOR, 0) = 0
所以现在我想知道UDEV或其他东西是否可能阻止或获取设备所有权?
有什么想法吗?