如何禁用我的 CD/DVD 驅動器的按鈕?
在 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 選擇彈出按鈕的功能:
- 製作文件的副本
60-cdrom_id.rules
$ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
- 編輯該文件的複製版本並註釋掉包含字元串
DISK_EJECT_REQUEST
.$ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
- 保存文件,更改應該立即可見!
上述解決方案解決了
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