Fedora 14까지 cdctl
랩톱에서 CD / DVD 꺼내기 단추를 활성화 / 비활성화하는 데 성공적으로 사용 하고 있었습니다 (Thinkpad T410). 슬프게도 지금은 작동이 멈췄습니다.
이 두 가지 질문에서 논의 된 방법을 참고했습니다.
어느 것도 나를 위해 일한 적이 없습니다. 그래서 cdctl
오랫동안 돌아 왔기 때문에 깨진 부분을 고칠 수 없는지 다시 살펴 보겠습니다.
문제 디버깅
cdctl
스위치로 시작 하면 대부분의 것이 잘 작동하는 것으로 보입니다.
예
이것들은 효과가 있습니다.
드라이브를 배출
$ cdctl -e
기능 나열
$ 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
그 목록에 따르면 cdctl
꺼내기 버튼을 활성화 / 비활성화 할 수 있다고 생각합니다.
Can disable eject : 1
그래서 문제를 계속 디버깅합니다.
cdctl 디버깅
그래서 그림은 수행 할 수 있습니다 strace
에을 cdctl
은 무슨 일이 일어나고 있는지에 도움이 되거 수 있는지.
$ 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 +++
흥미롭게도 cdctl
버튼을 비활성화 한 것으로 생각됩니다.
$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1) = 0
$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0) = 0
참고 : 이 권리를 이해하면 0을 반환하면 성공한 것입니다.
내 눈을 사로 잡은 것 중 하나 cdctl
는 상호 작용을 시도하는 장치 목록이었습니다 . 그래서 나는 “이 장치를 사용 eject
해보면 어떨까요?”
꺼내기 명령
몇 년 전에 사용했던 다른 명령 중 하나는 eject
CD / DVD 장치와 상호 작용 하는 명령 이었습니다 . 이 명령에도 비슷한 이름의 스위치가 있습니다.
$ eject --help
-i, --manualeject <on|off> toggle manual eject protection on/off
예
$ 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
그래서 eject
너무는 버튼을 비활성화있어, 아직 어느 아니라고 생각합니다. strace
여기를 사용 하면 동일한 시스템 호출이 표시됩니다.
$ 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
이제 UDEV 또는 다른 장치가 잠재적으로 장치의 소유권을 차단하거나 소유하고 있는지 궁금합니다.
생각?
답변
나에게 올바른 방향을 제시 한 @Affix의 답변 덕분에 문제에 대한 해결책을 찾았습니다.
당신이 짐작했듯이 UDEV에 의해 문제가 발생합니다. 문제는 cdrom 드라이브와 관련된 대부분의 UDEV 파일에있는이 줄입니다.
예
Fedora 19에는 다음과 같은 파일이 /usr/lib/udev/rules.d/60-cdrom_id.rules
있습니다. 이 파일에는 CD / DVD 장치의 꺼내기 단추를 선택하는 다음 줄이 있습니다.
ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"
다음을 수행하여 문제를 해결하고 UDEV의 꺼내기 버튼을 선택하지 못하게 할 수 있습니다.
-
파일 사본 만들기
60-cdrom_id.rules
$ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
-
이 복사 된 파일 버전을 편집하고 문자열을 포함하는 행을 주석 처리하십시오
DISK_EJECT_REQUEST
.$ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
-
파일을 저장하면 변경 사항이 즉시 눈에 should니다!
위의 솔루션은 eject
및 의 문제를 해결합니다 cdctl
. 이제 다음 명령이 예상대로 작동합니다.
드라이브를 잠그다
$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button
-or-
$ cdctl -o1
드라이브 잠금을 해제
$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button
-or-
$ cdctl -o0
답변
라인을 추가하십시오 :
DISC_EJECT_REQUEST
CD ROM udev 규칙에 따라 이를 통해 다음과 같이 잠글 수 있습니다.
eject -i