libusb의 udev 규칙 및 권한 이해

libusb의 udev 규칙 및 권한 이해

스캐너에 문제가 있습니다. Xsane은 루트로만 실행됩니다. 일반 사용자로 사용하면 장치를 찾을 수 없습니다. 사용자를 그룹에 추가하는 것도 도움이 되지 saned않습니다 scanner.

마지막으로 변경하여 문제를 해결했습니다.

# 'libusb' device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664"

도착하다

# 'libusb' device nodes
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0666"

존재하다/lib/udev/rules.d/50-udev-default.rules

그러나 이것이 왜 작동하는지, 부정적인 부작용이 있는지 이해하지 못합니다. 나는 이것이 모든 USB 장치의 모든 사용자에게 쓰기 액세스 권한을 부여할 것이라고 추측하지만 이것이 올바른지, 왜 그리고 이것이 스캐너 문제를 해결하는지 이유를 모릅니다.

왜 그것이 작동하는지, 어떤 부작용이 있는지 자세히 설명할 수 있는 사람이 있습니까?

내 시스템은 입니다. ubuntu 12.04스캐너는 저장소에서 설치된 장치입니다 HP PSC 1200 all in one.hplip

답변1

libusbUSB 장치를 허용하도록 설계된 사용자 공간 드라이버입니다. 즉, 응용 프로그램이 libusb이해하지 못하는 장치에 명령을 보낼 수 있도록 허용합니다.

따라서 libusb컴퓨터에서 USB 장치로 전송된 모든 데이터는 쓰기 작업으로 간주되어야 합니다. 여기에는 스캔 기능을 설명하는 명령을 스캐너에 보내는 것과 같은 사소한 쓰기도 포함됩니다.

장치에 대한 읽기 전용 액세스는 libusb키보드나 마우스와 같이 컴퓨터에 자발적으로 데이터를 전송하는 장치에만 적용됩니다.

답변2

Udev(man에 있음)가 USB 장치와 같은 동적 장치가 연결되면 관리하는 것처럼 보입니다. 그런 다음 /dev 어딘가에 인스턴스화합니다. (제 예에서는 /dev/bus/usb/002와 같습니다.) 이 /dev 노드에는 일부 권한이 있어야 하며 Udev는 장치와 관련된 몇 가지 난해한 구문이 있는 /lib/udev/rules.d/의 파일에서 해당 권한을 가져옵니다. 항목에.

이 경우 usb 하위 시스템의 usb_device 유형의 모든 파일은 지정된 파일 모드를 갖게 됩니다. (표준 권한, 664는 rw-rw-r--, 666은 rw-rw-rw-입니다.) 따라서 모든 USB 장치에 다양한 쓰기 권한을 모두 부여합니다. 모든 사용자를 신뢰하지 않는다면 이는 좋은 일이 아닌 것 같습니다. 만약 당신이 유일한 사용자라면 아마도 당신 자신을 신뢰할 수 있을 것입니다. Libusb는 작업을 수행하기 위해 USB 장치 노드에 대한 쓰기 액세스가 필요한 것으로 보이며, 필요하지 않은 경우 작업 수행을 거부합니다. 단지 장치에서 읽고 싶기 때문에 이것은 옳지 않은 것 같습니다.

권한은 더욱 구체적일 수 있으며 USB 공급업체(VID) 및 제품 ID(PID) 등으로 장치를 지정할 수 있습니다. 따라서 스캐너에만 적용되는 파일을 생성하고 다른 모든 USB 장치에 대한 기본 권한을 유지할 수 있습니다. Udev에 관한 페이지가 있습니다:https://wiki.archlinux.org/index.php/udev이 모든 것에 유용할 것 같습니다. "60-my-usb-scanner.rules"(큰 숫자부터)와 같이 더 높은 숫자로 시작하고 다음과 같이 스캐너를 나열하는 규칙이 있는 파일을 생성하는 경우:

SUBSYSTEM=="usb", ATTRS{idVendor}=="f1e2", ATTRS{idProduct}=="1f2e", MODE="0666"

이는 지정된 장치에 대한 권한만 설정해야 합니다(VID = 0xF1E2, PID = 0x1F2E, 참고: udev에는 소문자 16진수 숫자 사용). 그런 다음 다음을 실행하여 Udev에 이 변경 사항을 알리도록 지시할 수 있습니다.

udevadm control --reload-rules

답변3

나에게 도움이 된 답변을 공유하십시오.

운영 체제: 우붓 누투 20.04

장치를 필터링하는 데 사용할 수 있는 해당 속성을 찾으려면 먼저 lsusb장치 찾기를 사용하십시오 /dev/bus/usb.

....
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 13d3:56d5 IMC Networks Integrated Camera
Bus 003 Device 002: ID 0fc5:b080 Delcom Engineering USB FS IO # <-- My device
...

udevadm info -a -n /dev/bus/usb/<bus_num>/<device_num>그런 다음 (내 경우에는 ) 명령을 사용하여 udevadm info -a -n /dev/bus/usb/003/002udev 규칙 keytab을 가져옵니다. 테이블은 상위 장치에 대해 반복되므로 첫 번째 장치는 원하는 장치여야 합니다.

looking at device '/devices/pci0000:00/0000:00:08.1/0000:04:00.4/usb3/3-2':
KERNEL=="3-2"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{product}=="USB FS IO"
ATTR{bNumInterfaces}==" 1"
ATTR{bDeviceProtocol}=="00"
ATTR{configuration}==""
ATTR{bMaxPower}=="250mA"
ATTR{version}==" 2.00"
ATTR{bmAttributes}=="a0"
ATTR{maxchild}=="0"
ATTR{idVendor}=="0fc5"
ATTR{avoid_reset_quirk}=="0"
ATTR{idProduct}=="b080"
ATTR{devpath}=="2"
ATTR{tx_lanes}=="1"
ATTR{manufacturer}=="Delcom Products Inc."   # <--- help me id the device
...

규칙을 설정하려면 여기에 제공된 정확한 형식을 사용해야 한다는 점을 기억하십시오. 즉, 및 인 경우 SUBSYSTEM=="usb"및 이 아닌 ATTR{idVendor}파일의 형식이어야 합니다 ..rulesSUBSYSTEMS=="usb"ATTRS{idVendor}

마지막으로 sudo <editor_you_like> /etc/udev/rules.d/<order_to_be_executed>-<hint_name>.rules. 99-Delcom_dev.rules저는 이 규칙을 다른 규칙보다 나중에 실행하고 이 규칙이 무엇인지 쉽게 상기시켜 주기를 원하기 때문에 이것을 사용합니다 . 규칙 파일에 다음 내용을 작성합니다.

SUBSYSTEM=="usb", ATTR{idVendor}=="0fc5", ATTR{idProduct}=="b080", MODE="0666"

관련 정보