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
لاحظ أن البرنامج النصي يجب أن يتم تشغيله كجذر.
كتبت هذا البرنامج النصي Python بعد أن اكتشفت عن طريق الخطأ حلًا ، باستخدام شوكة Hub-Ctrl بواسطة Yi Yu ، لجعل منفذ Ethernet على Razer Core X Chroma قابلاً للاستخدام على جهاز كمبيوتر محمول يعمل Linux. كان الإصلاح هو تشغيل الموانئ ، التي يتم توصيلها (داخليًا) ، ثم قم بتوصيلها مرة أخرى. كنت أرغب في القيام بذلك دون ترميز حافلة/جهاز Hub ، وهو أمر غير ممكن مع hub-ctrl ، لذلك التفت إلى استخدام PYUSB للعثور على الأجهزة عن طريق البائع ومعرف المنتج ، وقمت بنقل usb_control_msg() من hub-ctrl إلى تشغيل/على الأجهزة المكتشفة. لقد لاحظت أيضًا أن تدوير الطاقة يقوم محول Ethernet بإنشاء واجهة شبكة جديدة تسمى eth0 ، تاركًا القديم المسمى بشكل متوقع معلقًا ميتًا. يتمثل الحل البديل الذي يساعد في تفريغ وحدة kernel ax88179_178a قبل تدوير الطاقة ثم تحميلها مرة أخرى. وبالتالي ، أضفت خيارًا للقيام بذلك بنفس البرنامج النصي أيضًا. الآن أنا فقط أركض
python power.py cycle 0b95:1790 -m ax88179_178a
على تمهيد النظام ، ويعمل Ethernet أخيرًا.
يحتوي البرنامج النصي على التبعيات التالية:
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 ، على سبيل المثال ، مع yay :
yay -Sy libusb0
توزيعات Ubuntu الأحدث (على الأقل ، بدءًا من 22.04) لها pyusb==1.2.1 في المستودعات الرسمية [universe] ، وبالتالي يمكن تثبيت جميع التبعيات مع 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 من Pypi:
sudo apt update
sudo apt install libusb-1.0-0 libusb-0.1-4 python3-pip
sudo python3 -m pip install pyusb