Aż do Fedory 14 z powodzeniem cdctl
włączałem / wyłączałem przycisk wysuwania CD / DVD na moim laptopie (Thinkpad T410). Niestety, teraz przestał działać.
Sprawdziłem metody omówione w tych 2 pytaniach:
- wyłącz przycisk cd / dvd na laptopie z Linuksem (ubuntu)
- Wyłącz przycisk wysuwania DVD na Thinkpad z systemem Linux
Żaden z nich nie działał dla mnie. Więc wracam, aby cdctl
sprawdzić, czy nie możemy naprawić tego, co jest zepsute, ponieważ działało to tak długo.
Debugowanie problemu
Począwszy od cdctl
przełączników, zauważam, że większość rzeczy działa dobrze.
Przykłady
Te rzeczy działają.
wysuwa dysk
$ cdctl -e
lista możliwości
$ 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
Według tej listy cdctl
nawet uważa, że może włączyć / wyłączyć przycisk wysuwania.
Can disable eject : 1
Kontynuuję debugowanie problemu.
Debugowanie cdctl
Więc ja figura pozwala wykonać strace
na cdctl
celu sprawdzić, czy może rzucić nieco światła na to, co się dzieje.
$ 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 +++
Co ciekawe, wydaje się, że cdctl
uważa, że wyłącza przycisk.
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
UWAGA: Jeśli rozumiem to prawo, zwrócenie wartości 0 oznacza, że się udało.
Jedną z rzeczy, które przykuły moją uwagę, była lista urządzeń, z którymi cdctl
próbuje się współpracować. Pomyślałem więc „co, jeśli wypróbuję te urządzenia eject
”?
polecenie wysuwania
Jednym z innych poleceń, z których korzystałem lata temu, było eject
polecenie interakcji z urządzeniem CD / DVD. Zauważyłem, że to polecenie ma teraz również podobny przełącznik o nazwie:
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
Przykład
$ 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
Tak eject
też sądzi, że to wyłączenie przycisku, jednak nie jest to albo. Używając strace
tutaj widzę te same wywołania systemowe:
$ 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
Zastanawiam się teraz, czy UDEV lub coś innego może blokować lub przejmować własność urządzenia?
Myśli?