Linux

如何禁用我的 CD/DVD 驅動器的按鈕?

  • July 22, 2018

在 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 或其他東西是否可能阻止或獲取設備的所有權?

想法?

感謝@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/.
  1. 編輯該文件的複製版本並註釋掉包含字元串DISK_EJECT_REQUEST.
$ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
  1. 保存文件,更改應該立即可見!

上述解決方案解決了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

引用自:https://unix.stackexchange.com/questions/104791