Wie kann ich die Taste meines CD / DVD-Laufwerks deaktivieren?

13

Bis Fedora 14 habe ich cdctldie CD / DVD-Auswurftaste meines Laptops (Thinkpad T410) erfolgreich aktiviert / deaktiviert. Leider hat es jetzt aufgehört zu arbeiten.

Ich habe die in diesen beiden Fragen behandelten Methoden konsultiert:

Nichts davon hat für mich funktioniert. Also drehe ich mich zurück, um cdctlzu sehen, ob wir nicht reparieren können, was daran kaputt ist, da es so lange funktioniert hat.

Debuggen des Problems

cdctlWenn ich mit Schaltern beginne, stelle ich fest, dass die meisten Dinge gut zu funktionieren scheinen.

Beispiele

Diese Dinge funktionieren.

Wirft das Laufwerk aus

$ cdctl -e

Listenfunktionen

$ 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

Laut dieser Liste cdctlglaubt man sogar, dass man damit die Auswurftaste aktivieren / deaktivieren kann.

Can disable eject      : 1

Also fahre ich mit dem Debuggen des Problems fort.

Debugging von cdctl

Also ich Figur läßt eine tun straceauf , cdctlum zu sehen , ob es etwas Licht auf vergießen kann , was los ist .

$ 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 +++

Seltsamerweise scheint cdctles, als würde es die Schaltfläche deaktivieren.

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

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

HINWEIS: Wenn ich dieses Recht verstehe, bedeutet die Rückgabe einer 0, dass es erfolgreich war.

Eine Sache, die mir hier aufgefallen ist, war die Liste der Geräte, cdctlmit denen versucht wird, zu interagieren. Also dachte ich "Was ist, wenn ich diese Geräte mit eject" probiere ?

Befehl auswerfen

Einer der anderen Befehle, die ich vor Jahren verwendet habe, war der ejectBefehl zur Interaktion mit dem CD / DVD-Gerät. Mir ist aufgefallen, dass dieser Befehl jetzt auch einen ähnlich benannten Schalter hat:

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

Beispiel

$ 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

So ejectdenkt auch, dass es die Schaltfläche deaktiviert, aber es ist auch nicht. Mit stracehier sehe ich die gleichen Systemaufrufe:

$ 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

Jetzt frage ich mich also, ob UDEV oder etwas anderes das Gerät möglicherweise blockiert oder in Besitz nimmt.

Gedanken?

slm
quelle
1
Ich habe auch einen T410 und tippe oft auf die Auswurftaste für das CD-Laufwerk, wenn ich das nicht vorhabe. Ich bin gespannt, ob dies behoben wird.
WhiteHotLoveTiger
Funktioniert die Schaltfläche noch, wenn der Datenträger in diesem Laufwerk aktiviert ist?
Bonsi Scott
1
Ich habe Schmerzen, ich hatte das gleiche Problem: CD / DVD-Laufwerk sperren (Auswurf verhindern) . Ich fand keine Lösung und entfernte das Laufwerk physisch, da es zu ärgerlich war, wenn das Laufwerk ein Dutzend Mal pro Tag heraussprang. Viel Glück ...
Marco
@ Marco - siehe die Antwort!
slm
@WhiteHotLoveTiger - siehe die Antwort!
slm

Antworten:

9

Dank der Antwort von @ Affix, die mir die richtige Richtung gab, habe ich die Lösung für das Problem gefunden.

Das Problem wird definitiv von UDEV verursacht, wie Sie vermutet haben. Das Problem ist diese Zeile, die sich in den meisten UDEV-Dateien befindet, die sich auf das CD-ROM-Laufwerk beziehen.

Beispiel

Auf Fedora 19 gibt es die folgende Datei, /usr/lib/udev/rules.d/60-cdrom_id.rules. In dieser Datei befindet sich die folgende Zeile, in der die Auswurftaste für CD / DVD-Geräte ausgewählt ist.

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

Sie können das Problem umgehen und die UDEV-Funktion zum Deaktivieren der Auswurftaste deaktivieren, indem Sie die folgenden Schritte ausführen:

  1. Machen Sie eine Kopie der Datei 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Bearbeiten Sie diese kopierte Version der Datei und kommentieren Sie die Zeile mit der Zeichenfolge aus DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Speichern Sie die Datei und die Änderung sollte sofort spürbar sein!

Die obige Lösung behebt das Problem für beide ejectund cdctl. Die folgenden Befehle funktionieren nun also wie erwartet:

sperren Sie das Laufwerk

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

-or-

$ cdctl -o1

Entsperren Sie das Laufwerk

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

-or-

$ cdctl -o0
slm
quelle
@Marco - Ich bin verwirrt, was Sie mich fragen, ich habe die /lib/Regel nicht geändert . Ich habe es kopiert /etc/udev/rules.d/und meine eigene übergeordnete Version erstellt.
slm
@Marco - NP, es gibt viele Orte, an denen man sich verwirren und Fehler machen kann 8-)
slm
Danke dafür. Bestätigt im aktuellen Debian-Stall (8 / Jessie). Wenn ich diese Zeile auskommentiere, habe ich sofort die Möglichkeit verloren, z. B. einen Bluray versehentlich auszuwerfen, während er montiert ist oder sogar spielt. Ich muss lieben, wie udevdas erwartete Verhalten unter Linux außer Kraft gesetzt wird ... Aber jetzt kann KDE das absichtliche Auswerfen bewältigen und keine Unfälle mehr befürchten.
Underscore_d
2

Fügen Sie die Zeile hinzu:

DISC_EJECT_REQUEST

auf die CD-ROM udev Regeln. So können Sie sperren mit:

eject -i
Affix
quelle
1
Die Leitung musste tatsächlich entfernt werden, zumindest in meinem Fall unter Fedora 19.
slm
Hier gilt das gleiche. Trotzdem: Zu welcher Datei hinzufügen? zwischen welchen anderen Zeilen? Ist das die ganze Linie? Sicher ist das syntaktisch nicht gültig für udev? usw. - schlechte Antwort.
Underscore_d