यूएसबी पोर्ट के लिए बिजली बंद करना। या पूरे USB सबसिस्टम को पावर बंद करें


28

मेरे पास एक usb लैंप है, जिसे मैंने विशेष रूप से एक निश्चित समय पर प्रोग्रामेटिक रूप से बंद करने के लिए खरीदा है, इस प्रकार मुझे इसके usb पोर्ट की शक्ति को हटाने की आवश्यकता है।

मेरा मानना ​​है कि हमारे पास usb6 में usb-hub है। दीपक इस हब के किसी एक पोर्ट से जुड़ा है:

#myhost$ lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
...
Bus 008 Device 006: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub

यहाँ मैंने कोशिश की है:

दो समाधान यहां हैं , पहला सुझाव:

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

लेकिन मुझे write error: Invalid argumentलिखने के लिए कोशिश करते समय मिलता है /sys/bus/usb/devices/usb1/power/level:

$sudo bash -c 'echo disabled > /sys/bus/usb/devices/usb6/power/wakeup'
$echo suspend|sudo tee /sys/bus/usb/devices/usb6/power/level suspend
tee: /sys/bus/usb/devices/usb6/power/level: Invalid argument
$sudo bash -c 'echo suspend> /sys/bus/usb/devices/usb6/power/level'bash: line 0: echo: write error: Invalid argument

दूसरा उपाय:

sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'

जो usb हब डिवाइस को पावर बंद करता है।

मैं भी पालन करने के लिए कोशिश कर रहा था इस :

लेकिन lsusb -tसिर्फ हैंग का आउटपुट :

$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C

इससे मुझे '2-1.1' भाग प्राप्त करने के लिए इस विधि का उपयोग करने से रोकता है:

echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

क्या यह जानकारी प्राप्त करने का कोई वैकल्पिक तरीका है?

वैकल्पिक रूप से, क्या संपूर्ण USB सबसिस्टम में बिजली बंद करने का कोई तरीका है? कुछ पसंद है modprobe -r usb_etc?

मेरी गिरी है:

$uname -r
3.2.0-4-amd64

क्या वाक्यविन्यास त्रुटियां हैं? इस स्थिति में, सरल स्ट्रिंग्स 'सस्पेंड', 'अक्षम' को उद्धृत करने की आवश्यकता नहीं है। यदि आप उद्धृत करने की आदत में हैं, तो आपके लिए अच्छा है, लेकिन इस मामले में इसकी आवश्यकता नहीं है।
user84207

मैंने lsusb -tकॉल को स्ट्रगल करने की कोशिश की और मुझे उस समय डिबग करने के लिए उपयोगी कुछ भी नहीं मिला। मेरे पास ईमानदारी से lsub में बग ढूंढने के लिए अभी समय नहीं है, और मैं अभी इसे पुन: पेश भी नहीं कर सकता हूं, इसलिए यह संभवत: उन उपकरणों पर निर्भर करता है जो प्लग-इन हैं। मुझे कोशिश करने के लिए घर जाने के लिए इंतजार करना होगा। इसे पुन: पेश करें।
user84207

जवाबों:


20

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

यह केवल उन हब पर काम करता है जो प्रति पोर्ट पावर स्विचिंग का समर्थन करते हैं, लेकिन ध्यान दें कि कई आधुनिक मदरबोर्ड में यूएसबी हब हैं जो इस सुविधा का समर्थन करते हैं।

संकलन करना:

git clone https://github.com/mvp/uhubctl
cd uhubctl
make

सभी हब की स्थिति, उनके स्थानों और बंदरगाहों को सूचीबद्ध किया जा सकता है, जिन्हें उहुब्क्ताल द्वारा नियंत्रित किया जा सकता है:

uhubctl

एकल संगत हब के पोर्ट 5 पर बिजली बंद करने के लिए:

uhubctl -a 0 -p 5

यदि आपके पास एक से अधिक संगत हब जुड़ा हुआ है, तो -lइसे नियंत्रित करने के लिए हब स्थान निर्दिष्ट करने के लिए उपयोग करें:

uhubctl -a 0 -p 5 -l 3-1.2

तब बिजली बंद करने के लिए:

uhubctl -a 2 -p 5

ध्यान दें कि USB 3.0 हब भी समर्थित हैं, और कुछ नए USB 3.0 हब वास्तव में अच्छी तरह से काम करते हैं।

पढ़ें अधिक यहाँ

प्रकटीकरण - मैं उथुक्टल का लेखक हूं।


थोड़ी और जानकारी अच्छी होगी। विशेष रूप से क्योंकि आप लेखक हैं और यह इसका उपयोग करने के तरीके का एक मानक पैकेज उदाहरण नहीं है, क्या होगा यदि इसकी कोई क्षमताएं / सीमाएं हैं, यदि कोई है तो जोखिम, लिंक केवल उत्तर पसंद नहीं हैं।
ज़ाचरी ब्रैडी

2
खैर, पूरी README फाइल कॉपी / पेस्ट करना मेरे लिए उज्ज्वल विचार जैसा नहीं लगता है। इसमें सभी विवरणों को समझाया गया है।
एमवीपी

नहीं, पूरा रेडीम अत्यधिक होगा। सवाल में हल की गई समस्या को हल करने के लिए आप कैसे प्रोग्राम का उपयोग कर सकते हैं। और अगर उस विशेष उपयोग के मामले के लिए कोई चेतावनी है, तो पूरे आवेदन नहीं। क्षमा करें यदि मैं अपनी पहली टिप्पणी में स्पष्ट नहीं था।
ज़ाचरी ब्रैडी

1
FYI करें: यह तरीका PCIe-USB होस्ट कंट्रोलर के Renesas UPD720202 परिवार के लिए काम करता है। :) धन्यवाद।
वॉजनामे

धन्यवाद @Wossname क्या आप इसे github.com/mvp/uhubctl/issues पर नए मुद्दे के रूप में जोड़ रहे हैं ? मैं समर्थित डिवाइस सूची को अपडेट करूंगा।
एमवीपी

20

नए गुठली "सस्पेंड" के लिए यूएसबी पावर सप्लाई (ऑन / ऑफ) को लिनेक्स के साथ नियंत्रित करना देखें "सस्पेंड" अब काम नहीं करता है:

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

लेकिन यह शाब्दिक रूप से बिजली में कटौती नहीं करता है, यह डिवाइस को पॉवरऑफ को इंगित करता है, यह पावर प्रबंधन को लागू करने और सही काम करने के लिए डिवाइस पर निर्भर है।

आपके पास कर्नेल में आधिकारिक दस्तावेज में बहुत सारे विवरण हैं , वहां यह विभिन्न फाइलों को बताता है /sys/bus/usb/devices/.../power/कि डिवाइस और पोर्ट कैसे प्रबंधित करें।

उन चीजों के लिए जो वास्तविक usb डिवाइस नहीं हैं (क्या आपका usb लैंप lsusb में दिखाई देता है?) आप भाग्य से बाहर हैं, मैंने अपने आप को एक usb लैंप के साथ और एक gps लकड़हारा के साथ आज़माया है जो इसकी बैटरी को चार्ज करता है और usb से डेटा ट्रांसफर करता है जो दिखाता है धारावाहिक के लिए एक cp210x यूएसबी के रूप में, और न ही पॉवरऑफ करता है। मैं जीपीएस के साथ "डिस्कनेक्ट" कर सकता हूं echo '5-4.6' > /sys/bus/usb/drivers/usb/unbindऔर इसे फिर से कनेक्ट कर सकता हूं echo '5-4.6' > /sys/bus/usb/drivers/usb/bindलेकिन बैटरी चार्जिंग लिग्थ हमेशा चालू रहती है।

लेकिन ऐसा लगता है कि कुछ हब इसे ठीक से करते हैं


0

यह है नहीं व्यक्तिगत रूप से संपादित करें "करने के लिए आवश्यक autosuspend_delay_ms " फ़ाइलें।

यूएसबी स्वतःस्थगित निष्क्रिय किया जा सकता विश्व स्तर पर और लगातार साथ:

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

update-grub

systemctl reboot

प्रस्तावित निर्धारण का परीक्षण करने और इसकी शुद्धता को सत्यापित करने के लिए कुछ सेकंड लगते हैं।

नीचे दिया गया एक Ubuntu 18.04 एनोटेट स्क्रीनशॉट इसे ऊपर बताए अनुसार दिखाता है, जिसके परिणामस्वरूप होस्ट सभी USB ऑटोसस्पेंड सेटिंग्स के साथ रिबूट होता है :

उबंटू 18.04 डेमो विश्व स्तर पर यूएसबी ऑटोसस्पेंड को अक्षम कर रहा है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.