Comment désactiver le bouton de mon lecteur de CD / DVD?

13

Jusqu'à Fedora 14, j'utilisais avec succès cdctlpour 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:

Aucun d'entre eux n'a fonctionné pour moi. Je reviens donc cdctlpour 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 cdctlcommutateurs, 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, cdctlpense 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 straceessai cdctlpour 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 cdctlque 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 cdctltentent 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 ejectcommande 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 ejectaussi à désactiver le bouton, mais ce n'est pas le cas non plus. En utilisant straceici, 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?

slm
la source
1
J'ai également un T410 et je me retrouve souvent à appuyer sur le bouton d'éjection du lecteur de CD lorsque je ne le veux pas. Je serai intéressé de voir si cela est résolu.
WhiteHotLoveTiger
Le bouton fonctionne-t-il toujours lorsque le disque de ce lecteur est monté?
Bonsi Scott
1
Je ressens de la douleur, j'ai eu le même problème: verrouiller le lecteur CD / DVD (empêcher l'éjection) . Je n'ai trouvé aucune solution et j'ai fini par retirer le lecteur physiquement, car c'était trop ennuyeux de le faire sortir une douzaine de fois par jour. Bonne chance…
Marco
@Marco - voyez la réponse!
slm
@WhiteHotLoveTiger - voyez la réponse!
slm

Réponses:

9

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.

ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

Vous pouvez contourner le problème et désactiver la capacité d'UDEV à coopter le bouton d'éjection en procédant comme suit:

  1. Faites une copie du fichier 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Modifier cette version du fichier copié et commentaires sur la ligne contenant la chaîne, DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Enregistrez le fichier et le changement devrait être perceptible immédiatement!

La solution ci-dessus résout le problème pour ejectet cdctl. Alors maintenant, les commandes suivantes fonctionnent comme prévu:

verrouiller le lecteur

$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button

-or-

$ cdctl -o1

déverrouiller le lecteur

$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button

-or-

$ cdctl -o0
slm
la source
@Marco - Je ne comprends pas ce que vous me demandez, je n'ai pas changé la /lib/règle. Je l'ai copié /etc/udev/rules.d/et créé ma propre version prioritaire.
slm
@Marco - NP, il y a plein d'endroits pour se
perdre
Merci pour cela. Confirmé dans l'écurie Debian actuelle (8 / Jessie). Commenter cette ligne a instantanément supprimé ma capacité, par exemple, à éjecter accidentellement un Bluray alors qu'il est monté ou même en cours de lecture. Je dois aimer la façon dont le udevcomportement 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.
underscore_d
2

Ajoutez la ligne:

DISC_EJECT_REQUEST

aux règles udev du CD-ROM. Cela vous permettra de verrouiller avec:

eject -i
Affixe
la source
1
La ligne devait en fait être supprimée, du moins dans mon cas sur Fedora 19.
slm
Pareil ici. Même ainsi: l'ajouter à quel fichier? entre quelles autres lignes? Est-ce que c'est toute la ligne? Ce n'est sûrement pas valable pour la syntaxe udev? etc. - mauvaise réponse.
underscore_d