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