sudo 없이 iSerial을 얻으려면 lsusb를 사용하십시오.

sudo 없이 iSerial을 얻으려면 lsusb를 사용하십시오.

내 sudoer 사용자(루트가 아닌) 아래에서 내 장치에 가 포함되어 있음을 볼 수 있습니다 lsusb. 그러나 발급해야 하는 iSerial 번호를 보려면 lsusb -v많은 정보를 인쇄하지만 "장치를 열 수 없습니다. 일부 정보는 Lost'도 출력에 나타납니다. iSerial은 누락된 정보 중 하나입니다. 잘 작동 sudo lsusb -v합니다.

나는 그것을 시도한 sudo chmod -R o+rw /dev/bus/usb후 sudo 없이 iSerial을 확인할 수 있습니다. 하지만 다시 시작한 후에는 작동하지 않습니다. 새 장치를 연결해도 도움이 되지 않습니다.

이를 수행하는 더 좋은 방법이 있습니까?

답변1

udev가 장치를 인식하면 udev에서 정보를 얻을 수 있습니다. 예를 들어 UPS 장치가 있습니다.

$ lsusb | grep UPS
Bus 004 Device 041: ID 0463:ffff MGE UPS Systems UPS

버스 및 장치 번호(004/041)를 사용하면 루트가 아니더라도 udevadm에서 정보를 얻을 수 있습니다. 여기에는 iSerial 값과 동일한 ID_SERIAL_SHORT 값이 포함됩니다.

$ udevadm info -p $(udevadm info -q path -n /dev/bus/usb/004/041)
P: /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.4/4-1.4.2
N: bus/usb/004/041
E: DEVNAME=/dev/bus/usb/004/041
E: DEVPATH=/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.4/4-1.4.2
E: DEVTYPE=usb_device
E: DRIVER=usb
E: ID_BUS=usb
...
E: ID_SERIAL=EATON_ELLIPSE_BX9M050Z1
E: ID_SERIAL_SHORT=BX9M050Z1
...

$ sudo lsusb -v -s 004:041 | grep iSerial
iSerial                 4 BX9M050Z1

답변2

strace에 따라 lsof읽기 및 쓰기 권한으로 장치 파일을 엽니다 .

open("/dev/bus/usb/003/001", O_RDWR)    = -1 EACCES (Permission denied)

당신은 그것을 사용할 수 있습니다능력lsusbCAP_DAC_OVERRIDE는 특정 사용자가 실행하는 유틸리티에만 시스템의 모든 파일을 읽고 쓸 수 있는 루트 권한을 제공합니다.

이 답변기능을 설정하는 방법에 대한 일반적인 지침을 제공합니다. 귀하의 경우에는 /etc/security/capabilities.conf다음과 같아야 합니다:

CAP_DAC_OVERRIDE        your_username
none    *

다음에 로그인하면 변경사항이 적용됩니다. 다시 시작하는 것이 가장 쉬운 방법입니다. 사용자 능력을 확인하세요:

$ capsh --print
Current: = cap_dac_override+i
...

유틸리티 설정 기능 lsusb:

$ setcap CAP_DAC_OVERRIDE+ie /bin/lsusb
$ getcap /bin/lsusb
/bin/lsusb = cap_dac_override+ie

답변3

또한 이 장치에 대해 특별히 udev 규칙을 작성할 수도 있습니다.

nano/etc/udev/rules.d/NN-Your_set_of_rules.rules

# My Device which should not have admin rights
ATTRS{idVendor}=="1234", ATTRS{idProduct}=="0042", MODE="664", GROUP="plugdev"

vid/pid: 1234/0042인 장치는 여전히 루트가 소유하지만 "plugdev" 그룹에 할당됩니다. 사용자가 이 그룹의 구성원인 경우 해당 그룹에 액세스할 수 있습니다. 원하는 다른 그룹을 선택할 수 있습니다. 패턴은 장치 권한에 대한 바이너리 코드입니다. 소유자와 그룹은 장치에 쓰고 읽을 수 있으며, 다른 소유자와 그룹은 장치에서 읽기만 할 수 있습니다.

그런 다음 Retrieve iSerial을 실행할 수 있습니다 lsusb -v.

관련 정보