Obtenha o iSerial com o lsusb sem sudo

5

No meu usuário sudoer (não raiz), posso ver meu dispositivo com lsusb . No entanto, para ver o número do iSerial, eu preciso emitir lsusb -v , eu recebo um monte de informações impressas, mas a mensagem "Não foi possível abrir o dispositivo, algumas informações estarão faltando" também estará na saída. O iSerial é uma das informações que faltam. Usando sudo lsusb -v funciona bem.

Eu tentei sudo chmod -R o+rw /dev/bus/usb , depois disso eu posso verificar o iSerial sem sudo. Mas após a reinicialização, não funcionará novamente. Também não ajudará quando um novo dispositivo for conectado.

Existe alguma maneira melhor de fazer isso?

    
por Conan 23.07.2016 / 00:37

2 respostas

1

Você pode obter as informações do udev, caso tenha notado o dispositivo. Por exemplo, eu tenho um dispositivo de UPS

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

Usando os números de barramento e dispositivo (004/041), posso obter informações do udevadm sem ser raiz. Isso inclui um valor ID_SERIAL_SHORT que é o mesmo que o valor iSerial.

$ 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
    
por 23.07.2016 / 21:15
1

De acordo com o strace lsof , abre arquivos de dispositivos com permissões de leitura e gravação:

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

Você pode usar o recurso CAP_DAC_OVERRIDE para dar o poder do root de ler e gravar qualquer arquivo em um sistema apenas para lsusb utilitário executado por usuário específico.

Esta resposta fornece instruções gerais sobre como configurar recursos. No seu caso, /etc/security/capabilities.conf shoud ficará assim:

CAP_DAC_OVERRIDE        your_username
none    *

As alterações ocorrerão no próximo login. A reinicialização é a opção mais simples. Verifique os recursos do usuário:

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

Configurando o recurso no utilitário lsusb :

$ setcap CAP_DAC_OVERRIDE+ie /bin/lsusb
$ getcap /bin/lsusb
/bin/lsusb = cap_dac_override+ie
    
por 25.07.2016 / 03:41