CD / DVD sürücümün düğmesini nasıl devre dışı bırakabilirim?


13

Fedora 14'e kadar cdctlDizüstü bilgisayarımdaki CD / DVD çıkarma düğmesini etkinleştirmek / devre dışı bırakmak için başarıyla kullanıyordum (Thinkpad T410). Ne yazık ki şimdi çalışmayı durdurdu.

Bu 2 soruda tartışılan yöntemlere başvurdum:

Hiçbiri benim için çalışmadı. Bu cdctlyüzden, uzun süre çalıştığı için onunla kırık olanı düzeltemeyip düzeltemeyeceğimizi görmek için geri dönüyorum .

Sorun ayıklama

Bu yüzden cdctlanahtarlarla başlayarak çoğu şeyin gayet iyi çalıştığını görüyorum.

Örnekler

Bunlar işe yarıyor.

sürücüyü çıkarır

$ cdctl -e

liste yetenekleri

$ 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

Bu listeye göre cdctl, çıkarma düğmesini etkinleştirebileceğini / devre dışı bırakabileceğini düşünüyor.

Can disable eject      : 1

Bu yüzden sorunu ayıklamaya devam ediyorum.

Hata ayıklama cdctl

Yani rakam bir yapalım straceüzerinde cdctlo ne olup bittiğini biraz ışık tutabilir görmek için.

$ 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 +++

İlginçtir ki cdctldüğmeyi devre dışı bıraktığını düşünüyor gibi görünüyor .

$ strace cdctl -o1
ioctl(3, CDROM_LOCKDOOR, 0x1)           = 0

$ strace cdctl -o0
ioctl(3, CDROM_LOCKDOOR, 0)             = 0

NOT: Bu hakkı anlarsam, 0'ın döndürülmesi başarılı olduğu anlamına gelir.

Burada dikkatimi çeken bir şey, cdctletkileşime girmeye çalışan cihazların listesiydi . Ben de "ile bu cihazları ne denerseniz düşünce Yani eject"?

çıkarma komutu

Yıllar önce kullandığım diğer komutlardan biri ejectde CD / DVD cihazıyla etkileşim kurma komutuydu. Bu komutun artık benzer bir adlandırılmış anahtara sahip olduğunu fark ettim:

$ eject --help
 -i, --manualeject <on|off>  toggle manual eject protection on/off

Misal

$ 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

Bu yüzden ejectdüğmenin devre dışı bırakıldığını düşünüyor, ancak ikisi de değil. straceBurada kullanarak aynı sistem çağrılarını görüyorum:

$ 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

Şimdi UDEV veya başka bir şeyin cihazın potansiyel olarak engellenip engellenmediğini veya sahipliğini aldığını merak ediyorum.

Düşünceler?


1
Ayrıca bir T410'um var ve kendimi kastetmediğimde CD sürücüsü çıkarma düğmesine basarken buluyorum. Bunun çözülüp çözülmediğini görmek isteyeceğim.
WhiteHotLoveTiger

Bu sürücüdeki Disk takıldığında düğme hala çalışıyor mu?
Bonsi Scott

1
Acı çektiğini hissediyorum, aynı problemim vardı: CD / DVD sürücüsünü kilitle (çıkarmayı önle) . Hiçbir çözüm bulamadım ve sürücünün fiziksel olarak kaldırılmasını sağladım, çünkü sürücünün günde bir düzine kez patlaması çok sinir bozucuydu. İyi şanslar…
Marco

@Marco - cevaba bakın!
slm

@WhiteHotLoveTiger - cevaba bakın!
slm

Yanıtlar:


9

@ Affix'in bana doğru yolu gösterdiği cevabı sayesinde, sorunun çözümünü anladım.

Sorun kesinlikle tahmin ettiğiniz gibi UDEV'den kaynaklanıyor. Sorun, cdrom sürücüsüyle ilgili çoğu UDEV dosyasında bulunan bu satırdır.

Misal

Fedora 19'da şu dosya var /usr/lib/udev/rules.d/60-cdrom_id.rules,. Bu dosyada, CD / DVD aygıtları için çıkarma düğmesini seçen aşağıdaki satır bulunmaktadır.

ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

Sorunu giderebilir ve aşağıdakileri yaparak UDEV'nin çıkarma düğmesini birlikte seçme yeteneğini devre dışı bırakabilirsiniz:

  1. Dosyanın bir kopyasını oluşturun 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Dosyanın kopyalanan bu sürümünü düzenleyin ve dizeyi içeren satırı yorumlayın DISK_EJECT_REQUEST.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Dosyayı kaydedin ve değişiklik hemen fark edilmelidir!

Yukarıdaki çözüm hem ejectve hem de sorunu giderir cdctl. Şimdi aşağıdaki komutlar beklendiği gibi çalışıyor:

sürücüyü kilitle

$ eject -i on /dev/sr0
eject: CD-Drive may NOT be ejected with device button

-or-

$ cdctl -o1

sürücünün kilidini aç

$ eject -i off /dev/sr0
eject: CD-Drive may be ejected with device button

-or-

$ cdctl -o0

@Marco - Bana sorduğun şeyin kafası karıştı, /lib/kuralı değiştirmedim . Kopyaladım /etc/udev/rules.d/ve kendi geçersiz sürümümü yaptım.
slm

@Marco - NP, kafası karışacak ve hata yapacak çok yer var 8-)
slm

Bunun için teşekkürler. Mevcut Debian ahırında onaylandı (8 / Jessie). Bu çizgiyi yorumlamak, örneğin bir Bluray'ı takılıyken veya oynatılırken yanlışlıkla çıkarma yeteneğimi anında kaldırdı. udevLinux'ta başka bir yerde beklenen davranışı nasıl geçersiz kıldığını sevmeliyim ... Ama şimdi KDE'nin kasıtlı fırlatma ile baş etmesine ve kazalar hakkında endişelenmeyi bırakmasına izin verebilirim.
underscore_d

2

Satırı ekleyin:

DISC_EJECT_REQUEST

CD ROM udev kurallarına. Bu, aşağıdakilerle kilitlenmenizi sağlar:

eject -i

1
En azından Fedora 19'daki durumumda hattın kaldırılması gerekiyordu.
slm

Burada aynı. Buna rağmen: Hangi dosyaya eklensin? hangi diğer hatlar arasında? Bütün çizgi bu mu? Elbette bu sözdizimi için geçerli değil udevmi? vb. - zayıf cevap.
underscore_d
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.