Até o Fedora 14, eu estava usando cdctlcom 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 cdctlver se não podemos consertar o que está quebrado, pois funcionou por tanto tempo.
Depurando o problema
Então, começando com os cdctlswitches, 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, cdctlaté 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 straceolhada cdctlpara 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 cdctlque 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 cdctlestã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 ejectcomando 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 ejecttambém pensa que está desativando o botão, mas não é qualquer um. Usando straceaqui, 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?