Contexte : vous devez imprimer depuis une application de santé via un serveur d’impression, vers un PC portable en VPN avec une imprimante USB partagée. Ce guide explique la chaîne LPR/LPD, liste les causes d’échec typiques et propose une procédure fiable, plus des alternatives robustes.
Impression via serveur d’impression → PC portable (VPN) → imprimante USB partagée
Vue d’ensemble de la question
Contrainte métier : l’application doit imprimer en backend via un serveur d’impression. Sur le terrain, l’objectif est de pousser ces jobs vers un PC portable connecté en VPN hébergeant une imprimante USB locale partagée.
Constat courant : du serveur → portable, le job sort bien (visible dans Wireshark) mais n’entre jamais dans la file du portable. On observe une arrivée en file uniquement lorsque le port du serveur est configuré en LPR et que le service LPD est activé sur le portable.
Ce qui coince le plus souvent
- Nom de file LPD incorrect : sous Windows, la file LPD ≙ nom de partage de l’imprimante sur le portable (respect strict ; certaines implémentations tiennent compte de la casse).
- Pare‑feu/VPN : le port TCP 515 n’est pas autorisé sur le profil réseau réellement actif, ou bien le retour est impossible (split‑tunnel, routes manquantes, NAT asymétrique).
- SNMP coché par erreur sur le port Standard TCP/IP côté serveur : les PC clients ne répondent pas à SNMP → imprimante affichée hors connexion et relances inutiles du spouleur.
- Option LPR “Byte Counting” mal réglée : certains LPD l’exigent, d’autres la refusent. Un mauvais réglage peut empêcher l’envoi ou tronquer le job.
- Pilotes / format de spouleur : divergences RAW/EMF ou pilote inadapté (PCL/PS/GDI). Le portable et le serveur doivent “parler” la même langue d’impression.
Schéma de flux et handshake LPR/LPD
Application → Serveur d’impression ──(LPR/TCP 515 via VPN)──▶ Portable (LPD) → Spouleur → USB Séquence LPD attendue : 1. Receive job (0x02 \ \n) 2. Send control file (0x02 \ \n ... cfA###host) 3. Send data file (0x03 \ \n ... dfA###host) Chaque étape est acquittée (0x00) si OK ; 0x01/0x02 sinon (erreur/queue inconnue).
Pré‑requis techniques
Élément | Exigence | Remarques |
---|---|---|
OS serveur | Windows Server (2016→2022) ou équivalent avec rôle impression | Activer le moniteur de port LPR si non présent |
OS portable | Windows 10/11 | Feature Service LPD activée |
VPN | Accès bidirectionnel TCP 515 | Éviter le split‑tunnel bloquant le retour |
Pilotes | Identiques des deux côtés | Privilégier RAW (PCL/PS) quand possible |
Sécurité | Flux chiffré | LPD est en clair ; compter sur VPN/IPsec et ACL précises |
Réponse & Solution
Procédure pas‑à‑pas (recommandée)
Sur le PC portable (imprimante locale)
- Activer le Service LPD
Via l’interface : Fonctionnalités Windows → Services d’impression et de numérisation → Service LPD.
En ligne de commande (méthode sûre) :dism /online /Get-Features /Format:Table | findstr /i lpd REM Relevez le nom exact de la fonctionnalité, puis : dism /online /Enable-Feature /FeatureName:<Nom_LPD> /All /NoRestart
Astuce : si le binairelpdsvc.dll
est absent, la feature n’est pas activée. - Partager l’imprimante USB et noter le nom de partage :
Panneau de configuration → Périphériques et imprimantes → Propriétés → Partage → Partager cette imprimante.
Ce nom = file LPD à utiliser côté serveur. Éviter espaces et caractères spéciaux. - Autorisations : donnez le droit Imprimer au compte/ordinateur utilisé par le serveur d’impression (pour tester, autoriser Tout le monde, puis resserrer).
- Pare‑feu : ouvrez TCP 515 sur le profil réseau actif du VPN :
netsh advfirewall firewall add rule name="LPD (TCP-In)" dir=in action=allow protocol=TCP localport=515 profile=domain,private
Vérifiez la règle intégrée Service LPD (TCP‑In) si disponible. - Spouleur : assurez‑vous que le service Spouleur d’impression est démarré et que l’imprimante n’est pas en Utiliser l’imprimante hors connexion.
services.msc sc query spooler Get-Printer | Format-Table Name, Shared, WorkOffline
- Disque et chemin de spool : espace libre sur
%SystemRoot%\System32\spool\PRINTERS
. En cas de sites à faible stockage, déporter le spool vers un disque plus grand.
Sur le serveur d’impression
- Installer le Moniteur de port LPR (si absent). Sur Server : via le rôle Services d’impression et de numérisation. Sur client Windows : activer la feature Moniteur de port LPR (même méthode DISM que ci‑dessus).
- Créer l’imprimante avec un Port Standard TCP/IP → Protocole LPR :
- Hôte : IP/FQDN du portable (évitez les noms courts si le VPN n’expose pas NetBIOS).
- Nom de file : strictement le nom de partage du portable (respect potentiel de la casse).
- SNMP : désactivez SNMP Status Enabled sur ce port.
- LPR Byte Counting : testez ON puis OFF ; conservez le réglage qui fonctionne.
- Onglet Avancé : laisser Spouler activé et Démarrer l’impression après le dernier octet spoulé pour éviter les pages incomplètes.
- Pilote : installez le même pilote que sur le portable ; privilégiez la sortie RAW (PCL/PS). Évitez GDI/host‑based si la chaîne doit être indépendante du poste.
- Test fonctionnel : utilisez les outils LPR natifs pour valider la chaîne côté serveur :
REM Envoyer un test : lpr -S <IP_portable> -P <NomDePartage> C:\Windows\System32\win.ini REM Consulter la file : lpq -S <IP_portable> -P <NomDePartage>
Vérifications ciblées
Journaux Windows
Ouvrez Observateur d’événements → Journaux des applications et services → Microsoft → Windows → PrintService → Operational. Recherchez les messages “queue not found”, “access denied”, “job submitted”, “rendering failed”. Ces événements (ex. IDs 307/372/842) orientent rapidement le diagnostic.
# Exemple de filtre PowerShell
Get-WinEvent -LogName "Microsoft-Windows-PrintService/Operational" |
Where-Object {$_.TimeCreated -gt (Get-Date).AddHours(-2)} |
Select-Object TimeCreated, Id, LevelDisplayName, Message
Trafic réseau & Wireshark
Filtrez tcp.port == 515
. Une séquence complète doit montrer : Receive job → Send control file → Send data file avec acquittements. Un refus queue unknown signale un nom de file erroné. Si vous voyez le serveur émettre sans réponse, suspectez le pare‑feu/VPN du portable.
VPN & routage
- Évitez le split‑tunnel qui autorise l’aller mais bloque le retour.
- Vérifiez les routes :
route print Get-NetRoute -AddressFamily IPv4 | Sort-Object DestinationPrefix
- Testez la connectivité applicative :
Test-NetConnection -ComputerName <IP_portable> -Port 515
Tableaux d’aide au diagnostic
Carte des symptômes → causes → correctifs
Symptôme | Cause probable | Correctif |
---|---|---|
Job visible côté serveur, rien sur le portable | Nom de file LPD incorrect | Utiliser le nom exact du partage d’imprimante |
Job en erreur immédiate | LPR Byte Counting incompatible | Basculer l’option ON/OFF et retester |
Imprimante “hors connexion” sur le serveur | SNMP activé sur le port | Décocher SNMP Status Enabled |
Paquets sortent, aucun acquittement | Port 515 bloqué au retour ou profil pare‑feu | Ouvrir TCP 515 sur le bon profil VPN |
Pages vides/illisibles | Mauvais pilote ou format EMF/RAW | Aligner pilotes, forcer RAW (PCL/PS) |
Jobs bloqués en file du portable | Spool plein, imprimante USB hors ligne | Libérer l’espace, réactiver l’imprimante |
Compatibilité de l’option “LPR Byte Counting”
Comportement | Quand l’activer | Quand la désactiver |
---|---|---|
Le LPD réclame la taille exacte du job avant l’envoi | LPD stricts (certains hôtes Windows/Linux/print servers) | LPD tolérants ou anciens firmwares qui refusent le comptage |
Erreurs de fin de tâche | Si troncatures observées | Si refus “malformed length” |
Formats d’impression : RAW vs EMF
Format | Avantages | Inconvénients | Usage recommandé |
---|---|---|---|
RAW (PCL/PS) | Prévisible, indépendant du poste | Dépend du bon pilote côté serveur | Chaînes serveurs, environnements distants |
EMF | Rendu côté client | Couplage fort au poste cible | Éviter en LPR/LPD serveur→portable |
Check‑list de conformité et sécurité (santé)
- Confidentialité : LPD est en clair → exiger VPN et limiter les IP sources.
- Traçabilité : activer le journal PrintService/Operational avec conservation suffisante.
- Principes du moindre privilège : ACL sur le partage d’imprimante ; pas de comptes génériques permanents.
- Hygiène : verrouiller l’accès RDP, désactiver LPD hors besoins, contrer l’énumération réseau.
Alternatives fiables si LPD reste rétif (tout en gardant le serveur d’impression dans le chemin)
Port UNC (SMB) à la place de LPR
Sur le serveur : Ajouter une imprimante → Ajouter une imprimante locale (manuellement) → Créer un port Local et saisir \\Portable\NomDePartage
. Cela contourne LPD et s’appuie sur SMB (445).
- Authentification : prévoir des crédentiels utilisables par le service Spouleur (compte de service dédié recommandé). Dans des domaines distincts, valider la relation d’approbation ou utiliser des identifiants explicites.
- Résilience : en cas d’échec, supprimer et recréer le port Local plutôt que de modifier in‑place.
Redirection RDP (Easy Print)
Si l’application tourne en session RDS, la redirection RDP fait apparaître l’imprimante USB du portable dans la session. Le job est soumis depuis le serveur mais redirigé au client.
- Activer la stratégie Utiliser le pilote Easy Print et autoriser la redirection d’imprimantes.
- Avantage : pas de LPD, moins de ports à ouvrir. Inconvénient : dépend d’une session RDP active.
Solutions managées
Pour la robustesse, la délégation multi‑site et la traçabilité : envisager des services d’impression cloud ou des passerelles dédiées (Universal Print, PrinterLogic, Tricerat, ThinPrint…). Elles conservent la logique “serveur d’impression” tout en optimisant le transport et la supervision.
Plan de test en 10 minutes (zéro doute)
- Sur le portable : imprimer une page de test locale → valide le pilote et l’USB.
Test-NetConnection <IP_portable> -Port 515
depuis le serveur → valide réseau/VPN/pare‑feu.lpr -S <IP_portable> -P <NomDePartage> C:\Windows\System32\win.ini
→ valide LPD et nom de file.- Surveiller PrintService/Operational du portable → capture des erreurs explicites.
- Basculer “LPR Byte Counting” si nécessaire et retester.
- Désactiver SNMP sur le port du serveur (si encore activé) et retester.
Bonnes pratiques d’ingénierie
- Nommage : nom de partage court, ASCII, sans espace ; éviter majuscules/minuscules ambiguës si le LPD distant est sensible à la casse.
- Surveillance : supervision du service LPDSVC et du Spooler (redémarrage auto, alertes).
- Capacité : place disque, files d’attente, débit VPN (pics de spouling)
- Standardisation : modèle pilote unique (ex. PCL 6) pour serveur et portable.
FAQ ciblée
Q : Puis‑je utiliser IP du portable qui change ?
R : Préférez une réservation DHCP côté VPN ou un FQDN (DNS dynamique) pour stabiliser le point de terminaison LPR.
Q : Et l’IPv6 ?
R : Évitez d’imposer IPv6 si le VPN ne l’achemine pas ; utilisez IPv4 cohérente sur les deux extrémités.
Q : Pourquoi l’imprimante apparaît “hors connexion” sur le serveur ?
R : Parce que le port Standard TCP/IP tente un ping/SNMP. En LPR vers un PC portable, désactivez SNMP pour éviter cet état trompeur.
Q : Les travaux sont “imprimés” mais rien ne sort.
R : Vérifiez le format (RAW vs EMF) et le pilote. Un pilote host‑based côté serveur ne peut pas produire un flux compréhensible par l’imprimante cible.
Script d’audit express
:: Sur le PORTABLE (élever en admin)
sc query lpdsvc
netsh advfirewall firewall show rule name="LPD (TCP-In)"
Get-Printer | ft Name,ShareName,Shared,WorkOffline
Get-WinEvent -LogName "Microsoft-Windows-PrintService/Operational" -MaxEvents 10
\:: Sur le SERVEUR
Test-NetConnection \ -Port 515
Get-PrinterPort | ? {$\_.PortMonitor -like "*LPR*"} | ft Name,PrinterHostAddress
(Get-Printer -Name "\").PortName
Résumé actionnable
- ✅ File LPD = nom de partage du portable (critique).
- ✅ TCP 515 ouvert sur le bon profil VPN + routes de retour.
- ✅ SNMP désactivé sur le port Standard TCP/IP côté serveur.
- ✅ Tester “LPR Byte Counting” (ON puis OFF).
- ✅ Aligner les pilotes et forcer RAW côté serveur.
- 🔁 En cas d’échec persistant : basculer en port UNC (SMB) ou RDP Easy Print.
Conclusion
La chaîne Application de santé → Serveur d’impression → LPR → Portable (LPD) → USB est réalisable et stable si l’on verrouille quatre points : nom de file LPD strictement égal au nom de partage, pare‑feu/VPN correct (TCP 515 bidirectionnel), SNMP désactivé sur le port Standard TCP/IP, et “Byte Counting” correctement paramétré. En complément, l’alignement des pilotes et le choix d’une sortie RAW réduisent les surprises. Si LPD reste capricieux dans un contexte de terrain, le port UNC (SMB) et la redirection RDP offrent souvent une fiabilité supérieure tout en conservant le serveur d’impression dans la boucle.