CD / DVD 드라이브의 단추를 비활성화하려면 어떻게합니까? audio discs : 1 Can

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해보면 어떨까요?”

꺼내기 명령

몇 년 전에 사용했던 다른 명령 중 하나는 ejectCD / 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의 꺼내기 버튼을 선택하지 못하게 할 수 있습니다.

  1. 파일 사본 만들기 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. 이 복사 된 파일 버전을 편집하고 문자열을 포함하는 행을 주석 처리하십시오 DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. 파일을 저장하면 변경 사항이 즉시 눈에 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


답변