PC Windows: 192.168.0.203 (hostname LIVING, workgroup WORKGROUP, usuario living\aligra)
Impresoras: Brother HL-L1222 Printer (USB002) y HP PSC 1400 series (USB001)
Origen: ArchLinux (cliente SMB/CUPS)
Resultado: ✅ Ambas impresoras imprimen desde Linux.
Ya estaban compartidas. Verificado el share y puerto:
Brother HL-L1222 Printer → puerto USB002 (default)HP PSC 1400 series → puerto USB001net user arctest P@ssw0rd123 /add
Oculto del login (que no aparezca en la pantalla de inicio, dejando solo 1 usuario visible):
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
arctest = 0 (DWORD)
¿Era necesario? VERIFICADO: SÍ.
- Listar shares sin credenciales sí funciona →
smbclient -N -L //192.168.0.203lista las impresoras.- Imprimir sin credenciales NO →
smbspoolanónimo devuelveNT_STATUS_ACCESS_DENIED. Windows exige un usuario autenticado con permiso Print para enviar un trabajo (se atribuye a un usuario). El anónimo solo puede ver los recursos, no imprimir. No borrararctest. (Nota: se pudo haber reutilizadoliving\aligraen vez de crear uno nuevo, pero una cuenta hacía falta.)
Se concedió el permiso Print a arctest (y Everyone/AUTHENTICATED USERS/BUILTIN ADMIN) usando la
API Win32 SetPrinter vía P/Invoke (PRINTER_ALL_ACCESS = 0x000F000C), ya que PowerShell no tiene
cmdlet directo para la ACL de impresora.
| Valor | Ruta | Cambio |
|---|---|---|
ForceGuest |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa |
→ 0 (modelo clásico) |
RestrictAnonymous |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa |
→ 0 |
EveryoneIncludesAnonymous |
...\Control\Lsa\MSV1_0 |
→ 1 |
RestrictNullSessAccess |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa |
→ 0 |
Revirtió al original hpzpplhn y luego se cambió a winprint. No fue la solución, pero se dejó en winprint.
Con BIDI activo, Windows consultaba el estado por USB, leía un estado falso de “tinta vacío” y
detenía el job RAW a mitad (la HP hacía ruido y se traba sin imprimir). Se quitó el bit
PRINTER_ATTRIBUTE_ENABLE_BIDI (0x800):
HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers\HP PSC 1400 series
Attributes: 0xA08 → 0x208
net stop spooler /y
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\HP PSC 1400 series" `
-Name Attributes -Value 0x208 -Type DWord
net start spooler
Para limpiar trabajos atascados (“Retained”, “documento remoto de bajo nivel”):
Get-Printer | ForEach-Object { Get-PrintJob -PrinterName $_.Name -EA SilentlyContinue | Remove-PrintJob }
net stop spooler /y
Remove-Item "C:\Windows\System32\spool\PRINTERS\*" -Force -Recurse -EA SilentlyContinue
net start spooler
cups, cups-filters, gutenprint, hplip, ghostscript, a2ps, y desde AUR brother-hll1222.
| Cola CUPS | Driver (render) | URI destino |
|---|---|---|
Brother1222 |
brother-hll1222 (oficial Brother) |
smb://arctest:P@ssw0rd123@192.168.0.203/Brother HL-L1222 Printer |
HP1400 |
hplip → hp-psc_1400_series.ppd |
smb://arctest:P@ssw0rd123@192.168.0.203/HP PSC 1400 series |
Backend: /usr/lib/cups/backend/smb → smbspool (libsmbclient), envía el trabajo como RAW al share.
lp -d Brother1222 documento.pdf
lp -d HP1400 documento.pdf
La HP imprime correctamente texto y páginas en negro desde Linux. Las páginas a color salen en negro (probablemente el cartucho de color no está instalado/activo en la impresora). No bloquea la impresión; el objetivo (imprimir desde Linux) se cumple para documentos en negro.
| Síntoma | Causa real |
|---|---|
| Trabajo llega como “documento remoto de bajo nivel”, 0 páginas, sin ruido | Impresora GDI/host-based no entiende texto crudo. Necesita driver que la renderice. |
| Brother no imprimía con texto crudo (410 bytes, 0 páginas) | Faltaba el driver; con brother-hll1222 (oficial) sí imprimió. |
| HP hacía ruido y se traba, con falso “cartucho de tinta vacío” | BIDI activo → Windows leía estado falso y detenía el job RAW. Se desactivó BIDI. |
smbclient print → NT_STATUS_ACCESS_DENIED |
smbclient no usa el mismo mecanismo; smbspool (libsmbclient) sí funciona con credenciales. |
texttopdf crasheaba (signal 11) en CUPS |
Se enviaba text/plain; se envía PDF para evitar ese filtro. |
Confirmado: el “cartucho de tinta vacío” era falso — la HP imprimía bien desde Windows (Out-Printer); el job RAW desde Linux fallaba hasta desactivar BIDI.
En C:\Users\Public\: hp.ps1, hpfix.ps1, hpdiag.ps1, state.ps1, dump.ps1, sec.ps1,
setacl2.ps1, share.ps1. (Diagnósticos; pueden borrarse.)
El trabajo se origina y renderiza en Linux y solo usa Windows como spooler/interfaz con la impresora USB. El uso de PowerShell/Windows fue solo para habilitar el acceso (usuario, ACLs, BIDI, política), no para ejecutar la impresión.
Se probó exhaustivamente (con ACL de la HP en estado original: Todos/Autenticados/ANONYMOUS LOGON
con permiso Print 0x00020008):
smbclient -N, sin credenciales) → falla.evento 800) pero Windows lo
borra solo al instante (evento 310, y el .SPL/.SHD nunca se escribe: error 0x2).0x000F004C, temporal) → mismos resultados.testprint, grupo Usuarios) → también denegado en esos tests.Conclusión: hace falta una cuenta de usuario local con contraseña (la ACL no es el limitante;
el spooler rechaza/borra trabajos de cuentas invitadas/anónimas en este equipo). La cuenta usada es
arctest (oculta en el login vía SpecialAccounts\UserList), y es la que documentan los tutoriales.
testprint → borrado.arctest (evento 307, imprimió).Invitado quedó con la contraseña P@ssw0rd123 (antes estaba en blanco). Si se quiere volver en
blanco: en la PC de Windows, net user Invitado * y dejar vacía dos veces.