Jusqu'à Fedora 14, j'utilisais avec succès cdctl
pour activer / désactiver le bouton d'éjection du CD / DVD sur mon ordinateur portable (Thinkpad T410). Malheureusement, il a cessé de fonctionner maintenant.
J'ai consulté les méthodes discutées dans ces 2 questions:
- désactiver le bouton cd / dvd sur un ordinateur portable linux (ubuntu)
- Désactivez le bouton d'éjection du DVD sur un Thinkpad sous Linux
Aucun d'entre eux n'a fonctionné pour moi. Je reviens donc cdctl
pour voir si nous ne pouvons pas corriger ce qui ne fonctionne pas, car cela a fonctionné si longtemps.
Débogage du problème
Donc, en commençant par les cdctl
commutateurs, je remarque que la plupart des choses semblent bien fonctionner.
Exemples
Ces choses fonctionnent.
éjecte le lecteur
$ cdctl -e
liste des capacités
$ 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
Selon cette liste, cdctl
pense même qu'il peut activer / désactiver le bouton d'éjection.
Can disable eject : 1
Je continue donc avec le débogage du problème.
Débogage de cdctl
Je pense donc que nous allons faire un strace
essai cdctl
pour voir si cela peut éclairer ce qui se passe.
$ 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 +++
Curieusement, il semble cdctl
que cela désactive le bouton.
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
REMARQUE: si je comprends bien, le retour d'un 0 signifie qu'il a réussi.
Une chose qui a attiré mon attention ici est la liste des appareils qui cdctl
tentent d'interagir avec. J'ai donc pensé "et si j'essaye ces appareils avec eject
"?
commande d'éjection
L'une des autres commandes que j'utilisais il y a des années était la eject
commande pour interagir avec le périphérique CD / DVD. J'ai remarqué que cette commande a également maintenant un commutateur nommé similaire:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
Exemple
$ 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
Pense eject
aussi à désactiver le bouton, mais ce n'est pas le cas non plus. En utilisant strace
ici, je vois les mêmes appels système:
$ 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
Alors maintenant, je me demande si UDEV ou quelque chose d'autre peut bloquer ou s'approprier l'appareil?
Pensées?