如何禁用CD / DVD驱动器的按钮?


13

直到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或其他东西是否可能阻止或获取设备所有权?

有什么想法吗?


1
我也有T410,经常在不想要的时候碰到CD驱动器弹出按钮。我很想知道这是否解决了。
WhiteHotLoveTiger 2013年

装入该驱动器中的磁盘后,该按钮是否仍然起作用?
Bonsi Scott

1
我感到您很痛苦,我遇到了同样的问题:锁定CD / DVD驱动器(防止弹出)。我找不到任何解决方案,最终将驱动器物理移除,因为它太烦人了,无法每天弹出十次驱动器。祝你好运…
Marco Marco

@Marco-查看答案!
slm

@WhiteHotLoveTiger-查看答案!
slm

Answers:


9

感谢@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"

您可以通过执行以下操作来解决此问题,并禁用UDEV启用弹出按钮的功能:

  1. 制作文件副本 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. 编辑此复制的文件版本,并注释掉包含字符串的行DISK_EJECT_REQUEST

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. 保存文件,更改应该立即引起注意!

上面的解决方案解决了eject和的问题cdctl。因此,以下命令现在可以正常运行:

锁定驱动器

$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button

-or-

$ cdctl -o1

解锁驱动器

$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button

-or-

$ cdctl -o0

@Marco-我很困惑你在问我什么,我没有改变/lib/规则。我将其复制到/etc/udev/rules.d/并制作了自己的优先版本。
slm

@Marco-NP,有足够的地方感到困惑和犯错8
slm

谢谢你 在当前的Debian稳定版(8 / Jessie)中确认。注释掉该行会立即删除我的能力,例如,在安装或播放蓝光时意外弹出蓝光。一定喜欢udev在Linux的其他地方如何覆盖预期的行为……但是现在,我可以让KDE处理故意弹出并停止担心事故了。
underscore_d

2

添加行:

DISC_EJECT_REQUEST

到udev规则的CD ROM。这将使您能够锁定:

eject -i

1
实际需要的线被除去,至少在我的情况下在Fedora 19
SLM

同样在这里。即使如此:将其添加到哪个文件?在其他哪几行之间?那是整行吗?当然,这在语法上无效udev吗?等等-答案很差。
underscore_d 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.