libusb를 루트가 아닌 사용자로 작동하게 하려면 어떻게 해야 합니까?

libusb를 루트가 아닌 사용자로 작동하게 하려면 어떻게 해야 합니까?

저는 Lubuntu 16.04.3 LTS에서 HIDAPI를 사용하여 맞춤형 USB HID 장치와 함께 사용할 데스크톱 앱을 만들고 있습니다. myapp지금은 전화하겠습니다 .

분명히 , 에서는 $ ./myapp실패 libusb_open()합니다 LIBUSB_ERROR_ACCESS. (내 디버거에는 로 표시됩니다 -3. 열거형이 잘 문서화되지 않은 것 같아서 알아내는 데 시간이 좀 걸렸습니다.)
하지만 그렇게 하면 $ sudo ./myapp성공합니다. 루트 권한을 갖고
싶지 않은데 루트 권한 없이 어떻게 USB 장치와 통신할 수 있습니까?myapp


나는 대답을 바랐다.여기, 하지만 정확히 이 시점에서 버려진 것 같습니다. 사용자 권한에 대한 내용이 나와 있지만 내 시스템에서는 해당 내용을 찾을 수 없는 것 같습니다. 나는 이름이 붙은 그룹을 찾 usb거나 libusb나 자신을 추가할 수 있는 그룹을 찾을 수 있을 것이라고 생각했지만 그런 행운은 없었습니다.


다른 SE 사이트의 이 질문일부 엄격한 텍스트 파일을 사용하여 전역적으로(아마도 나쁜 생각일 수 있음) 또는 특정 장치에 대한 권한을 변경하는 답변이 있지만 다음과 같습니다.

  1. 제가 찾던 '머글의 트윅'이 아니네요.
  2. 이러한 파일의 대부분은 자동 생성되므로 직접 수정하지 말라는 경고가 표시됩니다. 그렇다면 무작위 패키지 업데이트로 인해 변경 사항이 지워져서 중단되지 않을 것이라고 어떻게 확신할 수 있습니까 myapp?
  3. 어쨌든 아무것도하지 않는 것 같습니다. 해당 지침에 따라 재부팅했는데 myapp사용자 권한이 있어도 여전히 USB와 통신할 수 없습니다.

답변1

내가 정말로 찾고 있는 것은 여전히 ​​"머글의 비틀기"는 아니지만 적어도 이것은 작동합니다:

분명히 udev에는 두 개의 디렉토리가 있습니다(이유는 모르겠습니다):

  • /etc/udev/rules.d
  • /lib/udev/rules.d

나는 그 /lib사람을 엉망으로 만들고 아무데도 가지 못했습니다. 나는 그것을 /etc찾았다여기, 작동합니다.


놓다SUBSYSTEM=="usb", ATTRS{idVendor}=="VID", ATTRS{idProduct}=="PID", MODE="0666"

  • VIDUSB-IF 할당 공급업체 ID문제의 장치 *

  • PID해당 장치의 공급업체 할당 제품 ID입니다. *

  • 0666이 줄과 일치하는 모든 항목에 대한 보편적인 읽기/쓰기 액세스를 제공합니다.

    * $ lsusb연결된 모든 USB 장치와 해당 ID를 확인합니다.

있음 /etc/udev/rules.d/xx-my-rule.rules(root/sudo 권한이 필요할 수 있음)

  • xx50보다 큰 임의의 숫자입니다(기본값은 50이고 더 높은 숫자가 우선순위를 갖습니다).
  • my-rule네가 부르고 싶은 대로 부르면 돼
  • 다음으로 끝나야 합니다.rules

그런 다음 udevadm control --reload-rules(root/sudo 권한이 필요할 수도 있음) 특정 VID/PID 쌍에 대해 "작동"해야 합니다.


권한을 좀 더 강화하는 또 다른 옵션 TAG+="uaccess"MODE="0666". 이는 모든 사용자가 아닌 현재 로그인한(물리적) 사용자로 액세스를 제한합니다. @Lekenstein님 감사합니다!

답변2

이 문제로 어려움을 겪고 있는 다른 사람을 위해 - 추가해야 했습니다.그룹="플러그개발"Ubuntu 18.04에서 내 udev 규칙을 적용하여 작동하게 합니다.

내 BTD-400 어댑터의 경우 파일/etc/udev/rules.d/51-usb-device.rules읽는다:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0a5c", ATTRS{idProduct}=="21e8", GROUP="plugdev", TAG+="uaccess"

관련 정보