Bagaimana saya bisa menonaktifkan tombol drive CD / DVD saya?

13

Hingga Fedora 14 saya berhasil menggunakan cdctluntuk mengaktifkan / menonaktifkan tombol eject CD / DVD di laptop saya (Thinkpad T410). Sayangnya sudah berhenti bekerja sekarang.

Saya telah berkonsultasi dengan metode yang dibahas dalam 2 pertanyaan ini:

Tidak ada yang berhasil untuk saya. Jadi saya kembali untuk cdctlmelihat apakah kita tidak bisa memperbaiki apa yang rusak dengannya, karena sudah lama bekerja.

Men-debug masalah

Jadi, mulai dengan cdctlsakelar, saya perhatikan bahwa sebagian besar hal tampaknya berfungsi dengan baik.

Contohnya

Hal-hal ini berhasil.

mengeluarkan drive

$ cdctl -e

daftar kemampuan

$ 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

Menurut daftar itu cdctlbahkan berpikir bahwa itu dapat mengaktifkan / menonaktifkan tombol eject.

Can disable eject      : 1

Jadi saya melanjutkan dengan men-debug masalah.

Debugging cdctl

Jadi saya pikir mari kita lakukan straceon cdctluntuk melihat apakah itu dapat menjelaskan apa yang terjadi.

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

Anehnya sepertinya cdctlberpikir itu menonaktifkan tombol.

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

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

CATATAN: Jika saya memahami hak ini, kembalinya 0 berarti berhasil.

Satu hal yang menarik perhatian saya di sini adalah daftar perangkat yang cdctlberusaha berinteraksi. Jadi saya berpikir "bagaimana jika saya mencoba perangkat ini dengan eject"?

perintah eject

Salah satu perintah lain yang saya gunakan bertahun-tahun yang lalu adalah ejectperintah untuk berinteraksi dengan perangkat CD / DVD. Saya perhatikan bahwa perintah ini juga sekarang memiliki saklar bernama serupa:

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

Contoh

$ 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

Jadi ejectjuga berpikir bahwa itu menonaktifkan tombol, namun itu juga tidak. Menggunakan di stracesini saya melihat panggilan sistem yang sama:

$ 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

Jadi sekarang saya bertanya-tanya apakah UDEV atau sesuatu yang berpotensi memblokir atau mengambil kepemilikan perangkat?

Pikiran?

slm
sumber
1
Saya juga punya T410, dan sering menemukan diri saya menekan tombol eject drive CD ketika saya tidak bermaksud. Saya akan tertarik untuk melihat apakah ini diselesaikan.
WhiteHotLoveTiger
Apakah tombol masih berfungsi ketika Disk di drive itu dipasang?
Bonsi Scott
1
Saya merasa Anda sakit, saya memiliki masalah yang sama: Mengunci drive CD / DVD (mencegah eject) . Saya tidak menemukan solusi dan akhirnya mengeluarkan drive secara fisik, karena terlalu menjengkelkan untuk mengeluarkan drive itu selusin kali per hari. Semoga berhasil ...
Marco
@Marco - lihat jawabannya!
slm
@WhiteHotLoveTiger - lihat jawabannya!
slm

Jawaban:

9

Berkat jawaban @ Affix yang memberi saya arah yang tepat untuk menuju, saya telah menemukan solusi untuk masalah ini.

Masalahnya jelas disebabkan oleh UDEV seperti yang sudah Anda duga. Masalahnya adalah baris ini yang ada di sebagian besar file UDEV yang terkait dengan drive cdrom.

Contoh

Pada Fedora 19 ada file berikut /usr/lib/udev/rules.d/60-cdrom_id.rules,. Dalam file ini adalah baris berikut yang mengkooptasi tombol eject untuk perangkat CD / DVD.

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

Anda dapat mengatasi masalah ini dan menonaktifkan kemampuan UDEV untuk mengkooptasi tombol eject dengan melakukan hal berikut:

  1. Buat salinan file 60-cdrom_id.rules

    $ sudo cp /usr/lib/udev/rules.d/60-cdrom_id.rules /etc/udev/rules.d/.
    
  2. Edit versi file yang disalin ini dan komentari baris yang berisi string DISK_EJECT_REQUEST,.

    $ sudoedit /etc/udev/rules.d/60-cdrom_id.rules
    
  3. Simpan file dan perubahannya akan segera terlihat!

Solusi di atas memperbaiki masalah untuk keduanya ejectdan cdctl. Jadi sekarang perintah berikut berfungsi seperti yang diharapkan:

kunci drive

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

-or-

$ cdctl -o1

buka kunci drive

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

-or-

$ cdctl -o0
slm
sumber
@ Mars - Saya bingung apa yang Anda tanyakan, saya tidak mengubah /lib/aturan. Saya menyalinnya ke /etc/udev/rules.d/dan membuat versi override saya sendiri.
slm
@Marco - NP, ada banyak tempat untuk bingung dan membuat kesalahan 8-)
slm
Terima kasih untuk ini. Dikonfirmasi dalam stabil Debian saat ini (8 / Jessie). Mengomentari kalimat itu secara instan menghilangkan kemampuan saya untuk, misalnya, secara tidak sengaja mengeluarkan Bluray ketika sedang dipasang atau bahkan diputar. Harus menyukai bagaimana udevmengesampingkan perilaku yang diharapkan di tempat lain di Linux ... Tapi sekarang saya dapat membiarkan KDE menangani pengusiran yang disengaja dan berhenti mengkhawatirkan kecelakaan.
underscore_d
2

Tambahkan baris:

DISC_EJECT_REQUEST

ke aturan udev CD ROM. Ini akan memungkinkan Anda untuk mengunci dengan:

eject -i
Afiks
sumber
1
Garis sebenarnya perlu dihapus, setidaknya dalam kasus saya di Fedora 19.
slm
Sama disini. Meski begitu: Tambahkan ke file mana? antara baris lainnya? Apakah itu seluruh baris? Tentunya itu tidak valid secara sintaksis untuk udev? dll - jawaban yang buruk.
underscore_d