ฉันจะปิดการใช้งานปุ่มของไดรฟ์ซีดี / ดีวีดีของฉันได้อย่างไร


13

จนกระทั่ง Fedora 14 ฉันใช้cdctlเพื่อเปิด / ปิดการใช้งานปุ่มเปิดถาด CD / DVD บนแล็ปท็อปของฉัน (Thinkpad T410) น่าเศร้าที่มันหยุดทำงานแล้ว

ฉันได้ปรึกษาวิธีการที่กล่าวถึงในคำถาม 2 ข้อนี้แล้ว:

ไม่มีสิ่งใดที่ได้ผลสำหรับฉัน ดังนั้นฉันจึงหันกลับไป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

หนึ่งในคำสั่งอื่น ๆ ที่ฉันใช้เมื่อหลายปีก่อนคือejectคำสั่งในการโต้ตอบกับอุปกรณ์ซีดี / ดีวีดี ฉันสังเกตเห็นว่าคำสั่งนี้ก็มีสวิตช์ชื่อคล้ายกัน:

$ 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 และมักพบว่าตัวเองกดปุ่มนำแผ่นซีดีไดรฟ์ออกมาเมื่อไม่ได้ตั้งใจ ฉันจะสนใจดูว่าสิ่งนี้ได้รับการแก้ไขหรือไม่
WhiteHotLoveTiger

ปุ่มยังคงใช้งานได้หรือไม่เมื่อติดตั้งดิสก์ในไดรฟ์นั้น
Bonsi Scott

1
ฉันรู้สึกว่าคุณมีอาการปวดผมก็มีปัญหาเดียวกัน: ไดรฟ์ล็อคซีดี / ดีวีดี (ป้องกันการดีดออก) ฉันไม่พบวิธีแก้ปัญหาและลงเอยด้วยการถอดไดรฟ์เนื่องจากมันน่ารำคาญเกินกว่าที่จะให้ไดรฟ์ปรากฏออกมาวันละหลายสิบครั้ง ขอให้โชคดี ...
Marco

@Marco - ดูคำตอบ!
slm

@ WhiteHotLoveTiger - ดูคำตอบ!
slm

คำตอบ:


9

ขอบคุณคำตอบของ @ Affix ที่ให้ทิศทางที่ถูกต้องแก่ฉันฉันคิดวิธีแก้ปัญหา

ปัญหาเกิดจาก UDEV อย่างที่คุณคาดเดาไว้ ปัญหาคือบรรทัดนี้ซึ่งอยู่ในไฟล์ UDEV ส่วนใหญ่ที่เกี่ยวข้องกับไดรฟ์ cdrom

ตัวอย่าง

ใน Fedora 19 มีไฟล์ดังต่อไปนี้, /usr/lib/udev/rules.d/60-cdrom_id.rules. ในไฟล์นี้เป็นบรรทัดต่อไปนี้ซึ่งเป็นการทำงานร่วมกันของปุ่มเปิดถาดสำหรับอุปกรณ์ซีดี / ดีวีดี

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. บันทึกไฟล์และการเปลี่ยนแปลงควรสังเกตได้ทันที!

การแก้ปัญหาดังกล่าวข้างต้นแก้ไขปัญหาให้ทั้งสองและ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

ขอบคุณสำหรับสิ่งนี้. ยืนยันใน Debian เสถียรปัจจุบัน (8 / Jessie) การแสดงความคิดเห็นว่าบรรทัดนั้นนำความสามารถของฉันออกทันทีเช่นนำ Bluray ออกโดยไม่ได้ตั้งใจในขณะที่ติดตั้งหรือแม้กระทั่งเล่น ต้องรักว่าudevจะเอาชนะพฤติกรรมที่คาดหวังที่อื่นใน Linux ได้อย่างไร แต่ตอนนี้ฉันสามารถปล่อยให้ KDE จัดการกับการดีดออกโดยไม่ตั้งใจและหยุดกังวลเกี่ยวกับอุบัติเหตุ
underscore_d

2

เพิ่มบรรทัด:

DISC_EJECT_REQUEST

กับกฎ CD ROM udev สิ่งนี้จะช่วยให้คุณสามารถล็อคด้วย:

eject -i

1
จำเป็นต้องลบบรรทัดจริงๆอย่างน้อยก็ในกรณีของฉันใน Fedora 19
slm

กันที่นี่ ถึงกระนั้น: เพิ่มลงในไฟล์ใด ระหว่างบรรทัดอื่น ๆ นั่นคือสายทั้งหมดหรือไม่ แน่นอนว่ามันไม่ถูกต้องสำหรับ syntactically udev? ฯลฯ - คำตอบที่ไม่ดี
underscore_d
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.