Até o Fedora 14 eu estava usando com sucesso cdctl
para ativar / desativar o botão de ejeção de CD / DVD no meu laptop (Thinkpad T410). Infelizmente, parou de funcionar agora.
Eu consultei os métodos discutidos nestas duas perguntas:
Nada disso funcionou para mim. Então eu volto para cdctl
para ver se não podemos consertar o que está quebrado, já que funcionou por tanto tempo.
Depurando o problema
Então, começando com cdctl
, percebo que a maioria das coisas parece funcionar bem.
Exemplos
Essas coisas funcionam.
ejeta a unidade
$ cdctl -e
recursos de lista
$ 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
De acordo com essa lista, cdctl
acha que pode ativar / desativar o botão de ejeção.
Can disable eject : 1
Então continuo com a depuração do problema.
Depurando cdctl
Então, imagino que vamos fazer um strace
on cdctl
para ver se isso pode esclarecer o que está acontecendo.
$ 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
acha que está desativando o botão.
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
NOTA: Se bem entendi, o retorno de um 0 significa que foi bem-sucedido.
Uma coisa que chamou minha atenção foi a lista de dispositivos com os quais cdctl
está tentando interagir. Então eu pensei "e se eu experimentar esses dispositivos com eject
"?
comando de ejecção
Um dos outros comandos que usei anos atrás foi o comando eject
para interagir com o dispositivo de CD / DVD. Notei que este comando também agora tem um switch com nome similar:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
Exemplo
$ 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
Portanto, eject
também acha que está desativando o botão, mas também não é. Usando strace
, vejo as mesmas chamadas de 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
Então, agora estou me perguntando se a UDEV ou alguma outra coisa está bloqueando ou apropriando-se do dispositivo?
Pensamentos?