# [hplip et cups] permissions et règles udev (résolu)

## tmasscool

J'ai enfin trouvé pourquoi je ne pouvais pas imprimer lorsque j'utilisais le hp backend dans cups.

En fait, hplip utilise la libusb et non pas le module usblp pour accéder à l'imprimante.

Donc l'accès se fait par /dev/bus/usb/NUM_BUS/NUM_DEVICE et non pas sur /dev/usb/lpX

```
genbox timas # lsusb

Bus 003 Device 002: ID 03f0:0204 Hewlett-Packard DeskJet 815c
```

Si on regarde les permissions:

```
genbox timas # ls /dev/bus/usb/003/002 -l

crw-rw-r-- 1 root plugdev 189, 257 jui 12 16:16 /dev/bus/usb/003/002
```

On s'aperçoit que le groupe est plugdev, alors qu'il devrait lp.

En changeant le groupe à lp, on arrive à imprimer. Le problème est donc de corriger les règles udev pour que les imprimantes sur /dev/bus/usb/NUM_BUS/NUM_DEVICE soient automatiquement assignés à lp et non plus à plugdev.

Voici mon /etc/udev/rules.d/50-udev-default.rules concernant la libusb ...

```
# libusb device nodes

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0644"
```

Quelqu'un peut me filer un coup de main ? Je pense que plusieurs personnes sont touchées par ce problème, j'ai vu différents topics à ce sujet...

Merci d'avanceLast edited by tmasscool on Thu Jul 17, 2008 2:52 pm; edited 1 time in total

----------

## salamandrix

La règle que j'utilise pour mon hp (dans /etc/udev/rules.d/10-local.rules)  :

 *Quote:*   

> 
> 
> SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="1812", MODE:="0660", OWNER:="root", GROUP:="lp"
> 
> 

 

idVendor et idProduct peuvent être obtenus avec lsusb (en tant que root autrement l'imprimante n'est pas listée en simple user).

Si cela peut t'aider.

----------

## tmasscool

l'ordinateur en question est un portable, et je suis amené à le brancher sur plusieurs imprimantes hp. Le fait de devoir créer une règle par périphérique n'est pas une solution pratique.

D'autant plus que des règles udev existent déjà pour les imprimantes hp dans : /etc/udev/rules.d/70-hpmud.rules, mais elles ne semblent pas fonctionner. La question c'est pourquoi ?

```
genbox rules.d # cat /etc/udev/rules.d/70-hpmud.rules

# Udev rules file for HP printer products.

ACTION!="add", GOTO="hpmud_rules_end"

SUBSYSTEM!="usb|usb_device", GOTO="hpmud_rules_end"

SUBSYSTEM=="usb", ENV{DEVTYPE}!="usb_device" ,GOTO="hpmud_rules_end"

# Check for AiO products (0x03f0xx11).

ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="??11", GROUP="lp"

# Check for Photosmart products (0x03f0xx02).

ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="??02", GROUP="lp"

# Check for Business Inkjet products (0x03f0xx12).

ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="??12", GROUP="lp"

# Check for Deskjet products (0x03f0xx04).

ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="??04", GROUP="lp"

# Check for LaserJet products (0x03f0xx17).

ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="??17", GROUP="lp"

LABEL="hpmud_rules_end"
```

----------

## salamandrix

Normalement udev applique les règles selon l'ordre alphabétique des fichiers. Si un fichier après 70-hpmud.rules donne une règle udev pour ce matériel, alors c'est cette dernière règle qui sera appliquée.

Pour palier à ce comportement on peut utiliser ":=" à la place de "=".

édit : le := permet d'ignorer les règles suivantes qui s'appliqueraient sur ce périphérique.

Donc deux possibilité à mon avis :

1. Modifier directement 70-hpmud.rules pour remplacer = par := (au niveau du groupe).

2. Recopier le fichier 70-hpmud.rules en par exemple 10-local_hpmud.rules puis remplacer les signes = par := .  L'avantage ici c'est qu'en cas de mise à jour et d'un etc-update, tu ne devrais pas avoir de soucis.

En espérant que cela t'aide.

----------

## bob1977

Je ne peux pas t'aider concernant udev mais as-tu essayer de te rajouter dans le groupe plugdev ou tu as une raison de ne pas le faire?

----------

## salamandrix

 *bob1977 wrote:*   

> Je ne peux pas t'aider concernant udev mais as-tu essayer de te rajouter dans le groupe plugdev ou tu as une raison de ne pas le faire?

 

Si le groupe sur le device est plugdev, cups ne lance pas l'impression (tout du moins celle-ci est en échec), même si l'user appartient à ce groupe. Il est nécessaire que le groupe soit lp pour que cups imprime. Je ne sais pas si cela est volontaire (pour des raisons de sécurité) ou non, mais lorsque j'ai eu ce souci sur le pc de ma sœur, il m'a fallu quelques heures pour comprendre ce problème.

Le problème est surtout que selon les mises à jour de udev, les règles peuvent changer du jour au lendemain (de bonnes règles deviennent mauvaises et réciproquement certainement). D'où l'intérêt de faire ses propres règles pour son matériel. Maintenant dans le cas d'un portable, c'est sûr que c'est beaucoup plus contraignant.

----------

## ghoti

 *salamandrix wrote:*   

> Si un fichier après 70-hpmud.rules donne une règle udev pour ce matériel, alors c'est cette dernière règle qui sera appliquée.

 

Tu es sûr de ça ?

Je croyais au contraire que la recherche s'arrêtait dès qu'une correspondance était trouvée et qu'il fallait donc placer ses propres règles dans des fichiers situés avant les fichiers par défaut.

D'ailleurs, tu le dis toi-même plus haut :

 *salamandrix wrote:*   

> La règle que j'utilise pour mon hp (dans /etc/udev/rules.d/10-local.rules)  :

 

Ou alors, j'ai pas compris ce que tu voulais dire ?

----------

## salamandrix

 *ghoti wrote:*   

>  *salamandrix wrote:*   Si un fichier après 70-hpmud.rules donne une règle udev pour ce matériel, alors c'est cette dernière règle qui sera appliquée. 
> 
> Tu es sûr de ça ?
> 
> Je croyais au contraire que la recherche s'arrêtait dès qu'une correspondance était trouvée et qu'il fallait donc placer ses propres règles dans des fichiers situés avant les fichiers par défaut.
> ...

 

À l'époque où j'ai été confronté à ce problème, c'était le cas, et c'est certainement encore le cas aujourd'hui (je peux redémarrer pour vérifier).

 *ghoti wrote:*   

> 
> 
> D'ailleurs, tu le dis toi-même plus haut :
> 
>  *salamandrix wrote:*   La règle que j'utilise pour mon hp (dans /etc/udev/rules.d/10-local.rules)  : 
> ...

 

Mais si tu relis mon post tu verras que je parle de mettre ":=" (deux points égal) et non "=" (égal tout seul) car justement le ":=" permet d'ignorer par la suite les règles qui pourraient s'appliquer.

Exemple pour mon imprimante : si j'ai "GROUP=lp", une autre règle s'appliquera par la suite qui mettra le groupe à plugdev (c'était le comportement que j'avais à l'époque, et qui était gênant), par contre un "GROUP:=lp" permettra d'ignorer la clé GROUP présent dans les autres règles concernant ce périphérique.

Peut-être me suis-je mal exprimé tout à l'heure.Last edited by salamandrix on Thu Jul 17, 2008 4:05 pm; edited 1 time in total

----------

## tmasscool

 *bob1977 wrote:*   

> Je ne peux pas t'aider concernant udev mais as-tu essayer de te rajouter dans le groupe plugdev ou tu as une raison de ne pas le faire?

 

Je suis déjà dans le groupe plugdev, mais cups nécessite que le groupe de l'imprimante soit lp pour imprimer.

Sinon, j'ai essayé en faisant le fichier 10-local_hpmud.rules et j'ai remplacé le = du groupe par :=, ça fonctionne... Je marque donc le topic comme résolu.

Merci salamandrix...

----------

## salamandrix

ghoti >> mea culpa : je viens de redémarrer en mettant un simple "=" et en changeant de groupe pour un bidon. À priori udev à ignorer le changement de groupe sur d'autres règles et met bien mon périphérique pour le groupe bidon (à moins qu'il n'y ait pas de règle général gérant la création de mon imprimante). Pourtant je t'assure qu'il y a six moi peut-être sans ':=' c'était la dernière règle trouvée qui était appliqué    :Smile: 

édit : cela je vais rester avec mes ":=" on n'est jamais trop prudent   :Embarassed: 

tmasscool >> de rien, pour une fois que je peux rendre service...

édit 2 : bah en fait il n'y a pas de règle qui gère mon imprimante donc normal que le "=" est suffisant :

 *Quote:*   

> 
> 
> salamandrix@gentoo ~ $ cat /etc/udev/rules.d/* | grep 1812
> 
> #BUS=="usb", SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="1812", MODE:="0660", OWNER:="root", GROUP:="lp"
> ...

 Last edited by salamandrix on Thu Jul 17, 2008 3:22 pm; edited 1 time in total

----------

## bob1977

 *Quote:*   

> Si le groupe sur le device est plugdev, cups ne lance pas l'impression (tout du moins celle-ci est en échec), même si l'user appartient à ce groupe. Il est nécessaire que le groupe soit lp pour que cups imprime. Je ne sais pas si cela est volontaire (pour des raisons de sécurité) ou non, mais lorsque j'ai eu ce souci sur le pc de ma sœur, il m'a fallu quelques heures pour comprendre ce problème.
> 
> Le problème est surtout que selon les mises à jour de udev, les règles peuvent changer du jour au lendemain (de bonnes règles deviennent mauvaises et réciproquement certainement). D'où l'intérêt de faire ses propres règles pour son matériel. Maintenant dans le cas d'un portable, c'est sûr que c'est beaucoup plus contraignant.

 

 Ca parait logique.

 *Quote:*   

> Je suis déjà dans le groupe plugdev, mais cups nécessite que le groupe de l'imprimante soit lp pour imprimer.
> 
> Sinon, j'ai essayé en faisant le fichier 10-local_hpmud.rules et j'ai remplacé le = du groupe par :=, ça fonctionne... Je marque donc le topic comme résolu.
> 
> Merci salamandrix...

 

 Grâce à Salamandrix, je saurais ce qu'il faut faire vu que j'ai une imprimante HP que je n'ai pas touché depuis des mois. A l'époque où je l'avais configuée sur un autre PC, il n'y avait pas udev.

----------

## ghoti

 *salamandrix wrote:*   

> À l'époque où j'ai été confronté à ce problème, c'était le cas, et c'est certainement encore le cas aujourd'hui (je peux redémarrer pour vérifier).

 

Inutile de redémarrer : finalement, on dirait bien que tu as raison, du moins partiellement !  :Very Happy: 

D'après ce que j'ai compris, ta description correspond bien aux "udev" actuels, sauf pour certaines variables (NAME ...).

Mais à l'origine, il me semble que ce n'était pas le cas : pour toutes les variables, c'était la première affectation qui comptait, comme si on avait systématiquement utilisé l'opérateur ":="   :Confused: 

Bref, je dois retarder d'une guerre  :Sad: 

----------

