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
注意スクリプトはルートとして実行する必要があります。
Yi YuのHub-Ctrlフォークを使用して、誤って回避策を発見した後、このPythonスクリプトを書き、Razer Core X ChromaのイーサネットポートをラップトップでArch Linuxを実行しているラップトップで使用できます。修正は、ポートの電源を切ることでした。ポートは、イーサネットコントローラーが(内部的に)接続され、再び電源を入れることでした。 hub-ctrlでは不可能なハブバス/デバイスをハードコードせずにこれをやりたかったので、Pyusbを使用してベンダーと製品IDによるデバイスを見つけることになり、 hub-ctrlからusb_control_msg()発見されたデバイスの電源に移植しました。また、イーサネットアダプターをパワーサイクリングすると、 eth0と呼ばれる新しいネットワークインターフェイスが作成され、hanging hanging Deadの古い名前が残っていることに気付きました。役立つ回避策は、パワーサイクリングの前にax88179_178aカーネルモジュールをアンロードし、再びロードします。したがって、同じスクリプトでこれを行うオプションを追加しました。今、私はただ走っています
python power.py cycle 0b95:1790 -m ax88179_178a
システムブートで、イーサネットは最終的に機能します。
スクリプトには次の依存関係があります。
libusb-1.0-0libusb-0.1-4pyusb > = 1.1.0 2つの理由で、 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を介してインストールする必要があります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があります。Pyusb pyusb Pyusbからインストールできます。
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-pip
sudo python3 -m pip install pyusb