Вплоть до 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 или что-то еще потенциально блокирует или приобретает устройство?
Мысли?