จนกระทั่ง 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 หรืออย่างอื่นอาจบล็อกหรือเป็นเจ้าของอุปกรณ์หรือไม่
คิด?