Вплоть до 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 или что-то еще потенциально блокирует или приобретает устройство?
Мысли?
Ответы:
Благодаря ответу @ Affix, который дал мне правильное направление, я нашел решение проблемы.
Проблема определенно вызвана UDEV, как вы уже догадались. Проблема заключается в этой строке, которая есть в большинстве файлов UDEV, связанных с диском cdrom.
пример
На Fedora 19 есть следующий файл
/usr/lib/udev/rules.d/60-cdrom_id.rules
. В этом файле находится следующая строка, в которой используется кнопка извлечения для CD / DVD-устройств.Вы можете обойти эту проблему и отключить способность UDEV кооптировать кнопку извлечения, выполнив следующие действия:
Сделайте копию файла
60-cdrom_id.rules
Редактировать эту скопировано версию файла и закомментируйте строку , содержащую строку,
DISK_EJECT_REQUEST
.Сохраните файл и изменения должны быть заметны немедленно!
Приведенное выше решение устраняет проблему как для, так
eject
и дляcdctl
. Теперь следующие команды работают как положено:заблокировать диск
разблокировать диск
источник
/lib/
правила. Я скопировал его/etc/udev/rules.d/
и сделал свою собственную основную версию.udev
переопределяет ожидаемое поведение в других местах в Linux ... Но теперь я могу позволить KDE справиться с преднамеренным выбросом и перестать беспокоиться об авариях.Добавьте строку:
на CD-ROM правила Udev. Это позволит вам заблокировать с помощью:
источник
udev
? и т.д. - плохой ответ.