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:
- 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 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?