Come posso disabilitare il pulsante del mio lettore CD / DVD?


13

Fino a Fedora 14 stavo usando con successo cdctlper abilitare / disabilitare il pulsante di espulsione CD / DVD sul mio laptop (Thinkpad T410). Purtroppo ha smesso di funzionare ora.

Ho consultato i metodi discussi in queste 2 domande:

Nessuno dei quali ha funzionato per me. Quindi torno indietro per cdctlvedere se non riusciamo a risolvere il problema, dato che ha funzionato per così tanto tempo.

Debug del problema

Quindi, a partire dagli cdctlswitch, noto che la maggior parte delle cose sembra funzionare bene.

Esempi

Queste cose funzionano.

espelle l'unità

$ cdctl -e

capacità di elenco

$ 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

Secondo tale elenco cdctlritiene addirittura di poter abilitare / disabilitare il pulsante di espulsione.

Can disable eject      : 1

Quindi continuo con il debug del problema.

Debug cdctl

Così ho dato lascia fare un stracesu cdctlper vedere se può far luce su quello che sta succedendo.

$ 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 sembra che cdctlstia disabilitando il pulsante.

$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1)           = 0

$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0)             = 0

NOTA: se capisco questo diritto, il ritorno di uno 0 significa che ha avuto successo.

Una cosa che ha attirato la mia attenzione qui è stata la lista dei dispositivi con cui si cdctlsta tentando di interagire. Quindi ho pensato "e se provassi questi dispositivi con eject"?

comando di espulsione

Uno degli altri comandi che usavo anni fa era il ejectcomando per interagire con il dispositivo CD / DVD. Ho notato che anche questo comando ora ha un simile switch chiamato:

$ eject --help
 -i, --manualeject <on|off>  toggle manual eject protection on/off

Esempio

$ 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

Quindi ejectpensa anche che stia disabilitando il pulsante, eppure non lo è neanche. Usando stracequi vedo le stesse chiamate di 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

Quindi ora mi chiedo se UDEV o qualcos'altro sta potenzialmente bloccando o prendendo la proprietà del dispositivo?

Pensieri?


1
Ho anche un T410 e spesso mi ritrovo a premere il pulsante di espulsione dell'unità CD quando non intendo farlo. Sarò interessato a vedere se questo viene risolto.
WhiteHotLoveTiger

Il pulsante funziona ancora quando il disco in quell'unità è montato?
Bonsi Scott,

1
Sento dolore, ho avuto lo stesso problema: bloccare l'unità CD / DVD (impedire l'espulsione) . Non ho trovato alcuna soluzione e ho finito per rimuovere fisicamente l'unità, poiché era troppo fastidioso far uscire l'unità una dozzina di volte al giorno. Buona fortuna ...
Marco,

@Marco - vedi la risposta!
slm

@WhiteHotLoveTiger - vedi la risposta!
slm

Risposte:


9

Grazie alla risposta di @ Affix che mi ha dato la giusta direzione da seguire, ho trovato la soluzione al problema.

Il problema è sicuramente causato da UDEV come hai indovinato. Il problema è questa linea che si trova nella maggior parte dei file UDEV relativi all'unità cdrom.

Esempio

Su Fedora 19 è il seguente file, /usr/lib/udev/rules.d/60-cdrom_id.rules. In questo file è la seguente riga che coopterà il pulsante di espulsione per i dispositivi CD / DVD.

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

Puoi aggirare il problema e disabilitare la capacità di UDEV di cooptare il pulsante di espulsione procedendo come segue:

  1. Crea una copia del file 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Modifica versione copiata del file e commentare la riga contenente la stringa, DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Salvare il file e la modifica dovrebbe essere immediatamente evidente!

La soluzione sopra risolve il problema per entrambi ejecte cdctl. Quindi ora i seguenti comandi funzionano come previsto:

bloccare l'unità

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

-or-

$ cdctl -o1

sbloccare l'unità

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

-or-

$ cdctl -o0

@Marco - Sono confuso quello che mi stai chiedendo, non ho cambiato la /lib/regola. L'ho copiato /etc/udev/rules.d/e creato la mia versione prioritaria.
slm

@Marco - NP, ci sono molti posti in cui confondersi e commettere errori Cool
slm

Grazie per questo. Confermato nella stalla Debian corrente (8 / Jessie). Commentare quella linea ha immediatamente rimosso la mia capacità di, ad esempio, espellere accidentalmente un Bluray mentre è montato o addirittura giocare. Devo amare il modo in cui udevprevale il comportamento previsto altrove in Linux ... Ma ora posso lasciare che KDE gestisca l'espulsione deliberata e smetta di preoccuparmi degli incidenti.
underscore_d

2

Aggiungi la linea:

DISC_EJECT_REQUEST

alle regole udev del CD ROM. Ciò ti consentirà di bloccare con:

eject -i

1
La linea in realtà doveva essere rimossa, almeno nel mio caso su Fedora 19.
slm

Anch'io. Anche così: aggiungerlo a quale file? tra quali altre linee? È l'intera linea? Sicuramente non è sintatticamente valido per udev? ecc. - risposta scadente.
underscore_d
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.