pyusb power
1.0.0
usage: power.py [-h] [-m [MOD ...]] {cycle,off,on} id
Powers off/on usb devices by id
positional arguments:
{cycle,off,on} action to perform: power-cycle, off or on
id usb device id in the form 'idVendor:idProduct', each id is a hex number from 0 to ffff, e.g., '123:abcd'
options:
-h, --help show this help message and exit
-m [MOD ...], --mod [MOD ...]
kernel module(s) to unload before the action, and to load back after the action
注意腳本需要作為root運行。
在我意外地發現了使用Yi Yu的Hub-Ctrl叉的解決方法之後,我寫了這個Python腳本,以使我的Razer Core X Chroma上的以太網端口在運行Arch Linux的筆記本電腦上可用。修復程序是為以太網控制器(內部)連接到的端口電源,然後再次為其加電。我想在不使用hub-ctrl的Hub Bus/Device進行硬編碼的情況下執行此操作,因此我轉向使用Pyusb來查找供應商和產品ID的設備,然後將usb_control_msg()從hub-ctrl移植以關閉/在發現的設備上。我還注意到,電動捕獲以太網適配器創建了一個名為eth0的新網絡接口,使舊的被命名為“掛死者”。有助於的解決方法是在功率循環之前卸載ax88179_178a內核模塊,然後再次加載。因此,我也添加了一個選項,也可以使用相同的腳本進行此操作。現在我跑了
python power.py cycle 0b95:1790 -m ax88179_178a
在系統啟動上,以太網最終起作用。
該腳本具有以下依賴性:
libusb-1.0-0libusb-0.1-4pyusb > = 1.1.0它同時使用libusb1和libusb0後端,有兩個原因:
libusb0不能實現用於查找設備連接到的集線器get_parent方法libusb-0.1-4執行關閉電源/在控制消息上的電源才得出所需的結果。 libusb1和libusb-compat都沒有做到這一點。 libusb-1.0-0和pyusb :
sudo pacman -Sy libusb python-pyusb
libusb-0.1-4必須通過AUR安裝https://aur.archlinux.org/packages/libusb0,EG,YAY yay
yay -Sy libusb0
較新的Ubuntu發行版(至少從22.04開始)在官方[universe]存儲庫中具有pyusb==1.2.1 ,因此所有依賴項都可以與apt安裝:
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-usb
如果您正在運行較舊的Ubuntu發行版,例如20.04具有pyusb==1.0.2 ,則可以從PYPI安裝pyusb :
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-pip
sudo python3 -m pip install pyusb