USB 장치에 대한 소프트웨어 액세스를 허용하는 방법은 무엇입니까?

USB 장치에 대한 소프트웨어 액세스를 허용하는 방법은 무엇입니까?

권한이 부족하여 새로 설치된 Ubuntu에서 USB 장치를 열 수 없는 libusb 기반 프로그램이 있습니다.

이 솔루션아마 저에게는 효과가 있을 것입니다. 하지만 모든 장치를 수동으로 지정해야 합니다. 그리고 저는 꽤 많은 장치를 가지고 있습니다. 그래서 나는 이것을 (파일에서 /etc/udev/rules.d/41-cvs-permissions.rules) 시도했습니다 :

SUBSYSTEM=="usb", MODE:="0666"

모든 장치에 규칙이 적용되기를 바라면서 VID와 PID를 생략했습니다. 분명히 효과가 있지만 효과는 다소 이상합니다. 열 수 없는 5개의 장치를 감지하는 대신 libusb는 이제 2개만 감지합니다. 둘 다 실제 장치가 아닌 USB 호스트 컨트롤러입니다.

내가 원하는 것을 달성하는 방법은 무엇입니까?

답변1

제가 USB 장치를 다루는 방식은 특정 그룹에게 모든 장치에 대한 액세스 권한을 부여하는 것입니다.

루트로서:

echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules

기본적으로 이것이 수행하는 작업은 모든 USB 장치에 대한 읽기 및 쓰기 액세스 권한을 Plugdev 그룹의 구성원에게 부여하는 것입니다.

답변2

VID/PID를 사용하여 규칙 일치를 만드는 것이 확실한 해결책이 아니라는 데 동의합니다. 그러나 이전처럼 모든 USB 장치를 맹목적으로 타겟팅하지 않고도 동일한 규칙으로 여러 장치를 사용할 수 있습니다. 최소한의 정규식( , )을 사용하더라도 DRIVER이름( usb-storage, usbhid,..) 또는 KERNEL이름( tty*, ,..)을 사용하는 예입니다 .sd*sd[a-z][0-9]*usb*

속성의 유사점을 찾아야 합니다.

  1. 해당 장치를 모두 제거하세요.
  2. 현재 장치 목록을 다음에 저장하십시오./dev

    ls /dev > /tmp/dev_list0.txt
    
  3. 대상 장치 중 하나를 연결하십시오.

  4. 장치 목록을 다른 파일에 저장

    ls /dev > /tmp/dev_list.txt
    
  5. 파일 비교, >장치 추가, <제거 장치

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    이것은 3G 모뎀입니다.

  6. 필요한 모든 인터페이스의 속성을 확인하세요. 예:

    udevadm info --attribute-walk --name=/dev/ttyUSB0
    

원하는 모든 장치에 대해 동일한 작업을 수행하십시오. 방법을 알 수 없는 경우 udevadm info --attribute-walk --name=...출력을 업로드하고 질문에 연결하세요.

모든 USB 장치가 에서 노드를 생성하는 것은 아닙니다 /dev. 일부는 SYSFS 트리에서 해당 항목을 찾습니다 /sys. 그런 다음 다음을 사용하여 속성을 확인하십시오.--path

udevadm info --attribute-walk --path=...

위와 동일한 단계를 사용하면 udev이벤트를 모니터링하여 생성된 장치 노드를 확인할 수 있습니다.

udevadm monitor

답변3

하드웨어에 대한 액세스를 잠금 해제하는 가장 쉬운 솔루션은 다음과 같습니다.

sudo chmod -R 777 /dev/bus/usb/

관련 정보