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
Perhatikan skrip perlu dijalankan sebagai root.
Saya menulis skrip Python ini setelah saya secara tidak sengaja menemukan solusi, menggunakan Hub-Ctrl Fork oleh Yi Yu, untuk membuat port Ethernet pada Razer Core X Chroma saya yang dapat digunakan pada laptop yang menjalankan Arch Linux. Perbaikannya adalah untuk mematikan port, yang terhubung dengan pengontrol Ethernet (secara internal), lalu menyalakannya lagi. Saya ingin melakukan ini tanpa menggunakan bus hub/perangkat, yang tidak dimungkinkan dengan hub-ctrl , jadi saya beralih menggunakan pyUSB untuk menemukan perangkat oleh vendor dan ID produk, dan porting usb_control_msg() dari hub-ctrl untuk mematikan/pada perangkat yang ditemukan. Saya juga memperhatikan bahwa adaptor Ethernet yang bersepeda daya menciptakan antarmuka jaringan baru yang disebut eth0 , meninggalkan yang lama bernama One Hanging Dead. Solusi yang membantu adalah membongkar modul kernel ax88179_178a sebelum bersepeda daya dan kemudian memuatnya kembali. Oleh karena itu, saya menambahkan opsi untuk melakukan ini dengan skrip yang sama juga. Sekarang saya baru saja lari
python power.py cycle 0b95:1790 -m ax88179_178a
Pada boot sistem, dan Ethernet akhirnya berfungsi.
Script memiliki dependensi berikut:
libusb-1.0-0libusb-0.1-4pyusb > = 1.1.0 Ini menggunakan libusb1 dan libusb0 backends karena dua alasan:
libusb0 tidak mengimplementasikan metode get_parent yang digunakan untuk menemukan hub, yang terhubung dengan perangkatlibusb-0.1-4 untuk menjalankan power off/on control pesan menghasilkan hasil yang diinginkan. Baik libusb1 , maupun libusb-compat tidak berhasil. libusb-1.0-0 dan pyusb :
sudo pacman -Sy libusb python-pyusb
libusb-0.1-4 harus diinstal melalui AUR, https://aur.archlinux.org/packages/libusb0, misalnya, dengan yay :
yay -Sy libusb0
Distro ubuntu yang lebih baru (setidaknya, mulai dari 22.04) memiliki pyusb==1.2.1 di repositori [universe] resmi, dan semua dependensi dapat diinstal dengan apt :
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-usb
Jika Anda menjalankan distro ubuntu yang lebih tua, misalnya, 20.04 memiliki pyusb==1.0.2 , Anda dapat menginstal pyusb dari pypi:
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-pip
sudo python3 -m pip install pyusb