फेडोरा 14 तक मैं cdctl
अपने लैपटॉप पर सीडी / डीवीडी इजेक्ट बटन को सक्षम / अक्षम करने के लिए सफलतापूर्वक उपयोग कर रहा था (थिंकपैड T410)। अफसोस की बात है कि इसने अब काम करना बंद कर दिया है।
मैंने इन 2 प्रश्नों में चर्चा की गई विधियों की सलाह ली है:
- लिनक्स लैपटॉप (ubuntu) पर सीडी / डीवीडी बटन को निष्क्रिय करें
- एक थिंकपैड चल रहे लिनक्स पर डीवीडी इजेक्ट बटन को अक्षम करें
जिनमें से किसी ने भी मेरे लिए काम नहीं किया। इसलिए मैं 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 --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 या कुछ और संभावित रूप से अवरुद्ध हो रहा है या डिवाइस का स्वामित्व ले रहा है?
विचार?