Imprimer, HPLIP

De Diablotins.org.

(Redirigé depuis Imprimer, hplip)


Installation d'une imprimante USB tout-en-un Hewlett-Packard (FreeBSD 8.x)
Image:brush.png
HP fourni un support pour ses imprimantes, grâce à une collection d'outils open source: le port HPLIP.



Sommaire

HPLIP

print/hplip se compose de plusieurs fichiers:

  • hp, hpcups : interfaces d'impression pour CUPS.
  • une collection de pilote ppd pour CUPS.
  • hp-setup, hp-probe, hp-systray, hp-* une collection d'outils pour configurer ou utiliser l'imprimante.

Une liste:

hp-align          hp-levels         hp-printsettings  hp-toolbox
hp-check          hp-linefeedcal    hp-probe          hp-unload
hp-clean          hp-makecopies     hp-query          hp-wificonfig
hp-colorcal       hp-makeuri        hp-scan           hpcdtoppm
hp-devicesettings hp-mkuri          hp-sendfax        hpftodit
hp-fab            hp-pkservice      hp-setup          hpijs
hp-faxsetup       hp-plugin         hp-systray        
hp-firmware       hp-pqdiag         hp-testpage       
hp-info           hp-print          hp-timedate  

hp-systray est l'utilitaire principal, il se place dans la barre de tâches («systray»), par exemple sous KDE, et permet l'accès aux autres outils.

L'imprimante

Les imprimantes HP supportées sont listées sur le site HPLIP opensource.
La documentation indique la version de HPLIP supportée pour chaque modèle de machine.

Pour ma part je viens juste de m'offrir une HP Photosmart C4680. Elle réclame hplip 3.9.6 et le scanner peut être utilisé avec le port graphics/sane-backends.
Allons-y...


Note de David: Ça fonctionne aussi avec une OfficeJet 4500...


Installation de HPLIP

L'installation se fait sans soucis par les ports : print/hplip (version 3.x) ou print/hplip2 (version 2.x).

Consultez le message d'installation. Si vous l'avez raté:

pkg_info -D 'hplip*'

ou

pkg_info -D hplip\*

Attention le message d'installation n'est pas tout à fait correct pour FreeBSD 8.0, en raison de la nouvelle pile libusb(3). Depuis la branche 8.1, tout semble rentré dans l'ordre.

Détection USB

Tout ceci est cassé sur FreeBSD9, la seule solution trouvée pour l'instant, est de lancer à la main un

chmod go+rw /dev/usb*

pas élégant du tout

L'imprimante est contrôlée par le pilote ugen(4).
Plusieurs nœuds de périphériques sont créés automatiquement par le système dans usb(4) /dev/usb/* à la détection de l'imprimante.
Pour imprimer, CUPS doit avoir les droits 'rw' sur ces fichiers. L'utilisateur doit également avoir les droits pour utiliser les outils HP. Les programmes lancés par CUPS n'héritent pas (pourquoi ?) des groupes définis pour l'utilisateur CUPS, il faut donc définir des entrées de la forme “cups:hplip”.

Nb : si le pilote ulpt(4) s'attache à l'imprimante, il faut impérativement retirer “ulpt” du noyau pour l'éviter.


Ce qui n'est plus le cas depuis FreeBSD9.


Pour ce faire, je passe par un groupeHPLIP”. On doit également ajouter les utilisateurs dans ce groupe (ici l'utilisateur «patrick»).

/etc/group :
hplip:*:999:patrick

Nb : faites attention de choisir un gid (ici 999) non utilisé.

ou

pw group add hplip -M patrick


Ensuite il faut changer le groupe et appliquer les droitsrw” sur les nœuds de périphériques. Si l'imprimante est toujours connectée sur le même port USB, ou si vous n'utilisez aucun autre périphérique sur ugen, vous pouvez simplement utiliser devfs pour cela:

[hplip_rule=10]
add path 'ugen*' mode 0660 group hplip user cups 
  • devfs.rules(5), si votre imprimante est connectée en permanence sur ugen2.2:
[hplip_rule=10]
add path 'ugen2.2*' mode 0660 user cups group hplip

Et ajoutez la règle dans /etc/rc.conf:

devfs_system_ruleset="hplip_rule"


Pour ma part j'utilise devd et un petit script pour devd.conf(5):

attach 10 {
        device-name "ugen[0-9]+";
        match "vendor"  "0x03f0";
        match "product" "0x7411";
        action "/root/sbin/ugen-hdle $device-name";
};

ou, sans script:

attach 10 {
        device-name "ugen[0-9]+";
        match "vendor"  "0x03f0";
        match "product" "0x7411";
        # tr-d will remove the `ugen` occurence from the device name string : `ugenx.y`
        # echo result: `ugenx.y`: `x.y.*`
        action "chown cups:hplip /dev/usb/`echo $device-name | tr -d ugen`.*; \
               chmod 660 /dev/usb/`echo $device-name | tr -d ugen`.*"; 

Pour connaitre le “vendor” et le “product” de votre imprimante, utilisez simplement la commande:

# cat /var/run/devd.pipe

branchez l'imprimante, vous devez recevoir quelque chose comme:

+ugen2.2 vendor=0x03f0 product=0x7411 devclass=0x00 devsubclass=0x00 sernum="CN987MF30J05BQ" release=0x0100 at
port=2 on ugen2.1

Créez ensuite le script /root/sbin/ugen-hdle:

mkdir -p /root/sbin/
edit /root/sbin/ugen-dhle

Tapez ce qui suit:

 
#!/bin/sh
#
# Modification des entrées ugen de l'imprimante
#
dev=`echo $1 | /usr/bin/awk 'BEGIN { } { s = substr($0, 5, 99); } END { print s; }'`
 
/usr/sbin/chown cups:hplip /dev/usb/$dev.[0-9]
/bin/chmod g+rw /dev/usb/$dev.[0-9]

Ceci est un script, donc:

chmod ug+x /root/sbin/ugen-hdle

Relancez devd:

# /etc/rc.d/devd restart

Si tout marche comme prévu, vous devez avoir les entrées idoines dans /dev/usb, quand vous branchez l'imprimante :

# ls -la /dev/usb/*
crw-rw----  1 cups  hplip       0, 108 28 oct 03:24 /dev/usb/2.2.0
crw-rw----  1 cups  hplip       0, 112 28 oct 03:24 /dev/usb/2.2.1
crw-rw----  1 cups  hplip       0, 113 28 oct 03:24 /dev/usb/2.2.2
crw-rw----  1 cups  hplip       0, 114 28 oct 03:24 /dev/usb/2.2.4
crw-rw----  1 cups  hplip       0, 115 28 oct 03:24 /dev/usb/2.2.5
crw-rw----  1 cups  hplip       0, 116 28 oct 03:24 /dev/usb/2.2.6
crw-rw----  1 cups  hplip       0, 117 28 oct 03:24 /dev/usb/2.2.7
crw-rw----  1 cups  hplip       0, 118 28 oct 03:24 /dev/usb/2.2.8
crw-rw----  1 cups  hplip       0, 131 28 oct 03:24 /dev/usb/2.2.9

Vérifiez que l'utilisateur voit l'imprimante avec l'outil “hp-probe”:

$ id
uid=1001(patrick) gid=1001(patrick) groups=1001(patrick),0(wheel),5(operator),999(hplip)

Nb : la prise en compte de l'appartenance à un groupe s'effectue à l'ouverture de session, si vous êtes sous X reconnectez vous.

 $ hp-probe
 HP Linux Imaging and Printing System (ver. 3.9.8)
 --------------------------------
 | SELECT CONNECTION (I/O) TYPE |
 --------------------------------

   Num       Connection  Description
             Type
   --------  ----------  ----------------------------------------------------------
   0*        usb         Universal Serial Bus (USB)
   1         net         Network/Ethernet/Wireless (direct connection or JetDirect)

 Enter number 0...1 for connection type (q=quit, enter=usb*) ? 0
 Using connection type: usb

 --------------------
 | DEVICE DISCOVERY |
 --------------------
 
   Device URI                                             Model
  -----------------------------------------------------  --------------------------
   hp:/usb/Photosmart_C4600_series?serial=CN987MF30J05BQ  HP Photosmart C4600 series

 Found 1 printer(s) on the 'usb' bus.

Ça marche \o/.

Configuration de cups

Pour la suite, je considère que cups tourne en local, vous devez pouvoir y accéder par un navigateur sur l'url http://localhost:631, si ce n'est pas le cas vérifiez la configuration de cups.

L'intégration de l'imprimante dans cups s'effectue avec l'outil hp-setup. En raison d'un bug entre les outils HP et cups, les outils hp ne fonctionnent que si la locale de l'utilisateur est C (ou utf-8) :

$ setenv LC_ALL C
$ hp-setup

Indiquez simplement le fichier ppd à utiliser pour cups. Les ppd sont dans /usr/local/share/ppd/HP puis faites add printer. Normalement l'imprimante doit être listée dans cups et vous devriez pouvoir imprimer une page de test.


~David: Cela semble résolu aujourd'hui, version 3.10.6.


Utilisation avec hp-systray

Hp et Fluxbox

Cet outil s'intègre dans tout gestionnaire de fenêtres qui contient une barre d’icônes.
Lancez le au démarrage s'il cela ne se fait pas automatiquement comme dans la plupart des environnements de bureau comme KDE.
Dans ce cas, cela ne nous arrange pas en raison du bug sur les locales (il ne se lancera pas).
Supprimez le fichier /usr/local/etc/xdg/autostart/hplip-systray.desktop. Puis créez un script pour lancer hp-systray (je le lance à la main du coup) :

 
#!/bin/sh
export LC_ALL=C
/usr/local/bin/hp-systray &

Vous pouvez aussi utiliser ce script dans le fichier “hplip-systray.desktop” en remplaçant “hp-systray”le champ “Exec” par celui-ci.

scanner

Vous devez au préalable installer le port sane-backends et, de préférence une interface graphique comme graphics/xsane.
Vérifiez qu'il existe:

sane-find-scanner -q
found USB scanner (vendor=0x03f0 [HP], product=0x4712 [Officejet 4500 G510a-f]) at libusb:/dev/usb:/dev/ugen1.2
david:/home/david#scanimage -L
device `hpaio:/usb/Officejet_4500_G510a-f?serial=CN04EF11S905H2' is a Hewlett-Packard Officejet_4500_G510a-f all-in-one

Scanner un document en ligne:

hp-scan -o MonFichier.png

Attention, ces commandes ne fonctionnent qu'avec le démon dbus.

C'est terminé !

À ce stade vous devriez être en mesure d'utiliser hp-systray pour imprimer, scanner, voir le niveau d'encre et toutes ces sortes de choses.

Cool non ?

hp-toolbox
hp-testpage suivi de hp-scan -mcolor -o hp-test.png

Partager

Imprimante

Partageons l'imprimante avec samba.
Ajoutez les entrées suivantes dans /usr/local/etc/smb.conf:

# If you want to automatically load your printer list rather
# than setting them up individually then you'll need this
   load printers = yes

# you may wish to override the location of the printcap file
   printcap name = cups
# It should not be necessary to specify the print system type unless
# it is non-standard. Currently supported print systems include:
# bsd, cups, sysv, plp, lprng, aix, hpux, qnx
   printing = cups
# NOTE: If you have a BSD-style print system there is no need to
# specifically define each individual printer
[printers]
   comment = All Printers
   path = /var/spool/samba34
   browseable = no
   public = yes 
   guest ok = yes
   writable = no
   printable = yes

Exportez les imprimantes:

cupsaddsmb -a

Notez le “samba34” du spool, vérifiez le nom du votre à la même racine.

Scanner

Nous utiliserons le démonsaned”, qui sera lancé à la volée par inetd. Dans cet exemple, «192.168.1.19» est l'adresse de l'hôte.
Ouvrez “/etc/inetd.conf” et ajoutez:

sane-port       stream  tcp     nowait  cups:hplip     /usr/local/sbin/saned saned


Bien entendu, déclarez inetd dans rc.conf:

inetd_enable=yes

Autorisez les clients à se connecter dans /usr/local/etc/sane.d/saned.conf

#scan-client.somedomain.firm
192.168.1.0/24

Autorisez vous vous même dans /usr/local/etc/sane.d/net/conf

#localhost
192.168.1.19

Essayez:

david:$ scanimage -L
device `hpaio:/usb/Officejet_4500_G510a-f?serial=CN04EF11S905H2' is a Hewlett-Packard Officejet_4500_G510a-f all-in-one
device `net:192.168.1.19:hpaio:/usb/Officejet_4500_G510a-f?serial=CN04EF11S905H2' is a Hewlett-Packard Officejet_4500_G510a-f all-in-one

Déclarez le serveur sur le client, dans Modèle:Diablfile:

#localhost
192.168.1.19

En savoir plus

Projets :