Bis Fedora 14 habe ich cdctl
die 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:
- Deaktivieren Sie die CD / DVD-Taste auf einem Linux-Laptop (Ubuntu)
- Deaktivieren Sie die DVD-Auswurftaste auf einem Thinkpad unter Linux
Nichts davon hat für mich funktioniert. Also drehe ich mich zurück, um cdctl
zu sehen, ob wir nicht reparieren können, was daran kaputt ist, da es so lange funktioniert hat.
Debuggen des Problems
cdctl
Wenn 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 cdctl
glaubt 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 strace
auf , cdctl
um 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 cdctl
es, 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, cdctl
mit 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 eject
Befehl 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 eject
denkt auch, dass es die Schaltfläche deaktiviert, aber es ist auch nicht. Mit strace
hier 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?
Antworten:
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.Sie können das Problem umgehen und die UDEV-Funktion zum Deaktivieren der Auswurftaste deaktivieren, indem Sie die folgenden Schritte ausführen:
Machen Sie eine Kopie der Datei
60-cdrom_id.rules
Bearbeiten Sie diese kopierte Version der Datei und kommentieren Sie die Zeile mit der Zeichenfolge aus
DISK_EJECT_REQUEST
.Speichern Sie die Datei und die Änderung sollte sofort spürbar sein!
Die obige Lösung behebt das Problem für beide
eject
undcdctl
. Die folgenden Befehle funktionieren nun also wie erwartet:sperren Sie das Laufwerk
Entsperren Sie das Laufwerk
quelle
/lib/
Regel nicht geändert . Ich habe es kopiert/etc/udev/rules.d/
und meine eigene übergeordnete Version erstellt.udev
das 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.Fügen Sie die Zeile hinzu:
auf die CD-ROM udev Regeln. So können Sie sperren mit:
quelle
udev
? usw. - schlechte Antwort.