मैं अपनी सीडी / डीवीडी ड्राइव के बटन को कैसे निष्क्रिय कर सकता हूं?


13

फेडोरा 14 तक मैं cdctlअपने लैपटॉप पर सीडी / डीवीडी इजेक्ट बटन को सक्षम / अक्षम करने के लिए सफलतापूर्वक उपयोग कर रहा था (थिंकपैड 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 --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 भी है, और जब मैं नहीं करता हूं तो अक्सर सीडी ड्राइव इजेक्ट बटन को दबाकर खुद को ढूंढता हूं। मुझे यह देखने के लिए दिलचस्पी होगी कि क्या यह हल हो जाता है।
व्हाइटहोटलवेटिगर

क्या बटन अभी भी काम कर रहा है जब उस ड्राइव में डिस्क माउंट है?
बोंसी स्कॉट

1
मुझे आपको दर्द होता है, मुझे भी यही समस्या थी: लॉक सीडी / डीवीडी ड्राइव (इजेक्शन को रोकें) । मुझे कोई हल नहीं मिला और शारीरिक रूप से ड्राइव को हटा दिया गया, क्योंकि प्रति दिन एक दर्जन बार ड्राइव को बाहर करने के लिए बहुत कष्टप्रद था। गुड लक ...
मार्को

@ मार्को - जवाब देखें!
slm

@HiteHotLoveTiger - जवाब देखें!
slm

जवाबों:


9

@ Affix के जवाब के लिए धन्यवाद जिसने मुझे सिर को सही दिशा दी, मैंने समस्या का हल खोज लिया है।

समस्या निश्चित रूप से UDEV के कारण होती है जैसा आपने अनुमान लगाया है। मुद्दा यह लाइन है जो cdrom ड्राइव से संबंधित अधिकांश UDEV फ़ाइलों में है।

उदाहरण

फेडोरा 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

@ मार्को - मैं उलझन में हूं कि आप मुझसे क्या पूछ रहे हैं, मैंने /lib/नियम नहीं बदला । मैंने इसे कॉपी किया /etc/udev/rules.d/और अपना स्वयं का ओवरराइडिंग संस्करण बनाया।
स्लम

@Marco - एनपी, वहाँ पर्याप्त स्थानों भ्रमित करने के लिए और मेकअप गलतियों 8-) है
SLM

इसके लिए धन्यवाद। वर्तमान डेबियन स्थिर (8 / जेसी) में पुष्टि की गई। टिप्पणी करते हुए कि लाइन ने तुरंत मेरी क्षमता को हटा दिया, उदाहरण के लिए, गलती से एक ब्लर को हटा दें जबकि यह घुड़सवार है या खेल रहा है। प्यार करना होगा कि कैसे udevलिनक्स में कहीं और व्यवहार की अपेक्षा करता है ... लेकिन अब मैं केडीई को जानबूझकर अस्वीकृति को संभालने दे सकता हूं और दुर्घटनाओं के बारे में चिंता करना बंद कर सकता हूं।
अंडरस्कोर_ड

2

लाइन जोड़ें:

DISC_EJECT_REQUEST

सीडी रोम udev नियम के लिए। यह आपको लॉक करने में सक्षम करेगा:

eject -i

1
लाइन वास्तव में जरूरत हटा दिया जाना चाहिए, फेडोरा 19 पर मेरे मामले में कम से कम
SLM

मुझे भी। फिर भी: इसे किस फ़ाइल में जोड़ें? किन अन्य लाइनों के बीच? क्या वह पूरी रेखा है? निश्चित रूप से यह वाक्य रचना के लिए मान्य नहीं है udev? आदि - गरीब जवाब।
अंडरस्कोर_ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.