Hasta Fedora 14 estaba usando cdctl
con éxito para habilitar / deshabilitar el botón de expulsión de CD / DVD en mi computadora portátil (Thinkpad T410). Lamentablemente ha dejado de funcionar ahora.
He consultado los métodos discutidos en estas 2 preguntas:
- desactivar el botón cd / dvd en la computadora portátil linux (ubuntu)
- Deshabilite el botón de expulsión de DVD en un Thinkpad con Linux
Ninguno de los cuales ha funcionado para mí. Así que vuelvo a cdctl
ver si no podemos arreglar lo que está roto, ya que ha funcionado durante tanto tiempo.
Depuración del problema
Entonces, comenzando con los cdctl
interruptores, noto que la mayoría de las cosas parecen funcionar bien.
Ejemplos
Estas cosas funcionan.
expulsa el disco
$ cdctl -e
lista de capacidades
$ 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
Según esa lista, cdctl
incluso piensa que puede habilitar / deshabilitar el botón de expulsión.
Can disable eject : 1
Así que continúo con la depuración del problema.
Depuración de cdctl
Así figura que le permite hacer un strace
sobre cdctl
para ver si puede arrojar alguna luz sobre lo que está pasando.
$ 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 +++
Curiosamente parece que cdctl
piensa que está desactivando el botón.
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
NOTA: Si entiendo este derecho, el retorno de un 0 significa que fue exitoso.
Una cosa que me llamó la atención aquí fue la lista de dispositivos con los que cdctl
intenta interactuar. Entonces pensé "¿y si pruebo estos dispositivos con eject
"?
comando de expulsión
Uno de los otros comandos que solía usar hace años era el eject
comando para interactuar con el dispositivo de CD / DVD. Noté que este comando también ahora tiene un interruptor con nombre similar:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
Ejemplo
$ 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
También eject
piensa que está deshabilitando el botón, pero tampoco lo está. Usando strace
aquí veo las mismas llamadas al sistema:
$ 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
Entonces, ahora me pregunto si UDEV o algo más está potencialmente bloqueando o tomando posesión del dispositivo.
Pensamientos?