Até o Fedora 14, eu estava usando cdctl
com sucesso para ativar / desativar o botão de ejeção de CD / DVD no meu laptop (Thinkpad T410). Infelizmente, ele parou de funcionar agora.
Consultei os métodos discutidos nestas 2 perguntas:
- desativar botão cd / dvd no laptop linux (ubuntu)
- Desative o botão de ejeção do DVD em um Thinkpad executando Linux
Nenhum dos quais funcionou para mim. Então, volto para cdctl
ver se não podemos consertar o que está quebrado, pois funcionou por tanto tempo.
Depurando o problema
Então, começando com os cdctl
switches, percebo que a maioria das coisas parece funcionar bem.
Exemplos
Essas coisas funcionam.
ejeta a unidade
$ cdctl -e
lista de recursos
$ 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
até pensa 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, vamos dar uma strace
olhada cdctl
para ver se ele pode lançar alguma luz sobre 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 cdctl
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 eu entendi direito, o retorno de um 0 significa que foi bem-sucedido.
Uma coisa que chamou minha atenção aqui foi a lista de dispositivos que cdctl
estão tentando interagir. Então pensei "e se eu experimentar esses dispositivos eject
"?
comando ejetar
Um dos outros comandos que eu costumava usar anos atrás era o eject
comando para interagir com o dispositivo de CD / DVD. Notei que este comando agora também possui um switch nomeado semelhante:
$ 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
Assim eject
também pensa que está desativando o botão, mas não é qualquer um. Usando strace
aqui, 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 o UDEV ou outra coisa está potencialmente bloqueando ou tomando posse do dispositivo?
Pensamentos?