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


13

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 또는 다른 장치가 잠재적으로 장치의 소유권을 차단하거나 소유하고 있는지 궁금합니다.

생각?


1
나는 또한 T410을 가지고 있고, 내가 의도하지 않을 때 종종 CD 드라이브 꺼내기 버튼을 누르는 것을 발견합니다. 이것이 해결되는지 궁금합니다.
WhiteHotLoveTiger

해당 드라이브의 디스크를 마운트 할 때 버튼이 계속 작동합니까?
Bonsi Scott

1
나는 당신이 고통을 느끼고, 같은 문제가 있습니다 : CD / DVD 드라이브 잠금 (배출 방지) . 나는 해결책을 찾지 못하고 드라이브를 물리적으로 제거했습니다. 드라이브가 하루에 수십 번 튀어 나오기에는 너무 성가신 것이기 때문입니다. 행운을 빕니다…
Marco

@Marco-답을보십시오!
slm

@WhiteHotLoveTiger-답변을 참조하십시오!
slm

답변:


9

나에게 올바른 방향을 제시 한 @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

@Marco-나는 당신이 나에게 묻는 것을 혼란스럽게 생각합니다. 나는 /lib/규칙을 바꾸지 않았습니다 . 나는 그것을 복사하고 /etc/udev/rules.d/내 자신의 재정의 버전을 만들었습니다.
slm

@Marco-NP, 혼란스러워하고 실수 할 충분한 장소가 8-)
slm

고마워 현재 데비안 안정적으로 확인되었습니다 (8 / 예시). 해당 라인을 주석 처리하면 Bluray가 장착되거나 재생되는 동안 실수로 Bluray를 꺼낼 수있는 능력이 즉시 사라졌습니다. udevLinux의 다른 곳에서 예상되는 동작을 재정의 하는 방법을 좋아할 것입니다 . 그러나 이제 KDE가 의도적 인 배출을 처리하고 사고에 대한 걱정을 중단하도록 할 수 있습니다.
underscore_d

2

라인을 추가하십시오 :

DISC_EJECT_REQUEST

CD ROM udev 규칙에 따라 이를 통해 다음과 같이 잠글 수 있습니다.

eject -i

1
적어도 Fedora 19의 경우에는 라인을 실제로 제거해야했습니다.
slm

여기도 마찬가지입니다. 그렇더라도 : 어떤 파일에 추가 하시겠습니까? 다른 라인 사이? 그게 전체 라인인가요? 확실히 그것은 문법적으로 유효하지 udev않습니까? 등-나쁜 대답.
underscore_d
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.