Imprimer, HPLIP
De Diablotins.org.
| Installation d'une imprimante USB tout-en-un Hewlett-Packard (FreeBSD 8.x)
|
| ||
| 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.
|
Pour ce faire, je passe par un groupe “HPLIP”. 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 droits “rw” 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:
- devfs.rules(5), pour tout périphérique sur ugen:
[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
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 ?
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émon “saned”, 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

