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?
Réponses:
Grâce à la réponse de @ Affix qui m'a donné la bonne direction à prendre, j'ai trouvé la solution au problème.
Le problème est définitivement causé par UDEV comme vous l'avez deviné. Le problème est cette ligne qui se trouve dans la plupart des fichiers UDEV liés au lecteur de cdrom.
Exemple
Sur Fedora 19 , il y a le fichier suivant,
/usr/lib/udev/rules.d/60-cdrom_id.rules
. Dans ce fichier se trouve la ligne suivante qui coopte le bouton d'éjection pour les périphériques CD / DVD.Vous pouvez contourner le problème et désactiver la capacité d'UDEV à coopter le bouton d'éjection en procédant comme suit:
Faites une copie du fichier
60-cdrom_id.rules
Modifier cette version du fichier copié et commentaires sur la ligne contenant la chaîne,
DISK_EJECT_REQUEST
.Enregistrez le fichier et le changement devrait être perceptible immédiatement!
La solution ci-dessus résout le problème pour
eject
etcdctl
. Alors maintenant, les commandes suivantes fonctionnent comme prévu:verrouiller le lecteur
déverrouiller le lecteur
la source
/lib/
règle. Je l'ai copié/etc/udev/rules.d/
et créé ma propre version prioritaire.udev
comportement escompté est annulé ailleurs dans Linux ... Mais maintenant, je peux laisser KDE gérer l'éjection délibérée et cesser de s'inquiéter des accidents.Ajoutez la ligne:
aux règles udev du CD-ROM. Cela vous permettra de verrouiller avec:
la source
udev
? etc. - mauvaise réponse.