ปิดไฟเป็นพอร์ต usb หรือปิดเครื่องไปยังระบบย่อย usb ทั้งหมด


28

ฉันมีหลอดไฟ USB ที่ฉันซื้อมาเป็นพิเศษเพื่อปิดการทำงานของโปรแกรมในเวลาหนึ่งดังนั้นฉันจึงต้องถอดปลั๊กไฟออกที่พอร์ต usb ของมัน

ฉันเชื่อว่าฉันมีฮับ usb ที่ usb6 หลอดไฟเชื่อมต่อกับหนึ่งในพอร์ตในฮับนี้:

#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-hub

ฉันก็พยายามติดตามสิ่งนี้ด้วย :

แต่ผลลัพธ์ของการ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

ข้อผิดพลาดทางไวยากรณ์คืออะไร ในกรณีนี้ไม่จำเป็นต้องอ้างสตริงง่าย ๆ ว่า 'suspend', 'disabled' หากคุณมีนิสัยชอบพูดที่ดีสำหรับคุณ แต่ในกรณีนี้มันไม่จำเป็น
user84207

ฉันพยายามรัดlsusb -tสายและไม่พบสิ่งใดมีประโยชน์ภายในเวลาที่ฉันต้องตรวจแก้จุดบกพร่อง ตอนนี้ฉันไม่มีเวลาพอที่จะหาจุดบกพร่องใน lsub และตอนนี้ฉันไม่สามารถทำซ้ำมันได้ดังนั้นมันอาจขึ้นอยู่กับอุปกรณ์ที่เสียบอยู่ฉันจะต้องรอกลับบ้านเพื่อลอง ทำซ้ำมัน
user84207

คำตอบ:


20

คุณสามารถใช้ยูทิลิตี - ยูทิลิตี้บรรทัดคำสั่งเพื่อควบคุมพลังงาน USB ต่อพอร์ตสำหรับฮับ USB ที่ใช้งานร่วมกันได้

ใช้งานได้เฉพาะกับฮับที่รองรับการเปลี่ยนพลังงานแบบต่อพอร์ต แต่โปรดทราบว่าเมนบอร์ดที่ทันสมัยจำนวนมากมีฮับ USB ที่รองรับคุณสมบัตินี้

เพื่อรวบรวม:

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

หากต้องการแสดงสถานะของฮับทั้งหมดตำแหน่งและพอร์ตที่สามารถควบคุมได้โดย uhubctl:

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 ใหม่บางอันทำงานได้ดีจริง ๆ

อ่านเพิ่มเติมได้ที่นี่

การเปิดเผยข้อมูล - ฉันเป็นผู้เขียน uhubctl


ข้อมูลเพิ่มเติมเล็กน้อยจะดี โดยเฉพาะอย่างยิ่งเนื่องจากคุณเป็นผู้เขียนและไม่ใช่ตัวอย่างแพคเกจมาตรฐานของการใช้งานจะเกิดอะไรขึ้นถ้าความสามารถ / ข้อ จำกัด ใด ๆ ที่มีอยู่มีความเสี่ยงหากมีลิงก์เฉพาะคำตอบจะไม่ได้รับการแนะนำ
Zachary Brady

2
การคัดลอก / วางไฟล์ READMEทั้งหมดนั้นไม่ได้เป็นความคิดที่ดีสำหรับฉัน มันมีคำอธิบายทั้งหมด
mvp

ไม่ readme ทั้งหมดจะมากเกินไป คุณสามารถใช้โปรแกรมเพื่อแก้ปัญหาที่เกิดขึ้นในคำถามได้อย่างไร และหากมีข้อแม้ใด ๆ สำหรับกรณีการใช้งานเฉพาะนั้นไม่ใช่แอปพลิเคชันทั้งหมด ขออภัยถ้าฉันยังไม่ชัดเจนในความคิดเห็นแรกของฉัน
Zachary Brady

1
FYI: วิธีนี้ใช้ได้กับตระกูลคอนโทรลเลอร์ Renovas UPD720202 ของโฮสต์คอนโทรลเลอร์ PCIe-USB :) ขอบคุณ
Wossname

ขอบคุณ @ Wossname คุณคิดที่จะเพิ่มเป็นปัญหาใหม่ที่github.com/mvp/uhubctl/issuesหรือไม่? ฉันจะอัปเดตรายการอุปกรณ์ที่รองรับ
mvp

20

ดูที่การควบคุมแหล่งจ่ายไฟ USB (เปิด / ปิด) ด้วย linuxรุ่นสั้นสำหรับเมล็ดใหม่ "suspend" ไม่ทำงานอีกต่อไป:

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

แต่มันไม่ได้ตัดพลังงานอย่างแท้จริงมันส่งสัญญาณอุปกรณ์ไปยัง poweroff มันขึ้นอยู่กับอุปกรณ์ที่จะใช้การจัดการพลังงานและทำสิ่งที่ถูกต้อง

คุณมีรายละเอียดจำนวนมากในเอกสารอย่างเป็นทางการในเคอร์เนลที่นั่นมันอธิบายไฟล์ต่าง ๆ ใน/sys/bus/usb/devices/.../power/และวิธีการจัดการอุปกรณ์และพอร์ต

สำหรับสิ่งที่ไม่ใช่อุปกรณ์ usb จริง ๆ (โคมไฟ usb ของคุณแสดงเป็น lsusb หรือไม่) คุณหมดความโชคดีฉันลองใช้ตัวเองด้วยหลอด usb และด้วยตัวบันทึก gps ที่ชาร์จแบตเตอรี่และถ่ายโอนข้อมูลผ่าน usb ที่แสดง ขึ้นเป็น cp210x usb เป็นซีเรียลและไม่มี poweroff ฉันสามารถ "ปลด" จีพีเอสด้วยecho '5-4.6' > /sys/bus/usb/drivers/usb/unbindและเชื่อมต่ออีกครั้งด้วยecho '5-4.6' > /sys/bus/usb/drivers/usb/bindแต่การชาร์จแบตเตอรี่ ligth เปิดอยู่เสมอ

แต่ดูเหมือนว่าฮับบางคนทำมันอย่างถูกต้อง


0

มันเป็นไม่จำเป็นที่จะต้องไม่ซ้ำกันแก้ไข " autosuspend_delay_ms " ไฟล์

USB autosuspend สามารถปิดการใช้งานได้ทั่วโลกและเป็นส่วนตัวด้วย:

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

update-grub

systemctl reboot

ใช้เวลาสองสามวินาทีเพื่อทดสอบการแก้ไขที่เสนอและตรวจสอบความถูกต้องของมัน

Ubuntu 18.04ข้อเขียนภาพด้านล่างแสดงให้เห็นถึงการปรับเปลี่ยนเป็นอธิบายข้างต้นซึ่งผลในการเป็นเจ้าภาพการรีบูตเครื่องด้วยALLตั้งค่า USB autosuspend ปิดใช้งาน:

การสาธิต Ubuntu 18.04 ทั่วโลกปิดการใช้งานการปิด USB อัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.