จนกระทั่ง Fedora 14 ฉันใช้cdctlเพื่อเปิด / ปิดการใช้งานปุ่มเปิดถาด CD / DVD บนแล็ปท็อปของฉัน (Thinkpad T410) น่าเศร้าที่มันหยุดทำงานแล้ว
ฉันได้ปรึกษาวิธีการที่กล่าวถึงในคำถาม 2 ข้อนี้แล้ว:
- ปิดการใช้งานปุ่ม cd / dvd บนแล็ปท็อป linux (Ubuntu)
 - ปิดใช้งานปุ่มนำแผ่นดีวีดีออกจาก Thinkpad ที่ใช้ Linux
 
ไม่มีสิ่งใดที่ได้ผลสำหรับฉัน ดังนั้นฉันจึงหันกลับไป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 หรืออย่างอื่นอาจบล็อกหรือเป็นเจ้าของอุปกรณ์หรือไม่
คิด?