Compreendendo as regras e permissões do udev na libusb

4

Eu tive um problema com meu scanner. Xsane trabalhou apenas como root. Utilizando-o como usuário normal, não encontrou nenhum dispositivo. Adicionar o usuário aos grupos saned ou scanner não ajudou.

Finalmente, resolvi o problema alterando

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

para

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

em /lib/udev/rules.d/50-udev-default.rules

No entanto, não entendo por que isso funciona e se tem efeitos colaterais negativos. Eu acho que isso dá permissões de gravação para todos os usuários em qualquer dispositivo usb, mas eu não sei se e por que isso está correto e porque isso resolve o problema do scanner.

Alguém poderia explicar em detalhes por que isso funciona e se tem efeitos colaterais?

Meu sistema é: ubuntu 12.04 , o scanner é um HP PSC 1200 all in one device hplip instalado no repositório.

    
por student 30.07.2012 / 18:36

2 respostas

4

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
    
por 01.08.2014 / 00:47
2

libusb foi projetado para permitir drivers de espaço do usuário para dispositivos USB: em outras palavras, permite que os aplicativos enviem comandos libusb em si não entende o dispositivo.

Como resultado, libusb deve tratar todos os dados que passam do computador para o dispositivo USB como uma operação de gravação. Isso inclui até mesmo gravações triviais, como enviar um comando para o scanner para descrever seus recursos de digitalização.

O acesso somente leitura a dispositivos libusb funcionaria somente com dispositivos que enviarão dados espontaneamente para o computador, como um teclado ou mouse.

    
por 21.08.2018 / 12:47