Parece que o Udev (que está no homem) gerencia dispositivos dinâmicos como dispositivos USB quando eles estão conectados. Ele irá instanciá-los em / dev em algum lugar. (Como / dev / bus / usb / 002 no meu caso.) Esse nó / dev precisa ter algumas permissões, o Udev pega as permissões dos arquivos em /lib/udev/rules.d/, há alguma sintaxe arcana que corresponde a uma dispositivo para uma entrada.
Neste caso, qualquer coisa do subsistema usb com um tipo de usb_device obtém o modo de arquivo especificado. (Permissões padrão, 664 é rw-rw-r--, 666 é rw-rw-rw-.) Então você está dando todas as permissões de gravação para todos os dispositivos USB. Isso não parece bom, se você não confiar em todos os seus usuários. Se você é o único usuário, provavelmente pode confiar em si mesmo. Libusb parece querer escrever permissões para o nó do dispositivo usb para fazer a sua coisa, e se recusa a fazer qualquer coisa se isso não acontecer. Isso não parece certo, já que estou apenas tentando ler o dispositivo.
É possível ser mais específico com as permissões, você pode especificar um dispositivo por coisas como o fornecedor de USB (VID) e o ID do produto (PID). Portanto, seria possível criar um arquivo que funcionasse apenas para o seu scanner e deixar todos os outros dispositivos USB com as permissões padrão. Há uma página sobre o Udev no link que parece útil para tudo isso. Se você criar um arquivo que comece com um número maior, como "60-my-usb-scanner.rules" (os números mais altos têm prioridade) e tenha uma regra que liste seu scanner como:
SUBSYSTEM=="usb", ATTRS{idVendor}=="F1E2", ATTRS{idProduct}=="1F2E", MODE="0666"
Isso deve apenas definir as permissões para o dispositivo especificado (VID = 0xF1E2, PID = 0x1F2E). Você pode fazer com que o Udev tome conhecimento dessa alteração executando:
udevadm control --reload-rules