لماذا يتطلب PYUSB / LIBUSB أذونات الجذر (SUDO) على Linux؟
سؤال
لقد كنت أتجول مع pyusb في الآونة الأخيرة ، ووجدت أنه يعمل بشكل جميل على Linux (Ubuntu Have libusb 0.1 و 1.0 ، وكذلك OpenusB) ... ولكن فقط إذا قمت بتشغيل البرنامج بامتيازات الجذر (مع sudo
, ، بالطبع).
هل يمكن لأي شخص أن يخبرني لماذا يتطلب امتيازات مرتفعة ، والأهم من ذلك ، إذا كان بإمكاني تغيير الأذونات بطريقة ما لجعلها تعمل لحسابات المستخدم العادية؟
المحلول
libusb
يتيح لك معالجة أجهزة USB التعسفية بطرق تعسفية. يمكنك تنسيق خارجي USB Harddisk ، على سبيل المثال.
بشكل عام ، يتطلب جميع الوصول المباشر للأجهزة root
الامتيازات ، على الرغم من أنني أعتقد أن ذلك ممتلئ بالفعل root
الامتيازات غير مطلوبة ، يجب أن تكون على ما يرام مع فقط CAP_SYS_RAWIO
.
نصائح أخرى
يمكنك تغيير أذونات عقدة جهاز USB عن طريق إنشاء قاعدة UDEV. على سبيل المثال ، أضفت السطر التالي إلى ملف في /etc/udev/rules.d/
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"
هذا يعين مالك عقدة الجهاز إلى root:usbusers
عوضا عن root:root
بعد إضافة نفسي إلى usbusers
المجموعة ، يمكنني الوصول إلى الجهاز.
انظر الجواب الذي أعطيته هنا:
كيف يمكنني أن أتواصل مع هذا الجهاز باستخدام PYUSB؟
يسمى:
قم بإعداد ملف قواعد UDEV للجهاز المحدد الذي تريد أن يتمكن المستخدمون العاديون من الوصول إليه. سيحدد هذا معرف البائع ومعرف المنتج ومجموعة.
يمكن العثور على البائع ومعرف المنتج باستخدام lsusb
يأمر.
1. إنشاء ملف قواعد UDEV
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"
ضع هذا في ملف يسمى (على سبيل المثال) /lib/udev/rules.d/50-yoursoftwarename.rules (حفر في Man Udev لقواعد التسمية)
ملاحظة: اتفاقية التسمية القديمة المستخدمة /etc/udev/rules.d/filename.rules ، التي تغيرت.
2. أضف أسماء المستخدمين إلى مجموعة Plugdev
adduser username plugdev
3. إجبار نظام UDEV على رؤية التغييرات الخاصة بك
sudo udevadm control --reload
(هذا ناقص ناقص إعادة التحميل)
sudo udevadm trigger
4. افصل الجهاز وإعادة تشغيله أو إعادة تشغيل جهازك
يجب أن تكون النتيجة النهائية هي أن جميع أعضاء مجموعة Plugdev سيتمكنون الآن من الوصول إلى الجهاز.
تحرير: لاحظ ذلك في بعض الأنظمة المجموعة plugdev
قد لا تكون المجموعة التي تحتاجها. يمكن أن تكون أيضًا المجموعة input
في تجربتي ، اعتمادًا على ما تقوم بتوصيله.