无法关闭 CD 托盘

无法关闭 CD 托盘

我希望你可以帮助我。我有一个外置(超薄)蓝光驱动器,通过 USB 连接。每当我打开驱动器时,活动 LED 就会开始快速闪烁,并且我无法关闭驱动器。当我尝试关闭它时,托盘立即弹出。我必须断开 USB 才能关闭托盘。

这一定是软件相关的问题,因为我在Windows中没有这个问题。我有 Ubuntu 20.04.3 LTS。系统日志中有一行有趣的内容:

Sep 14 11:36:07 linux-gurke kernel: scsi 6:0:0:0: CD-ROM            PIONEER  BD-RW   BDR-UD04 1.11 PQ: 0 ANSI: 0
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Power-on or device reset occurred
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: [sr0] scsi3-mmc drive: 62x/62x writer dvd-ram cd/rw xa/form2 cdda tray
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Attached scsi CD-ROM sr0
Sep 14 11:36:07 linux-gurke kernel: sr 6:0:0:0: Attached scsi generic sg2 type 5
Sep 14 11:36:13 linux-gurke kernel: usb 6-1: USB disconnect, device number 4
Sep 14 11:36:13 linux-gurke kernel: scsi 6:0:0:0: rejecting I/O to dead device
Sep 14 11:36:13 linux-gurke systemd-udevd[8161]: sr0: Process 'cdrom_id --eject-media /dev/sr0' failed with exit code 1.

一旦我断开驱动器连接,最后一行“弹出媒体失败”就会被写入系统日志。很明显,某些进程试图在托盘打开时发出弹出/关闭托盘命令,这显然无法工作,因为它是薄型驱动器,您必须手动推动托盘才能关闭它。

一些信息:

$> lsusb -s 006:005 -t
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
    |__ Port 1: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
$> lsusb -s 006:005
Bus 006 Device 005: ID 18a5:0428 Verbatim, Ltd Verbatim 4K BD RW

请注意,该驱动器是逐字制造的,但在系统日志中,它显示为先锋驱动器。

我已经尝试过了,echo 0 > /proc/sys/dev/cdrom/autocloseecho 0 > /proc/sys/dev/cdrom/autoeject没有什么区别。你们能帮我找出问题所在吗?

答案1

我找到了制造麻烦的坏人。我注意到,每当活动 LED 快速闪烁时,systemd-udevd就会占用大约 3% 的 CPU 时间。这导致我在插入 CD 并按下弹出按钮时发出命令udevadm monitor -u(我用线条标记了按下按钮的时刻press):

$> udevadm monitor -u
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing

UDEV  [6294.187246] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
press
UDEV  [6319.266413] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.393838] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.481907] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.574832] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.672829] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.770823] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.868807] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6319.966829] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6320.064811] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [6320.163830] change   /devices/pci0000:00/0000:00:08.1/0000:2d:00.3/usb6/6-1/6-1:1.0/host6/target6:0:0/6:0:0:0/block/sr0 (block)

这些更改事件不断出现,直到我断开设备连接。经过一番研究后,我找到了该文件/lib/udev/rules.d/60-cdrom_id.rules,其中包含以下行:

# media eject button pressed
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

还记得系统日志中显示的错误吗?我将文件复制到/etc/udev/rules.d并将该行更改为

ENV{DISK_EJECT_REQUEST}=="?*", GOTO="cdrom_end"

这立即解决了我的问题,尽管它产生了另一个问题:按下弹出按钮时,没有任何反应。但发出弹出命令可以eject /dev/sr0正常工作,驱动器不会发疯。 (此命令以前与按硬件弹出按钮具有相同的效果!)

这可能是 udev 包内的一个错误,尽管我不能确定这一点。我的“修复”肯定只是一个解决方法 - 某些东西正在创建无穷无尽的 udev 事件源,这显然会导致托盘关闭后立即弹出媒体......

也许这对遇到这个问题的其他人有帮助!

相关内容