Configurar o udev para alterar as permissões no dispositivo USB HID?

21

Eu tenho uma balança USB, uma USB HID. Atualmente, quando está conectado, as permissões permitem apenas que o superusuário acesse. Como posso configurar o udev para permitir que alguém acesse este dispositivo? Eu tenho o ID do fornecedor e do produto, mas gostaria de correspondê-lo com base no tipo HID.

No momento, estou tendo problemas para encontrar qualquer regra existente que se aplique a isso (procurei por "hidraw" no /lib/udev/rules.de /etc/udev/rules.d, entre outras coisas.

erjiang
fonte

Respostas:

21

Normalmente, isso é feito adicionando-se a /etc/udev/rules.dum arquivo nomeado 50-usb-scale.confcom conteúdo como este:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

Onde HEX1 e HEX2 são substituídos pelo fornecedor e pelo ID do produto, respectivamente.

Para corresponder ao tipo de interface, tente substituir ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"por uma correspondência por bInterfaceClassser 03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

Mas esteja avisado, isso também pegará ratos e teclados.

Kees Cook
fonte
4
No ubuntu 14.04, você deve usar o MODE: = "0666", sem os dois pontos, a regra não faz nada.
EdwinW
2
No 14.04, esse arquivo precisa ter uma .rulesextensão. Um arquivo com uma .confextensão não funcionará.
cherno
11
use lsusb -vvvpara obter o idProduct e idVendor #
Xavier13
2
Como essa pergunta é bastante popular na saída do google ... acho que deveria ser ATTRS, não ATTR - pelo menos essa alteração o corrigiu para mim.
infthi
2
Em 14.04.5 LTS, descobri: lsusbé um bom começo para ver o que está conectado e os IDs. idVendore as idProductcorrespondências diferenciam maiúsculas de minúsculas , portanto o ID DA77não funciona para mim, mas da77funciona. (Diagnóstico útil udevadm info --attribute-walk /dev/bus/usb/008/023:, dispositivo de barramento 008 023 meu exemplo; lsusbpara o seu.) Depois de adicionar uma regra sudo udevadm control --reload-rulese sudo udevadm triggerevitar a reinicialização: as alterações são segundos depois disso. ATTR vs ATTRS não fez nenhuma diferença. Meu arquivo .rules lê: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko 29/08/16
7

Apenas para o resumo:

Você pode filtrar por:

  • idVendor
  • idProduct
  • serial

E use:

== Compare para igualdade.

! = Compare pela desigualdade.

= Atribua um valor a uma chave. As chaves que representam uma lista são redefinidas e apenas esse valor único é atribuído.

+ = Adicione o valor a uma chave que contém uma lista de entradas.

: = Atribuir um valor a uma chave finalmente; não permitir alterações posteriores.

Você pode atribuir a um dispositivo específico um novo caminho específico em / dev / ...
Exemplo:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

Resulta em:

Você pode acessar o dispositivo via '/ dev / hiddevx' ou via '/ dev / myhid' facilmente, todos os usuários do grupo 'cdrom' podem ler no dispositivo. O proprietário 'user28' pode ler e escrever.

ou mais simples:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

Resultados em: Todo usuário pode acessar todos os dispositivos de contato do fornecedor 0x16c0

Para detalhes, consulte: Documentos

rundekugel
fonte
2
:=não é para comparações. Os documentos dizem "Atribuir um valor a uma chave finalmente; não permitir alterações posteriores".
Lucas
5

Caso você precise alterar as ttyACM0permissões (como eu) , estas são minhas configurações:

KERNEL=="ttyACM0", MODE="0777"

Falhou quando tentei especificar o fornecedor e o ID do produto. Não sei por quê.

Rodo
fonte
Sim, as obras Kernel opção para a maioria dos dispositivos HID, melhor do que o subsistema USB
Muriuki David
2

Se for um dispositivo HIDRAW, é necessário

chmod 0666 /dev/hidrawX

onde X é o número do dispositivo oculto, por exemplo, hidraw0. você pode fazer

ls /dev/hid*

para ver uma lista :) Ou apenas

sudo chmod 0666 /dev/hidraw*

para definir para todos os dispositivos hidraw, provavelmente não recomendado.

Muriuki David
fonte
2

Atualização / esclarecimento do Ubuntu 18.04:

A resposta de Kees Cook é próxima, mas requer duas alterações para funcionar em 18.04 (a versão atual e a única em que eu testei isso).

  1. Encontre seu idVendor e idProduct com lsusb .
    • Esses serão os 2 valores hexadecimais após "ID", separados por dois pontos. Estou adicionando um scanner. lsusb me deu:
      Barramento 001 Dispositivo 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Como root, adicione um arquivo ao /etc/udev/rules.d
    • Algo como 50-usb-epsonscanner.rules
    • A extensão deve ser ".rules"  
  3. Nesse arquivo, adicione:
    SUBSISTEMA == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Mas com seus valores hexadecimais idVendor e idProduct.
    • Observe que é "ATTRS" e não "ATTR".
  4. Faça login novamente. Não há necessidade de reiniciar.
gatohaus
fonte
ATTRStanto para fornecedor e ID do produto? Em seguida, seu exemplo de código está errado (assim como você indica duas linhas posteriormente).
neo post modern
Apenas o segundo é ATTR. Trabalha aqui. Estou supondo que é um erro que pode mudar sem aviso prévio.
gatohaus