uhubctl เป็นยูทิลิตี้สำหรับควบคุมพลังงาน USB ต่อพอร์ตบนฮับ USB อัจฉริยะ ฮับอัจฉริยะถูกกำหนดให้เป็นฮับที่ใช้การสลับพลังงานต่อพอร์ต
แนวคิดดั้งเดิมสำหรับโค้ดนี้ได้รับแรงบันดาลใจจาก hub-ctrl.c โดย Niibe Yutaka: https://www.gniibe.org/development/ac-power-control-by-USB-hub
โปรดทราบว่ามีฮับเพียงไม่กี่ตัวที่รองรับการสลับพลังงานต่อพอร์ต บางส่วนไม่ได้ผลิตแล้วและหาได้ยาก
นี่คือรายการฮับ USB ที่เข้ากันได้ที่รู้จัก:
| ผู้ผลิต | ผลิตภัณฑ์ | พอร์ต | ยูเอสบี | วิด:พีไอดี | ปล่อย | EOL |
|---|---|---|---|---|---|---|
| Acer | จอภาพ BE270U (ดู) | 4 | 3.0 | 2109:2811 | 2559 | |
| อเมซอนเบสิค | HU3641V1 (ปัญหา RPi) | 4 | 3.0 | 2109:2811 | 2013 | |
| อเมซอนเบสิค | HU3770V1 (ปัญหา RPi) | 7 | 3.0 | 2109:2811 | 2013 | |
| อเมซอนเบสิค | HU9003V1EBL, HUC9003V1EBL | 7 | 3.1 | 2109:2817 | 2018 | |
| อเมซอนเบสิค | HU9002V1SBL, HU9002V1EBL, HU9002V1ESL (หมายเหตุ) | 10 | 3.1 | 2109:2817 | 2018 | |
| อเมซอนเบสิค | HUC9002V1SBL, HUC9002V1EBL, HUC9002V1ESL | 10 | 3.1 | 2109:2817 | 2018 | |
| อเมซอนพื้นฐาน | U3-7HUB (ใช้งานได้กับพอร์ตชาร์จ 1 พอร์ตเท่านั้น) | 7 | 3.0 | 2109:2813 | 2020 | |
| อังเคอร์ | AK-68ANHUB-BV7A-0004 (หมายเหตุ) | 7 | 3.0 | 2109:0812 | 2014 | |
| แอปเปิล | Pro Display XDR MWPE2LL/A (ฮับ USB ภายใน) | 4 | 2.0 | 05AC:9139 | 2019 | |
| แอปเปิล | จอแสดงผล Thunderbolt 27" (ฮับ USB ภายใน) | 6 | 2.0 | 2554 | 2559 | |
| แอปเปิล | แป้นพิมพ์ USB พร้อมแป้นตัวเลข (ฮับ USB ภายใน) | 3 | 2.0 | 2554 | ||
| อัสซุส | เมนบอร์ด Z77 Sabertooth (ฮับ USB ออนบอร์ด) | 6 | 2.0 | 2555 | ||
| อัสซุส | เมนบอร์ด Z87-PLUS (ฮับ USB ออนบอร์ด) | 4 | 3.0 | 2013 | 2559 | |
| ออคีย์ | ซีบี-ซี59 | 4 | 3.0 | 2109:2813 | 2017 | |
| บี+บี สมาร์ทวอกซ์ | UHR204 | 4 | 2.0 | 0856:DB00 | 2013 | |
| บี+บี สมาร์ทวอกซ์ | USH304 | 4 | 3.0 | 04B4:6506 | 2017 | 2019 |
| บาสเลอร์ | 2000036234 | 4 | 3.0 | 0451:8046 | 2559 | |
| เบลคิน | F5U101 | 4 | 2.0 | 0451:2046 | 2548 | 2010 |
| เบลคิน | F5U238UKCRL-MOB | 4 | 2.0 | 0409:0059 | 2547 | 2010 |
| เบ็นคิว | จอภาพ PD2700U 4K (ใช้งานได้ในโหมด USB2 เท่านั้น) | 4 | 3.0 | 05E3:0610 | 2018 | |
| เบ็นคิว | PD3220U | 4 | 3.1 | 05E3:0610 | 2019 | |
| ไบเทค | BT-UH340 (คำเตือน) | 4 | 3.0 | 2109:8110 | 2010 | |
| เซ็นเทค | CT-USB4HUB ลองฮับอีกครั้ง | 4 | 3.0 | 0424:2744 | 2017 | |
| เซอร์กิตโก | Beagleboard-xM (ฮับ USB ภายใน) | 4 | 2.0 | 0424:9514 | 2010 | |
| คลับ3ดี | CSV-3242HD สถานีเชื่อมต่อจอแสดงผลคู่ | 4 | 3.0 | 2109:2811 | 2558 | |
| คูลเกียร์ | ยูเอสบีจี-12U2ML | 12 | 2.0 | 05e3:0607 | 2558 | |
| ไซเปรส | CY4608 HX2VL devkit (หมายเหตุ) | 4 | 2.0 | 04B4:6570 | 2555 | |
| ดี-ลิงค์ | DUB-H4 รอบ D,E (สีดำ) หมายเหตุ: ไม่รองรับรอบ A,C,F | 4 | 2.0 | 05E3:0608 | 2555 | |
| ดี-ลิงค์ | DUB-H7 rev A (สีเงิน) | 7 | 2.0 | 2001:F103 | 2548 | 2010 |
| ดี-ลิงค์ | DUB-H7 รอบ D,E (สีดำ) ไม่รองรับ Rev B,C,F,G | 7 | 2.0 | 05E3:0608 | 2555 | |
| เดลล์ | P2416D 24" QHD Monitor (หมายเหตุ) | 4 | 2.0 | 2017 | ||
| เดลล์ | S2719DGF 27" WQHD Gaming-Monitor | 5 | 3.0 | 0424:5734 | 2018 | |
| เดลล์ | จอ LCD UltraSharp 1704FPT 17" | 4 | 2.0 | 0424:A700 | 2548 | 2558 |
| เดลล์ | จอ LCD UltraSharp U2415 24" | 5 | 3.0 | 2014 | ||
| เดลล์ | UltraSharp U3419W จอภาพโค้ง 34" | 6 | 3.0 | 2020 | ||
| เดลล์ | Wyse 3040 (-f จำเป็น) | 6 | 3.0 | 2017 | ||
| ดีล็อค | 62537 | 4 | 3.0 | 2017 | 2021 | |
| ดีล็อค | 87445 (หมายเหตุ) | 4 | 2.0 | 05E3:0608 | 2552 | 2013 |
| อีเล็คคอม | U2H-G4S | 4 | 2.0 | 2549 | 2554 | |
| กิกะไบต์ | จอภาพ G27Q (ดู | 4 | 3.0 | 2109:0817 | 2020 | |
| ระดับโลก | เอสเพรสโซบิน SBUD102 V5 | 1 | 3.0 | 1D6B:0003 | 2017 | |
| ฮาร์ดเคอร์เนล | ODROID-C4 (หมายเหตุ) | 4 | 3.0 | 2020 | ||
| เทคโนโลยีฮอว์คิง | UH214 | 4 | 2.0 | 2546 | 2551 | |
| ฮิวเลตต์ แพ็กการ์ด | ด็อค USB-C G5 5TW10AA | 5 | 3.0 | 03F0:076B | 2019 | |
| ฮิวเลตต์ แพ็กการ์ด | P5Q58UT | 3 | 3.0 | 2019 | ||
| อินาเทค | HB2025A (เฉพาะ USB2) | 4 | 3.1 | 2109:2822 | 2021 | |
| ไอโอไอ | U3H415E1 | 4 | 3.0 | 2555 | ||
| j5create | JUH377 (หมายเหตุ) | 7 | 3.0 | 2559 | ||
| j5create | JUH470 (หมายเหตุ) | 3 | 3.0 | 05E3:0610 | 2014 | |
| ระบบคั้นน้ำผลไม้ | 6HUB-01 | 7 | 3.0 | 0BDA:0411 | 2014 | 2018 |
| คุนบัส GmbH | RevPi เชื่อมต่อ (+) / S / SE | 2 | 2.0 | 0424:9514 | 2018 | |
| คุนบัส GmbH | RevPi เชื่อมต่อ 4 | 2 | 3.0 | 2022 | ||
| คุนบัส GmbH | RevPi Core 3 / S / SE | 2 | 2.0 | 0424:9514 | 2017 | |
| แอลจี อีเล็คทรอนิคส์ | จอภาพ 27MD5KL-B | 4 | 3.0 | 043E:9A60 | 2019 | |
| แอลจี อีเล็คทรอนิคส์ | จอภาพ 27GL850-B | 4 | 3.0 | 0451:8142 | 2019 | |
| แอลจี อีเล็คทรอนิคส์ | จอมอนิเตอร์ 27UK850-W | 2 | 3.0 | 2018 | ||
| แอลจี อีเล็คทรอนิคส์ | จอภาพ 27UN83A-W | 2 | 3.0 | 0451:8142 | 2020 | |
| แอลจี อีเล็คทรอนิคส์ | จอมอนิเตอร์ 38WK95C-W | 4 | 3.0 | 0451:8142 | 2018 | |
| เลอโนโว | ThinkPad อัลตร้า Docking Station (40A20090EU) | 6 | 2.0 | 17EF:100F | 2558 | |
| เลอโนโว | ThinkPad อัลตร้าด็อคกิ้งสเตชั่น (40AJ0135EU) | 7 | 3.1 | 17EF:3070 | 2018 | |
| เลอโนโว | ThinkPad X200 Ultrabase 42X4963 | 3 | 2.0 | 17EF:1005 | 2551 | 2554 |
| เลอโนโว | ThinkPad X6 Ultrabase 42W3107 | 4 | 2.0 | 17EF:1000 | 2549 | 2552 |
| เลอโนโว | ThinkPlus ฮับ USB-C 4-in-1 4X90W86497 | 3 | 3.0 | 2021 | ||
| เลอโนโว | จอภาพ ThinkVision T24i-10 | 4 | 2.0 | 17EF:0610 | 2018 | |
| เลอโนโว | USB-C ถึง 4 พอร์ต USB-A Hub | 4 | 2.0 | 17EF:103A | 2020 | |
| ลินดี้ | ตัวแปลงอนุกรม USB 4 พอร์ต | 4 | 1.1 | 058F:9254 | 2551 | |
| ลิงค์ซิส | USB2HUB4 (หมายเหตุ) | 4 | 2.0 | 2547 | 2010 | |
| เมพลิน | A08CQ | 7 | 2.0 | 0409:0059 | 2551 | 2554 |
| เมตาดอท | ดาสคีย์บอร์ด 4 | 2 | 3.0 | 2014 | ||
| ไมโครชิป | EVB9512 | 2 | 2.0 | 2552 | ||
| ไมโครชิป | EVB-USB2517 | 7 | 2.0 | 2551 | ||
| ไมโครชิป | EVB-USB2534BC | 4 | 2.0 | 2013 | ||
| ไมโครชิป | EVB-USB5807 | 7 | 3.0 | 2559 | ||
| โมซา | Uport-407 | 7 | 2.0 | 110A:0407 | 2552 | |
| เอ็นวิเดีย | Jetson Nano B01 (รายละเอียด) | 4 | 3.0 | 2019 | ||
| เอ็นวิเดีย | เจ็ตสัน ซาเวียร์ NX (รายละเอียด) | 4 | 3.0 | 2020 | ||
| ฟิดเจตส์ | HUB0003_0 | 7 | 2.0 | 1A40:0201 | 2017 | |
| ฟิลิปส์ | 346B1C UltraWide จอภาพโค้ง 34" | 4 | 3.0 | 05E3:0610 | 2019 | |
| เสียบปลั๊กได้ | USB3-HUB7BC | 7 | 3.0 | 2109:0813 | 2558 | |
| เสียบปลั๊กได้ | USB3-HUB7C (ใช้งานได้กับพอร์ตชาร์จ 2 พอร์ตเท่านั้น) | 7 | 3.0 | 2109:0813 | 2558 | |
| เสียบปลั๊กได้ | USBC-HUB7BC (ใช้งานได้กับพอร์ต 6/7 ไม่ใช่พอร์ตขวาสุด) | 7 | 3.0 | 2109:0817 | 2021 | |
| เสียบปลั๊กได้ | USB3-HUB10-C2 (ใช้งานได้กับพอร์ตชาร์จ 2 พอร์ตเท่านั้น) | 10 | 3.0 | 2014 | ||
| พอร์ตอิงค์ | NWUSB01 | 4 | 1.1 | 0451:1446 | 1999 | 2546 |
| ราสเบอร์รี่ปี่ | B+, 2B, 3B (ดูด้านล่าง) | 4 | 2.0 | 2554 | ||
| ราสเบอร์รี่ปี่ | 3B+ (ดูด้านล่าง) | 4 | 2.0 | 0424:2514 | 2018 | |
| ราสเบอร์รี่ปี่ | 4B (ดูด้านล่าง) | 4 | 3.0 | 2109:3431 | 2019 | |
| ราสเบอร์รี่ปี่ | 5 (ดูด้านล่าง) | 4 | 3.0 | 1d6b:0002 | 2023 | |
| เรเนซาส | uPD720202 คอนโทรลเลอร์โฮสต์ PCIe USB 3.0 | 2 | 3.0 | 2013 | ||
| โรสวิลล์ | อาร์ฮับ-210 | 4 | 2.0 | 0409:005A | 2554 | 2014 |
| โรสันเวย์ | RSH-518C (หมายเหตุ) | 7 | 3.0 | 2109:0817 | 2021 | |
| โรสันเวย์ | RSH-A10 (ดู) | 10 | 3.0 | 0bda:0411 | 2020 | |
| โรสันเวย์ | RSH-A13 (คำเตือน) | 13 | 3.1 | 2109:2822 | 2021 | |
| โรสันเวย์ | RSH-A16 (หมายเหตุ คำเตือน) | 16 | 3.0 | 0bda:0411 | 2020 | |
| โรสันเวย์ | RSH-A104 (เฉพาะ USB2) | 4 | 3.1 | 2109:2822 | 2022 | |
| โรสันเวย์ | RSH-A107 (หรือที่เรียกว่า ikuai A107-5) | 7 | 3.1 | 0bda:5411 | 2022 | |
| โรสันเวย์ | RSH-ST07C (เฉพาะ 4) | 7 | 3.0 | 2109:2822 | 2023 | |
| ซันวา ซัพพลาย | USB-HUB14GPH | 4 | 1.1 | 2544 | 2546 | |
| ซีเกท | แบ็คอัพพลัสฮับ STEL8000100 | 2 | 3.0 | 0BC2:AB44 | 2559 | |
| ซี๊ด สตูดิโอ | เทอร์มินัล CM4104032 | 2 | 2.0 | 0424:2514 | 2021 | |
| สตาร์เทค | DKT30CSDHPD3 USB-C แท่นชาร์จแบบพกพา | 3 | 3.0 | 2109:2817 | 2018 | |
| สตาร์เทค | HB30A4AIB (คำเตือน) | 4 | 3.0 | 2109:2817 | 2018 | |
| ซูนิกซ์ | SHB4200MA | 4 | 2.0 | 0409:0058 | 2549 | 2552 |
| การพูดคุยของระบบ | ซูโกอิ USB2-HUB4X | 4 | 2.0 | 2550 | ||
| ทาร์กัส | PA095UZ | 2 | 2.0 | 2547 | ||
| ทาร์กัส | PAUH212/PAUH212U | 7 | 2.0 | 2547 | 2552 | |
| เท็กซัส อินสทรูเมนท์ส | TUSB4041PAPEVM | 4 | 2.1 | 0451:8142 | 2558 | |
| ยูเกียร์ | MEGA4 (สำหรับราสเบอร์รี่ Pi 4B) | 4 | 3.0 | 2109:0817 | 2021 | |
| เสมือนที่นี่ | ฮับ USB3 4 พอร์ต (หมายเหตุ) | 4 | 3.0 | 2024 |
ตารางนี้ไม่สมบูรณ์เลย หากฮับของคุณใช้งานได้กับ uhubctl แต่ไม่มีอยู่ในรายการด้านบน โปรดรายงานโดยเปิดปัญหาใหม่ที่ https://github.com/mvp/uhubctl/issues เพื่อให้เราสามารถเพิ่มลงในตารางที่รองรับได้ ในรายงานของคุณ โปรดระบุรุ่นผลิตภัณฑ์ที่แน่นอนและเพิ่มเอาต์พุตจาก uhubctl และโปรดทดสอบการสนับสนุน VBUS ตามที่อธิบายไว้ด้านล่างในคำถามที่พบบ่อย
โปรดทราบว่าเมนบอร์ดสมัยใหม่บางรุ่นมีรูทฮับในตัวซึ่งรองรับคุณสมบัตินี้ คุณไม่จำเป็นต้องซื้อฮับภายนอกด้วยซ้ำ
หากคุณมีฮับ USB 3.0 เชื่อมต่อกับพอร์ตอัปสตรีม USB3 ฮับเสมือนอิสระ 2 ตัวจะถูกตรวจพบ: USB2 และ USB3 และอุปกรณ์ USB ของคุณจะเชื่อมต่อกับฮับเสมือน USB2 หรือ USB3 ขึ้นอยู่กับความสามารถและความเร็วในการเชื่อมต่อ ในการควบคุมการจ่ายไฟสำหรับฮับดังกล่าว จำเป็นต้องปิด/เปิดเครื่องบนฮับเสมือน ทั้ง USB2 และ USB3 เพื่อให้การเปลี่ยนแปลงการเปิด/ปิดเครื่องมีผล uhubctl จะพยายามทำสิ่งนี้โดยอัตโนมัติ (เว้นแต่คุณจะปิดการใช้งานพฤติกรรมนี้ด้วยตัวเลือก -e )
น่าเสียดายที่ฮับส่วนใหญ่จะตัดการเชื่อมต่อข้อมูล USB แต่ฮับบางตัวอาจยังไม่ตัด VBUS ไปยังพอร์ต ซึ่งหมายความว่าโทรศัพท์ที่เชื่อมต่ออาจยังคงชาร์จจากพอร์ตที่ปิดโดย uhubctl ต่อไป
ยูทิลิตี้นี้ได้รับการทดสอบเพื่อคอมไพล์และทำงานบน Linux (Ubuntu/Debian, Redhat/Fedora/CentOS, Arch Linux, Gentoo, openSUSE, Buildroot), FreeBSD, NetBSD, SunOS และ MacOS
ในขณะที่ uhubctl คอมไพล์บน Windows การสลับพลังงาน USB ไม่ทำงานบน Windows เนื่องจาก libusb ใช้ไดรเวอร์ winusb.sys ซึ่งตาม Microsoft ไม่รองรับคำขอควบคุม USB ที่จำเป็น สิ่งนี้อาจได้รับการแก้ไขหาก libusb เริ่มรองรับไดรเวอร์อื่นบน Windows
โปรดทราบว่าขอแนะนำอย่างยิ่งให้ติดตั้ง pkg-config (หลายแพลตฟอร์มจัดเตรียมไว้เป็นค่าเริ่มต้น)
ขั้นแรก คุณต้องติดตั้งไลบรารี่ libusb-1.0 (แนะนำเวอร์ชัน 1.0.12 หรือใหม่กว่า 1.0.16 หรือใหม่กว่า):
sudo apt-get install libusb-1.0-0-devsudo yum install libusb1-develsudo zypper install libusb-1_0-develbrew install libusb หรือ sudo port install libusb-develsudo pkgin install libusb1 gmake pkg-configหากต้องการดึงซอร์ส uhubctl และคอมไพล์:
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
สิ่งนี้ควรสร้างไบนารี uhubctl คุณสามารถติดตั้งในระบบของคุณเป็น /usr/sbin/uhubctl โดยใช้:
sudo make install
โปรดทราบว่าในบางระบบปฏิบัติการ (เช่น FreeBSD/NetBSD) คุณต้องใช้ gmake แทนในการสร้าง
นอกจากนี้ บน MacOS คุณสามารถติดตั้ง uhubctl พร้อมการอ้างอิงที่จำเป็นทั้งหมดในช็อตเดียวโดยใช้ Homebrew tap:
brew tap mvp/uhubctl https://github.com/mvp/uhubctl
brew install uhubctl
หากต้องการสร้าง/ติดตั้งจากสาขาหลัก ให้ใช้ --HEAD :
brew install uhubctl --HEAD
บน Linux ให้ใช้ sudoหรือกำหนดค่าการอนุญาต USB ตามที่อธิบายไว้ด้านล่าง!
หากต้องการแสดงรายการฮับที่รองรับทั้งหมด:
uhubctl
คุณสามารถควบคุมพลังงานบนพอร์ต USB ได้ดังนี้:
uhubctl -a off -p 2
ซึ่งหมายความว่าทำงานบนฮับอัจฉริยะเริ่มต้นและปิดเครื่อง ( -a off หรือ -a 0 ) บนพอร์ต 2 ( -p 2 ) การดำเนินการที่รองรับคือ off / on / cycle / toggle (หรือ 0 / 1 / 2 / 3 ) cycle หมายถึงปิดเครื่อง รอสักครู่ (กำหนดค่าได้ด้วย -d ) แล้วเปิดใหม่อีกครั้ง พอร์ตสามารถเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค และอาจใช้ - สำหรับช่วง เช่น 2 หรือ 2,4 หรือ 2-5 หรือ 1-2,5-8
การปิดพอร์ต USB ในตัวอาจตัดแป้นพิมพ์หรือเมาส์ของคุณ ดังนั้นควรระวังพอร์ตที่คุณปิดอยู่!
หากคุณมีฮับ USB อัจฉริยะมากกว่าหนึ่งอันเชื่อมต่ออยู่ คุณควรเลือกฮับเฉพาะเพื่อควบคุมโดยใช้พารามิเตอร์ -l (ตำแหน่ง) หากต้องการค้นหาตำแหน่งฮับ เพียงเรียกใช้ uhubctl โดยไม่มีพารามิเตอร์ใดๆ ตำแหน่งฮับมีลักษณะเหมือน bx.yz โดยที่ b คือหมายเลขบัส USB และ x , y , z ... คือหมายเลขพอร์ตสำหรับฮับทั้งหมดในเชน เริ่มต้นจากฮับรูทสำหรับบัส USB ที่กำหนด ที่อยู่นี้เป็นแบบกึ่งเสถียร - จะไม่เปลี่ยนแปลงหากคุณถอดปลั๊ก/เสียบใหม่ (หรือปิด/เปิด) อุปกรณ์ USB เข้ากับพอร์ต USB จริงเดียวกัน (วิธีนี้ใช้ในเคอร์เนล Linux ด้วย)
บน Linux คุณควรกำหนดค่าการอนุญาต udev USB (ไม่เช่นนั้นคุณจะต้องเรียกใช้ในฐานะรูทโดยใช้ sudo uhubctl )
เริ่มต้นด้วย Linux Kernel 6.0 มีอินเทอร์เฟซมาตรฐานสำหรับเปิดหรือปิดพอร์ตฮับ USB และ uhubctl จะพยายามใช้ (แทน libusb ) เพื่อตั้งค่าสถานะพอร์ต นี่คือเหตุผลว่าทำไมจึงมีกฎเพิ่มเติมสำหรับเคอร์เนล 6.0+ การมีกฎเหล่านี้กับระบบที่ใช้เคอร์เนลเวอร์ชันเก่านั้นไม่เสียหาย
หากต้องการแก้ไขสิทธิ์ USB ให้รัน sudo uhubctl ก่อน และจด vid:pid ทั้งหมดสำหรับฮับที่คุณต้องการควบคุม จากนั้น เพิ่มกฎ udev เช่นด้านล่างลงในไฟล์ /etc/udev/rules.d/52-usb.rules (แทนที่ 2001 ด้วยรหัสผู้จำหน่ายฮับของคุณ หรือลบตัวกรอง ATTR{idVendor} ออกทั้งหมดเพื่ออนุญาตการเข้าถึงฮับ USB):
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2001"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN="/bin/sh -c "chmod -f 666 $sys$devpath/*-port*/disable || true""
โปรดทราบว่าสำหรับฮับ USB3 ฮับบางตัวใช้ ID ผู้จำหน่ายที่แตกต่างกันสำหรับส่วนประกอบ USB2 และ USB3 ของชิปเดียวกัน และทั้งสองจำเป็นต้องได้รับอนุญาตเพื่อให้ uhubctl ทำงานได้อย่างถูกต้อง เช่นสำหรับ Raspberry Pi 4B คุณต้องเพิ่ม 2 บรรทัดเหล่านี้ (หรือลบตัวกรอง idVendor):
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2109"
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="1d6b"
หากคุณไม่ชอบโหมดเปิดกว้าง 0666 คุณสามารถจำกัดการเข้าถึงโดยกลุ่มดังนี้:
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0664", GROUP="dialout"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN+="/bin/sh -c "chown -f root:dialout $sys$devpath/*-port*/disable || true""
RUN+="/bin/sh -c "chmod -f 660 $sys$devpath/*-port*/disable || true""
จากนั้นเพิ่มผู้ใช้ที่ได้รับอนุญาตในกลุ่ม dialout :
sudo usermod -a -G dialout $USER
เพื่อให้การเปลี่ยนแปลงกฎ udev ของคุณมีผล ให้รีบูตหรือรัน:
sudo udevadm trigger --attr-match=subsystem=usb
เพื่อความสะดวกของคุณ เรามีกฎ udev ที่พร้อมใช้งานไว้ที่นี่
ตามข้อกำหนด USB 2.0 ฮับ USB ไม่สามารถโฆษณาว่าไม่มีการสลับไฟ การสลับไฟแบบแก๊งค์ (พอร์ตทั้งหมดในครั้งเดียว) หรือการสลับไฟต่อพอร์ต (แต่ละพอร์ต) โปรดทราบว่าตามค่าเริ่มต้น uhubctl จะตรวจจับเฉพาะฮับ USB ที่รองรับการสลับพลังงานต่อพอร์ต (แต่คุณสามารถบังคับให้ลองทำงานบนฮับที่ไม่รองรับด้วยตัวเลือก -f ) คุณสามารถค้นหาประเภทของพลังงานที่ฮาร์ดแวร์ของคุณรองรับได้โดยใช้ sudo lsusb -v :
ไม่มีการสลับพลังงาน:
wHubCharacteristic 0x000a
No power switching (usb 1.0)
Per-port overcurrent protection
สวิตช์ไฟแบบ Ganged:
wHubCharacteristic 0x0008
Ganged power switching
Per-port overcurrent protection
การสลับพลังงานต่อพอร์ต:
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
uhubctl หรือไม่sudo uhubctl หากฮับของคุณไม่อยู่ในรายการ แสดงว่าไม่รองรับ หรือคุณสามารถเรียกใช้ sudo lsusb -v และตรวจสอบ Per-port power switching - หากคุณไม่เห็นบรรทัดดังกล่าวในเอาต์พุต lsusb แสดงว่าไม่รองรับฮับuhubctl เพื่อปิดพอร์ตนั้น และตรวจสอบว่าโทรศัพท์หยุดชาร์จ ไฟ USB หยุดส่องแสง หรือพัดลม USB หยุดหมุน หาก VBUS ไม่ปิด แสดงว่าผู้ผลิตฮับของคุณไม่ได้รวมวงจรไว้สำหรับตัดไฟจริงๆ ฮับดังกล่าวจะยังคงทำงานเพื่อตัดการเชื่อมต่อข้อมูล USB แต่ไม่สามารถปิดไฟได้ และเราไม่ถือว่าอุปกรณ์ที่รองรับนี้หลังจากปิดพอร์ต USB แล้ว udev จะไม่ได้รับเหตุการณ์ใด ๆ ดังนั้นจึงเก็บไฟล์ของอุปกรณ์ไว้ อย่างไรก็ตาม การพยายามเข้าถึงไฟล์ของอุปกรณ์จะทำให้เกิดข้อผิดพลาด IO
นี่เป็นปัญหาเคอร์เนล Linux และได้รับการแก้ไขแล้วตั้งแต่ uhubctl 2.5.0 สำหรับระบบที่มีเคอร์เนล Linux 6.0 หรือใหม่กว่า
หากคุณยังคงใช้ Linux 5.x หรือเก่ากว่า คุณสามารถใช้วิธีแก้ปัญหานี้สำหรับปัญหานี้:
sudo uhubctl -a off -l ${location} -p ${port}
sudo udevadm trigger --action=remove /sys/bus/usb/devices/${location}.${port}/
ไฟล์อุปกรณ์จะถูกลบออกโดย udev แต่อุปกรณ์ USB จะยังคงมองเห็นได้ใน lsusb โปรดทราบว่าเส้นทาง /sys/bus/usb/devices/${location}.${port} จะมีอยู่เฉพาะเมื่อตรวจพบอุปกรณ์บนพอร์ตนั้น เมื่อคุณเปิดเครื่องอีกครั้ง อุปกรณ์ควรระบุอีกครั้งอย่างถูกต้อง (ไม่จำเป็นต้องเรียก udevadm อีกครั้ง)
ไดรเวอร์อุปกรณ์บางตัวในเคอร์เนลรู้สึกประหลาดใจเมื่ออุปกรณ์ USB ถูกปิด และพยายามเปิดเครื่องอีกครั้งโดยอัตโนมัติ
นี่เป็นปัญหาเคอร์เนล Linux และได้รับการแก้ไขแล้วตั้งแต่ uhubctl 2.5.0 สำหรับระบบที่มีเคอร์เนล Linux 6.0 หรือใหม่กว่า
หากคุณยังคงใช้ Linux 5.x หรือเก่ากว่า:
คุณสามารถใช้ตัวเลือก -r N โดยที่ N คือตัวเลขตั้งแต่ 10 ถึง 1,000 เพื่อแก้ไขปัญหานี้ - uhubctl จะพยายามปิดเครื่องหลายครั้งติดต่อกันอย่างรวดเร็ว และควรระงับสิ่งนั้น
การปิดใช้งานการอนุญาต USB สำหรับอุปกรณ์ที่เป็นปัญหาก่อนปิดเครื่องด้วย uhubctl ควรช่วย:
echo 0 > sudo tee /sys/bus/usb/devices/${location}.${port}/authorized
หากอุปกรณ์ของคุณเป็นที่เก็บข้อมูล USB การเรียกใช้ udisksctl ก่อนที่จะโทร uhubctl น่าจะช่วยได้เช่นกัน:
sudo udisksctl power-off --block-device /dev/disk/...`
sudo uhubctl -a off ...
ผู้ผลิตฮับหลายรายสร้างฮับ USB โดยใช้ชิป USB พื้นฐาน 4 พอร์ต เช่น ในการสร้างฮับ 7 พอร์ต พวกเขาต่อเดซี่เชนสองฮับ 4 พอร์ต - 1 พอร์ตจะสูญเสียไปจากการต่อเดซีเชน ดังนั้นจึงทำให้เป็นฮับพอร์ต 4+4-1=7 ในทำนองเดียวกัน ฮับพอร์ต 10 พอร์ตสามารถสร้างขึ้นเป็นฮับขนาด 4 พอร์ต 3 ตัวที่เชื่อมต่อกันแบบเดซี่เชน ซึ่งให้พอร์ตที่ใช้งานได้ 4+4+4-2=10 พอร์ต
โปรดทราบว่าคุณไม่ควรพยายามเปลี่ยนสถานะพลังงานสำหรับพอร์ตที่ใช้กับฮับภายในแบบเดซี่เชนด้วยกัน การทำเช่นนี้จะทำให้วงจรฮับภายในสับสน และจะทำให้เกิดพฤติกรรมที่คาดเดาไม่ได้
นี่เป็นข้อจำกัดของการออกแบบฮาร์ดแวร์ Raspberry Pi วิธีแก้ปัญหาเบื้องต้น คุณสามารถซื้อฮับ USB ภายนอกจากรายการที่รองรับข้างต้น แล้วต่อเข้ากับพอร์ต USB ของ Raspberry Pi และควบคุมการเปิด/ปิดพอร์ตต่างๆ ได้อย่างอิสระ นอกจากนี้ยังมีฮับที่รองรับซึ่งออกแบบมาโดยเฉพาะสำหรับ Raspberry Pi เช่น UUGear MEGA4
สำหรับการอ้างอิง รุ่น Raspberry Pi ที่รองรับมีโทโพโลยี USB ภายในดังต่อไปนี้:
ฮับเดี่ยว 1-1 พอร์ต 2-5 ติดแน่น ทั้งหมดควบคุมโดยพอร์ต 2 :
uhubctl -l 1-1 -p 2 -a 0
การพยายามควบคุมพอร์ต 3 , 4 , 5 จะไม่ทำอะไรเลย พอร์ต 1 ควบคุมพลังงานสำหรับ Ethernet + WiFi
ฮับหลัก 1-1 พอร์ตทั้งหมด 4 พอร์ตเชื่อมต่อกัน ทั้งหมดควบคุมโดยพอร์ต 2 (ปิดพอร์ตฮับรองด้วย) พอร์ต 1 เชื่อมต่อฮับ 1-1.1 ด้านล่าง พอร์ต 2 และ 3 ต่อสายด้านนอก พอร์ต 4 ไม่ได้ต่อสาย
uhubctl -l 1-1 -p 2 -a 0
ฮับรอง 1-1.1 (เดซี่เชนกับหลัก): 3 พอร์ต พอร์ต 1 ใช้สำหรับอีเทอร์เน็ต+WiFi และพอร์ต 2 และ 3 มีสายอยู่ด้านนอก
หากเฟิร์มแวร์ VL805 ของคุณเก่ากว่า 00137ad(ตรวจสอบด้วยsudo rpi-eeprom-update) คุณต้องอัปเดตเฟิร์มแวร์เพื่อให้การสลับพลังงานทำงานบน RPi 4B
ฮับ USB2 1 , 1 พอร์ต เชื่อมต่อเฉพาะฮับ 1-1 ด้านล่างเท่านั้น
ฮับ USB2 1-1 , 4 พอร์ตเชื่อมต่อกัน, คู่กับฮับ USB3 2 ด้านล่าง:
uhubctl -l 1-1 -a 0
ฮับ USB3 2 , 4 พอร์ตเชื่อมต่อกัน, คู่กับฮับ USB2 1-1 ด้านบน:
uhubctl -l 2 -a 0
ฮับ USB2 3 , 1 พอร์ต, ตัวควบคุม OTG ไม่รองรับการสลับพลังงาน
Raspberry Pi 5 มีพอร์ต USB2 สองพอร์ตและพอร์ต USB3 สองพอร์ต (รวมทั้งหมด 4 พอร์ต) พอร์ตเหล่านี้เชื่อมต่อกับฮับ USB ที่แตกต่างกัน 4 ตัว 1 , 2 , 3 , 4 ในการกำหนดค่าแปลก ๆ จริงๆ (แต่ขึ้นอยู่กับฮับการแก้ไข OS และ HW ที่น่าสนใจอาจเป็น 2 , 3 , 4 , 5 ) หากอุปกรณ์ USB3 เชื่อมต่อกับซ็อกเก็ตสีน้ำเงิน อุปกรณ์ดังกล่าวจะถูกตรวจพบบนฮับ USB3 2 หรือ 4 หากอุปกรณ์ USB2 เชื่อมต่อกับซ็อกเก็ตใดๆ หรืออุปกรณ์ USB3 ที่เชื่อมต่อกับซ็อกเก็ตสีดำ อุปกรณ์ดังกล่าวจะถูกตรวจพบบนฮับ USB2 1 หรือ 3 ไม่ว่าการเชื่อมต่อ USB2/USB3 จะเป็นอย่างไร ซ็อกเก็ตสีน้ำเงินจะเป็นพอร์ต 1 เสมอ และซ็อกเก็ตสีดำจะเป็นพอร์ต 2 เสมอ
ฮับ USB ออนบอร์ดทั้ง 4 ตัวโฆษณาว่ารองรับการสลับไฟต่อพอร์ต แต่สิ่งนี้ไม่เป็นความจริง ในความเป็นจริง Raspberry Pi 5 ทั้ง 4 พอร์ตถูกรวมเข้าด้วยกันในกลุ่มเดียว แม้ว่าจะอยู่ในฮับ USB แบบลอจิคัลที่แตกต่างกัน 4 ตัวก็ตาม
หากต้องการปิด VBUS จะต้องปิดการใช้งานฮับและพอร์ตออนบอร์ดทั้งหมดด้วย:
uhubctl -l 2 -a 0
uhubctl -l 4 -a 0
หากต้องการเปิดอีกครั้ง:
uhubctl -l 2 -a 1
uhubctl -l 4 -a 1
โปรดทราบว่าพลังงานของ VBUS จะลดลงเฉพาะในกรณีที่พอร์ตทั้งหมดปิดอยู่ - การเปิดใช้งานพอร์ตเดียวจะทำให้ VBUS กลับมาสำหรับพอร์ตทั้ง 4 พอร์ต
| โครงการ | คำอธิบาย |
|---|---|
| ไฟ USB รหัสมอร์ส | แฟลชข้อความเป็นรหัสมอร์สด้วยไฟ USB |
| ไฟเว็บแคม USB | เปิด/ปิด LED เมื่อเปิด/ปิดเว็บแคม |
| ไลท์บ็อกซ์โรงภาพยนตร์ | เปิด/ปิด Cinema Lightbox จากแอป iOS Home |
| สร้างไฟแสดงสถานะ | สร้างไฟแสดงสถานะการสร้างในเวลาไม่ถึง 10 นาที |
| ไฟก่อสร้าง | สถานะการสร้างโครงการ GitLab/GitHub เป็นไฟสีเขียว/สีแดง |
| สถานีตรวจอากาศ | รีเซ็ตสถานีตรวจอากาศเมื่อมันค้าง |
| sysmoQMOD | รีเซ็ตโมเด็มเซลลูล่าร์เมื่อจำเป็น |
| เซ็นเซอร์ตรวจจับควัน | รีเซ็ตพลังงานเซ็นเซอร์หมอกควันที่ใช้ Raspberry Pi |
| คลัสเตอร์แย่มาก | เปิด/ปิดโหนดคลัสเตอร์ Raspberry Pi ตามความจำเป็น |
| เซิร์ฟเวอร์เพลงในอุดมคติ | ปิดพอร์ต USB ที่ไม่ได้ใช้เพื่อปรับปรุงคุณภาพเสียง |
| ไดรฟ์ USB ที่ไม่มีโหลด Phantom | จ่ายไฟให้กับไดรฟ์ USB เมื่อจำเป็นเท่านั้นเพื่อประหยัดพลังงาน |
| การกู้คืนข้อมูลไดรฟ์ USB | กู้คืนข้อมูลจากฮาร์ดไดรฟ์ USB ที่ล้มเหลว |
| ควบคุมพลังงานให้กับเครื่องพิมพ์ 3D | ปลั๊กอินเว็บ OctoPrint สำหรับการควบคุมพลังงาน USB |
| พัดลม USB สำหรับ Raspberry Pi | ควบคุมพัดลม USB เพื่อหลีกเลี่ยงไม่ให้ Raspberry Pi ร้อนเกินไป |
| Raspberry Pi รีบูตเราเตอร์ | รีบูตเราเตอร์โดยอัตโนมัติหากอินเทอร์เน็ตไม่ทำงาน |
| ควบคุมหลอดไฟ USB ด้วยเสียง | การควบคุมด้วยเสียงของหลอด USB โดยใช้ Siri และ Raspberry Pi |
| ควบคุมแถบ LED USB | การควบคุมแถบไฟ LED ที่ขับเคลื่อนด้วย USB |
| ชงเบียร์ด้วย Raspberry Pi | ระบบการผลิตเบียร์อัตโนมัติโดยใช้ Raspberry Pi |
| ป้ายเว็บแคมออนแอร์ | ไฟสัญญาณจะสว่างขึ้นโดยอัตโนมัติเมื่อมีการใช้เว็บแคม |
| พีพีเอสทำเอง | บัดกรีสายไฟในฮับ USB ของคุณเพื่อรองรับ uhubctl |
| ฮับ PPPS แบบโอเพ่นซอร์ส | โครงการฮาร์ดแวร์โอเพ่นซอร์สสำหรับฮับที่เข้ากันได้กับ uhubctl |
| Python Wrapper สำหรับ uhubctl | โมดูลสำหรับใช้ uhubctl กับ Python |
| แล็บกริด | กรอบงานสำหรับการทดสอบ Linux แบบฝังบนฮาร์ดแวร์ |
ลิขสิทธิ์ (C) 2009-2024 วาดิม มิคาอิลอฟ
ไฟล์นี้สามารถแจกจ่ายได้ภายใต้ข้อกำหนดและเงื่อนไขของ GNU General Public License เวอร์ชัน 2