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?
Respuestas:
Gracias a la respuesta de @ Affix que me dio la dirección correcta para dirigirme, descubrí la solución al problema.
El problema definitivamente es causado por UDEV como lo has adivinado. El problema es esta línea que se encuentra en la mayoría de los archivos UDEV relacionados con la unidad de CDROM.
Ejemplo
En Fedora 19 se encuentra el siguiente archivo,
/usr/lib/udev/rules.d/60-cdrom_id.rules
. En este archivo se encuentra la siguiente línea que está cooptando el botón de expulsión para dispositivos CD / DVD.Puede solucionar el problema y deshabilitar la capacidad de UDEV para cooptar el botón de expulsión haciendo lo siguiente:
Haga una copia del archivo.
60-cdrom_id.rules
Editar esta versión copiada del archivo y comentar la línea que contiene la cadena,
DISK_EJECT_REQUEST
.¡Guarde el archivo y el cambio debería notarse de inmediato!
La solución anterior soluciona el problema para ambos
eject
ycdctl
. Entonces, los siguientes comandos funcionan como se esperaba:bloquear el disco
desbloquear el disco
fuente
/lib/
regla. Lo copié/etc/udev/rules.d/
e hice mi propia versión principal.udev
anula el comportamiento esperado en otras partes de Linux ... Pero ahora puedo dejar que KDE maneje la expulsión deliberada y deje de preocuparse por los accidentes.Agrega la línea:
a las reglas de CD ROM udev. Esto te permitirá bloquear con:
fuente
udev
? etc. - mala respuesta.