Вплоть до Fedora 14 я успешно использовал cdctlдля включения / выключения кнопку извлечения CD / DVD на моем ноутбуке (Thinkpad T410). К сожалению, он перестал работать сейчас.
Я ознакомился с методами, обсуждаемыми в этих двух вопросах:
- отключить кнопку CD / DVD на ноутбуке Linux (Ubuntu)
- Отключите кнопку извлечения DVD на Thinkpad под управлением Linux
Ни один из которых не работал для меня. Поэтому я возвращаюсь к тому, 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 или что-то еще потенциально блокирует или приобретает устройство?
Мысли?