slm*_*slm 13 linux eject audio-cd data-cd
直到 Fedora 14,我才成功使用cdctl
启用/禁用笔记本电脑 (Thinkpad T410) 上的 CD/DVD 弹出按钮。可悲的是它现在已经停止工作。
我已经咨询了这两个问题中讨论的方法:
其中没有一个对我有用。所以我回头cdctl
看看我们是否无法修复它的坏处,因为它已经工作了很长时间。
所以从cdctl
开关开始,我注意到大多数事情似乎都很好。
这些东西有效。
弹出驱动器
$ cdctl -e
Run Code Online (Sandbox Code Playgroud)
列出能力
$ 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
Run Code Online (Sandbox Code Playgroud)
根据该列表cdctl
甚至认为它可以启用/禁用弹出按钮。
Run Code Online (Sandbox Code Playgroud)Can disable eject : 1
所以我继续调试这个问题。
所以我想,您做一个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 +++
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它似乎cdctl
认为它正在禁用按钮。
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
Run Code Online (Sandbox Code Playgroud)
注意:如果我理解正确,返回 0 表示成功。
在这里引起我注意的一件事cdctl
是尝试与之交互的设备列表。所以我想“如果我尝试使用这些设备会怎样eject
”?
我多年前使用的其他命令之一是eject
与 CD/DVD 设备交互的命令。我注意到这个命令现在也有一个类似的命名开关:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
所以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
Run Code Online (Sandbox Code Playgroud)
所以现在我想知道 UDEV 或其他东西是否可能会阻止或获取设备的所有权?
想法?
slm*_*slm 11
感谢@Affix 的回答给了我正确的前进方向,我已经找到了解决问题的方法。
如您所料,问题肯定是由 UDEV 引起的。问题是与 cdrom 驱动器相关的大多数 UDEV 文件中的这一行。
在 Fedora 19 上有以下文件,/usr/lib/udev/rules.d/60-cdrom_id.rules
. 在这个文件中的下面一行是为 CD/DVD 设备选择弹出按钮。
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作来解决此问题并禁用 UDEV 选择弹出按钮的功能:
制作文件的副本 60-cdrom_id.rules
$ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
Run Code Online (Sandbox Code Playgroud)编辑此文件的复制版本并注释掉包含字符串DISK_EJECT_REQUEST
.
$ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
Run Code Online (Sandbox Code Playgroud)保存文件,更改应该立即引起注意!
上述解决方案解决了eject
和的问题cdctl
。所以现在以下命令按预期工作:
锁定驱动器
$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button
-or-
$ cdctl -o1
Run Code Online (Sandbox Code Playgroud)
解锁驱动器
$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button
-or-
$ cdctl -o0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5406 次 |
最近记录: |