लिनक्स के साथ एक USB बिजली की आपूर्ति (पर / बंद) को नियंत्रित करना


164

क्या लिनक्स से मैन्युअल रूप से यूएसबी से बिजली की आपूर्ति चालू / बंद करना संभव है?

इस बाहरी यूएसबी कूलिंग फैन (जिस तरह से आप अपने आप को शांत करने के लिए उपयोग करते हैं, पीसी नहीं), और टर्मिनल से इसे नियंत्रित करने में सक्षम होना अच्छा होगा, क्योंकि मैं प्रशंसक को कहीं दूर रखना चाहता हूं।

मुझे लगता है कि यह कई अन्य चीजों के लिए भी उपयोगी हो सकता है, क्योंकि वहां बहुत सारे यूएसबी खिलौने हैं। शायद एयर प्यूरीफायर आदि (मैंने सुना है कि वे वास्तव में काम नहीं करते हैं)।


9
मुझे लिनक्स> = 2.6.38 के लिए पुनर्कथन दें: अब फ़ाइल power/level को हटा दिया गया है; power/control इसके बजाय का उपयोग करें । ( power/wakeupठीक है।) इसके अलावा, यह केवल "ऑटो" और "ऑन" को स्वीकार करता है, किसी भी "सस्पेंड" को नहीं। "ऑटो" काफी स्मार्ट है, और यदि निष्क्रिय होने पर बिजली बंद नहीं होती है, तो यह डिवाइस की गलती है। वैसे भी आप पावर को मैन्युअल रूप से बंद नहीं कर सकते। अधिक के लिए, tlwhitec और कर्नेल के डॉक द्वारा नीचे दिए गए उत्तर देखें : kernel.org/doc/Documentation/usb/power-management.txt
teika kazura

के संभावित डुप्लिकेट stackoverflow.com/q/1163824/1967396
फ्लोरिस

2
यह सुविधा वास्तव में एक अच्छा GUI
mikebabcock

क्या इसके लिए किसी विशेष हार्डवेयर की आवश्यकता है? उत्तर से यह बिल्कुल स्पष्ट नहीं है,
वोजत दोहल

जवाबों:


63

ध्यान दें। इस उत्तर की जानकारी पुरानी गुठली (2.6.32 तक) के लिए प्रासंगिक है। नई गुठली पर जानकारी के लिए tlwhitec का उत्तर देखें ।

# disable external wake-up; do this only once
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup 

echo on > /sys/bus/usb/devices/usb1/power/level       # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

(आपको usb1 को usb n में बदलने की आवश्यकता हो सकती है )

स्रोत: प्रलेखन / usb / शक्ति-management.txt.gz


1
वाह, इसके लिए धन्यवाद। मैं सोच रहा था मुझे कोई बात नहीं है libUSB से गुजरना होगा। किसी भी विचार कैसे संलग्न उपकरणों के नाम प्राप्त करने के लिए?
कमज़ीरो

इस पोस्ट के अनुसार, विशेष हार्डवेयर के बिना यह संभव नहीं है? blog.andrew.net.au/2009/01/17
NoBugs

7
अगर मुझे sudo का उपयोग करने की अनुमति दी गई है, तो मुझे त्रुटि से इनकार किया जा रहा है!
वैली

3
मेरे लिए भी
सूडो

2
अनुमति को अस्वीकार कर दिया जाता है क्योंकि आउटपुट के प्रत्यक्ष केsudo foo > bar रूप में एक कमांड को पार्स किया जाता है bar, फिर fooउपयोग करके चलाते हैंsudo । पुनर्निर्देशन विफल हो जाता है क्योंकि यह रूट एक्सेस प्राप्त करने से पहले होता है। समाधान का उपयोग करना है sudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup', और इसी तरह: रूट प्राप्त करें, रीडायरेक्ट करने के लिए एक नया नरक चलाएं, फिर रीडायरेक्ट किए गए फ़ाइल डिस्क्रिप्टर में कुछ आउटपुट करें।
खुदाई करें

60

डॉक्स के अनुसार , kernels 2.6.32 से USB पावर प्रबंधन में कई बदलाव हुए , जो 2.6.38 में व्यवस्थित होते हैं । अब आपको डिवाइस के निष्क्रिय होने की प्रतीक्षा करने की आवश्यकता होगी , जो विशेष डिवाइस ड्राइवर द्वारा शासित है। ड्राइवर को इसका समर्थन करने की आवश्यकता है, अन्यथा डिवाइस इस स्थिति तक कभी नहीं पहुंचेगा। दुर्भाग्य से, अब उपयोगकर्ता के पास इसे मजबूर करने का कोई मौका नहीं है। हालांकि, यदि आप भाग्यशाली हैं और आपका उपकरण निष्क्रिय हो सकता है, तो आपको इसे बंद करने की आवश्यकता है:

echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend"
echo "auto" > "/sys/bus/usb/devices/usbX/power/level"

या, गुठली के लिए 2.6.38 और उससे अधिक के लिए:

echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"

इसका शाब्दिक अर्थ है, उस समय निलंबित हो जाना जब उपकरण निष्क्रिय हो जाता है।

इसलिए जब तक आपका प्रशंसक कुछ "बुद्धिमान" नहीं होता है, जिसे एक उपकरण के रूप में देखा जा सकता है और एक चालक द्वारा नियंत्रित किया जा सकता है, तो आपको वर्तमान कर्नेल पर बहुत अधिक भाग्य नहीं होगा।


ऐसा लगता है कि यह USB डिवाइस को लगातार संचालित होने का कारण बनेगा ... (?) इस काम के बाद मेरे द्वारा कैसे बिजली फिर से शुरू की जानी चाहिए? मेरा लक्ष्य डिवाइस को एक बार पुनरारंभ करना है, न कि इसके निलंबन कॉन्फ़िगरेशन को स्थायी रूप से बदलना।
Matanster

4
एक निलंबित डिवाइस को फिर से शुरू करने के लिए , आप फिर से "ऑटोसस्पेंड" के साथ अक्षम कर सकते हैं echo "on" > "/sys/bus/usb/devices/usbX/power/control", लेकिन मुझे लगता है कि आपको मूल उद्देश्य को समझने की आवश्यकता है। ऑटोससपेंड की सुविधा यहां केवल निष्क्रिय उपकरणों को कम-बिजली की स्थिति में प्रवेश करने में सक्षम बनाने के लिए है (जहां यह बंद हो सकता है), केवल बाद में फिर से शुरू करने की आवश्यकता होने पर या तो मेजबान या किसी बाहरी घटना से। ऐसा होता है (या होना चाहिए) स्वचालित रूप से। पोर्ट ही वास्तव में कभी नहीं बंद कर दिया है। वास्तव में, डॉक्स पढ़ते हैं ;)
tlwhitec

4
मैं पुष्टि कर सकता हूँ कि यह कर्नेल के साथ काम करता है> 3.10। बस यह सुनिश्चित करना होगा कि आप जिस डिवाइस "आईडी" का उपयोग कर रहे हैं वह सही है: dmesg | grep "usb"और "यूएसबी" के बाद नंबर का उपयोग करें, उदाहरण के लिए: usb 2-4.4: SerialNumber: A0848020आप उपयोग करेंगे /sys/bus/usb/devices/2-4.4/power/...:। इसके अलावा, सुनिश्चित करें कि डिवाइस उपयोग में नहीं है। मैंने इस प्रक्रिया को सरल बनाने के लिए
lep

क्या इस कॉन्फ़िगरेशन को सहेजने का कोई तरीका है ताकि हर बार इसे प्लग इन करने से चूक वापस न हो? मेरे पास एक उपकरण है जिसे चार्ज करने के लिए मुझे "चालू" पर पावर कंट्रोल सेट करना होगा।
Quickblueblur

@quickblueblur मुझे एक udev नियम की तरह लगता है ।
tlwhitec

24

मैंने इन समाधानों को पाया है कि कम से कम कॉन्फ़िगर टर्मिनस FE 1.1 USB हब चिप के लिए कम से कम काम करें:

1. हब के सभी USB पोर्ट पर बिजली बंद करने के लिए, आप कर्नेल के उपयोग से हब को बंद कर सकते हैं:

echo "1-4.4.4" > /sys/bus/usb/drivers/usb/unbind

सत्ता को वापस चालू करने के लिए - आप इसका उपयोग करके वापस बांध सकते हैं

echo "1-4.4.4" > /sys/bus/usb/drivers/usb/bind

2. प्रत्येक बंदरगाह पर अलग-अलग बिजली की चाल व्यक्तिगत रूप से पेचीदा होती है: मैं प्रत्येक बंदरगाह को नियंत्रित करने के लिए शक्ति का उपयोग करने में सक्षम था - लेकिन यह एक नकारात्मक पहलू के साथ आता है: शक्ति पहले usbdevfs को डिस्कनेक्ट कर देती है, जो USB उपकरणों के सभी को सिस्टम में डिस्कनेक्ट करने का कारण बनता है, कम से कम ubuntu पर :

usb_ioctl.ioctl_code = USBDEVFS_DISCONNECT;
rc = ioctl(fd, USBDEVFS_IOCTL, &usb_ioctl);

इस ioctlअक्षम के साथ मैं सभी डिवाइसों को अलग किए बिना व्यक्तिगत पोर्ट पावर को बंद करने में सक्षम था - लेकिन शक्ति तुरंत (शायद एक असमान डिवाइस को देखने के कारण कर्नेल के कारण) वापस चली जाती है जो यूएसबी डिवाइस को "कोल्ड रिस्टार्ट" करने का कारण बनती है जो कि मैं है आम तौर पर करना चाहता था। मेरी खिंची हुर्इ ताकत यहां है


बाइंड / अनबाइंड प्रविष्टियों को लिनक्स कर्नेल 2.6.34, ICH8 चिपसेट और उबंटू 10.04 पर काम करने की पुष्टि की जाती है।
user1357196

5
बाइंड / अनबाइंड चिपसेट की परवाह किए बिना यूएसबी पोर्ट को पावरऑफ नहीं करता है। डिवाइस को अभी भी बिजली मिलती है ...
थीमआई still ’४१४’ १४:४१

1
माउस लेजर बंद है, कीबोर्ड कैंट टाइप, मॉडेम ब्लिंकिंग - मेरे प्लेटफॉर्म पर सब अच्छा है
eri

24

Intel से PowerTOP आपको वास्तविक समय में USB बाह्य उपकरणों जैसे उपकरणों को टॉगल करने की अनुमति देता है। इन्हें ables ट्यूनबेल ’कहा जाता है।

sudo apt install powertop
sudo powertop
  • 'टूनेबल्स ’पर टैब करें।
  • अपने डिवाइस पर नीचे स्क्रॉल करें।
  • बिजली बचत मोड ( अच्छा / बुरा ) टॉगल करने के लिए हिट दर्ज करें

यहां छवि विवरण दर्ज करें

ध्यान दें कि खराब का मतलब है कि डिवाइस हमेशा चालू है। पूर्व निर्धारित निष्क्रिय समय (डिफ़ॉल्ट 2000ms है) के बाद टॉगलिंग टू गुड डिवाइस को बंद कर देगा।

इन परिवर्तनों को स्थायी बनाने के तरीके के विवरण के लिए PowerTOP डॉक्स देखें ।
यह आपके लिए कॉन्फिग स्क्रिप्ट बनाता है (इस थ्रेड पर अन्य पोस्टरों द्वारा वर्णित के अनुसार बहुत अधिक)।

नोट: ये स्क्रिप्ट USB पिन पावर (जो हमेशा चालू रहती है) को प्रभावित नहीं करती हैं।
ये केवल डिवाइस को सक्रिय और निष्क्रिय करने के लिए ड्राइवर प्रोटोकॉल भेजते हैं।

यदि आप पिन पावर को नियंत्रित करना चाहते हैं, तो आप या तो एक समर्थित स्मार्ट यूएसबी हब का उपयोग कर सकते हैं, या बेहतर अभी तक एक माइक्रोकंट्रोलर


2
बहुत बढ़िया! : DI को लगता है कि यह ऐसा करने का उपयोगकर्ता का सबसे आसान तरीका है (हालांकि निचले स्तर पर यह अन्य उत्तरों में उल्लिखित के समान ही संचालन करता है।) धन्यवाद, और आपका जवाब शीर्ष पर पहुंच सकता है;)
Matyas

1
आपके उत्तर के लिए धन्यवाद। मुझे पूर्व निर्धारित निष्क्रिय समय बचाने के लिए खुदाई कहां से शुरू करनी होगी?
mikezter

जैसा कि पिछले पोस्टरों द्वारा उल्लेख किया गया है, कर्नेल डॉक्स यहां हैं: kernel.org/doc/Documentation/usb/power-management.txt
डोमिनिक सेरिसानो

10

आप संगत USB हब के लिए प्रति पोर्ट USB पावर को नियंत्रित करने के लिए मेरे टूल uhubctl का उपयोग कर सकते हैं ।


osx पर ठीक उपकरण, लेकिन मेरे लिए डेबियन पर कोई 'समर्थित स्मार्ट हब' नहीं है।
घबराना

1
लिनक्स पर, आपको इसे रूट (sudo के तहत) के रूप में चलाने की जरूरत है, या udev डिवाइस अनुमतियों को कॉन्फ़िगर करने की। यह भी संभव है कि आपके लिनक्स होस्ट में संगत हब न हों।
mvp

यह एक 'बीगल बोन ग्रीन' है।
घबराना

7

मैं ऐसा करना चाहता था, और अपने USB हार्डवेयर के साथ मैं नहीं कर सकता था। मैंने यह करने के लिए एक आसान तरीका लिखा है:

http://pintant.cat/2012/05/12/power-off-usb-device/

थोड़े तरीके से: मैंने दूसरे USB केबल के V CC को खोलने / बंद करने के लिए USB रिले का इस्तेमाल किया ...


5
echo '2-1' |sudo tee /sys/bus/usb/drivers/usb/unbind

ubuntu के लिए काम करता है


1
तुम्हारा केवल मेरे मामले पर काम कर रहा है। मैं एक acer बनाने वाला लैपटॉप 12.04LTS Ubuntu का उपयोग कर रहा हूँ।
रिकोइकोचेट

1
डिवाइस को पावरऑफ़ नहीं करता है, केवल इसे डिवाइस सूची से निकालता है। मैं यूएसबी पोर्ट को पावरऑफ कैसे कर सकता हूं?
रस्टीक्स

1
यह भी एकमात्र समाधान है जो मेरे लिए एक Wacom Intuos5 टच एम टैबलेट को बंद करने के लिए इसे अनप्लग किए बिना काम करने के लिए काम करता है (फेडोरा 28 पर)
user1738984

2

USB 5v पावर हमेशा चालू रहता है (तब भी जब कंप्यूटर बंद हो जाता है, कुछ कंप्यूटरों पर और कुछ बंदरगाहों पर।) आपको शायद किसी प्रकार के स्विच के साथ एक Arduino प्रोग्राम करना होगा, और USB से सीरियल लाइब्रेरी के माध्यम से इसे नियंत्रित करना होगा। संगणक।

दूसरे शब्दों में, इस स्विच ट्यूटोरियल और Arduino के लिए सीरियल लिबरी के माध्यम से संवाद करने पर इस ट्यूटोरियल का एक संयोजन USB के माध्यम से प्लग किया गया है।


2

इस कारण से लोग इस तरह के सवाल पोस्ट करते हैं क्योंकि यह वास्तव में " EVIL " - USB ऑटो-सस्पेंड " फीचर " के कारण है।

ऑटो ने एक "निष्क्रिय" USB डिवाइस के लिए हवाओं को निलंबित कर दिया और जब तक कि डिवाइस का ड्राइवर इस सुविधा का सही ढंग से समर्थन नहीं करता, तब तक डिवाइस अप्राप्य हो सकती है। इसलिए USB पोर्ट को चालू / बंद करना समस्या का एक लक्षण है, स्वयं में समस्या नहीं है।

मैं आपको दिखाता हूं कि कैसे ऑटो-सस्पेंड को GLOBALLY अक्षम करें, USB पोर्ट को ऑन और ऑफ करने के लिए मैन्युअल रूप से आवश्यकता को नकारते हुए:

संक्षिप्त जवाब:

आप संपादित करें "करने की जरूरत नहीं है autosuspend_delay_ms यूएसबी स्वतःस्थगित विश्व स्तर पर और निष्क्रिय किया जा सकता:" व्यक्तिगत रूप से लगातार निम्न कमांड का प्रयोग:

sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/&usbcore.autosuspend=-1 /' /etc/default/grub

update-grub

systemctl reboot

एक उबंटू 18.04 स्क्रीन-ग्रैब "लॉन्ग आंसर" के अंत में दिखाता है कि मेरे परिणाम कैसे प्राप्त हुए।

लंबा जवाब:

यह सही है कि USB पावर मैनेजमेंट कर्नेल डॉक्यूमेंटेशन को ऑटोसस्पेंड कहा जाता है और इसके स्थान पर USB ऑटोसस्पेंड को निष्क्रिय करने के लिए " autosuspend_delay_ms " का उपयोग किया जाता है:

"In 2.6.38 the "autosuspend" file will be deprecated
and replaced by the "autosuspend_delay_ms" file."

हालांकि मेरी परीक्षण है कि सेटिंग का पता चलता है usbcore.autosuspend=-1में / etc / default / grub नीचे के रूप में एक के रूप में इस्तेमाल किया जा सकता वैश्विक कार्यक्षमता- आप करते यूएसबी स्वतःस्थगित के लिए टॉगल नहीं संपादित व्यक्ति "की जरूरत है autosuspend_delay_ms " फ़ाइलें।

एक ही दस्तावेज़ राज्यों ऊपर "0" के एक मूल्य जुड़ा हुआ है सक्षम है और एक नकारात्मक मूल्य है विकलांग :

power/autosuspend_delay_ms

    <snip> 0 means to autosuspend
    as soon as the device becomes idle, and negative
    values mean never to autosuspend.  You can write a
    number to the file to change the autosuspend
    idle-delay time.

एनोटेट किए गए उबंटू 18.04 में स्क्रीन-ग्रैब नीचे दिखाया गया है कि मेरे परिणाम कैसे प्राप्त किए गए (और प्रतिलिपि प्रस्तुत करने योग्य), कृपया डिफॉल्ट टिप्पणी करें "0" ( सक्षम ) ऑटोससपेंड_डेल_में

फिर ध्यान दें कि केवलusbcore.autosuspend=-1 ग्रब में स्थापित करने के बाद, रिबूट के बाद ये मूल्य अब नकारात्मक ( अक्षम ) हैं। यह मुझे व्यक्तिगत मूल्यों को संपादित करने की परेशानी से बचाएगा और अब यूएसबी ऑटोसस्पेंड को अक्षम करने वाली स्क्रिप्ट कर सकता है।

शिकंजाब: विश्व स्तर पर संपादन से पहले और बाद में ऑटोसस्पेंड मान

आशा है कि यह USB ऑटोसस्पेंड को थोड़ा आसान और अधिक स्क्रिप्ट योग्य अक्षम करता है-


1

मुझे अपना एंड्रॉइड फोन कनेक्ट करते समय एक समस्या थी, मैं अपने फोन को चार्ज नहीं कर सका क्योंकि पावर स्विच चालू था और फिर बंद हो गया ... पावरटॉप ने मुझे इस सेटिंग को ढूंढने दिया और समस्या को ठीक करने के लिए उपयोगी था (ऑटो मूल्य समस्या पैदा कर रहा था):

echo 'on' | sudo tee /sys/bus/usb/devices/1-1/power/control
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.