Guía para imprimir desde Arch Linux a una impresora compartida por Windows usando CUPS y SMB.
Estado: ✅ Funciona — verificado con HP PSC 1400 series y Brother HL-L1222 (ambas host-based).
Las impresoras baratas modernas (HP PSC 14xx, Brother HL-L1xxx, etc.) son host-based / GDI: no entienden PCL ni texto plano. Si les mandás datos “genéricos”, Windows dice “se imprimió” pero la impresora no saca nada. Para que funcione hace falta:
everywhere, NO pxlmono).texttopdf).Corrección respecto a versiones anteriores: antes recomendaba
pxlmono.ppd. No funciona en impresoras host-based (sale “impreso” en Windows pero no imprime nada). Usá el driver del modelo.
192.168.0.203)En la PC que tiene la impresora (CMD/PowerShell como administrador). Si la impresora ya está compartida y usás un usuario con contraseña, pasá directo al Paso 1.
:: 1) Usuario con contraseña (dedicado, para no dejar tu contraseña en Linux)
net user arctest TuContraseñaSegura /add
:: 2) Compartir la impresora (el nombre del share es el que se ve con smbclient -L)
net share "HP PSC 1400 series"="\\LIVING\HP PSC 1400 series" /GRANT:Todos,FULL
(O desde GUI: Propiedades de la impresora > pestaña Compartir > “Compartir esta impresora”.)
Detalles verificados en la práctica:
arctest.ForceGuest=0, default en Win10 Pro).reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v arctest /t REG_DWORD /d 0 /f
sudo pacman -S --needed cups cups-filters ghostscript a2ps
Driver según el modelo:
hplip (provee hp-psc_1400_series.ppd, etc.)
sudo pacman -S hplip
yay -S brother-hll1222 # ajustá el modelo al tuyo
sudo systemctl enable --now cups
smbclient -L //192.168.0.203 -U usuario
Buscá el nombre del share de la impresora en la salida, por ejemplo:
HP PSC 1400 series Printer
HP (driver hplip):
sudo lpadmin -p HP1400 \
-v "smb://usuario:contraseña@192.168.0.203/HP%20PSC%201400%20series" \
-P /usr/share/ppd/HP/hp-psc_1400_series.ppd.gz \
-E
Brother (driver brother-hll1222):
sudo lpadmin -p Brother \
-v "smb://usuario:contraseña@192.168.0.203/Brother%20HL-L1222%20Printer" \
-P /usr/share/cups/model/Brother/brother-HLL1222-cups-en.ppd \
-E
Nota:
-P(ruta al PPD) es más robusto que-mpara estos drivers.
Este es el fix clave para las HP host-based. Con BIDI activo, Windows consulta el estado por USB, lee un falso “cartucho de tinta vacío” y detiene el trabajo RAW a mitad (la impresora hace ruido y se traba sin imprimir).
PowerShell como administrador:
net stop spooler /y
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\NOMBRE DE LA IMPRESORA" `
-Name Attributes -Value ((Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\NOMBRE DE LA IMPRESORA").Attributes -band (-bnot 0x800)) -Type DWord
net start spooler
(Eso quita el bit 0x800 = PRINTER_ATTRIBUTE_ENABLE_BIDI.)
Nota: la impresora debe tener un usuario con permiso Print (Paso 0). El permiso se da desde
Propiedades de la impresora > Seguridad, o con SetPrinter (API Win32).
lp -d HP1400 documento.pdf
lp -d Brother documento.pdf
La impresora host-based no entendió los datos (driver genérico o texto crudo). Usá el driver del
modelo (Paso 1 y 4). everywhere y pxlmono no funcionan con estas impresoras.
Falta desactivar BIDI en Windows (Paso 5). El estado de tinta es falso; el driver de Windows lo ignora pero el trabajo RAW se detiene. Desactivar BIDI lo arregla.
texttopdf crashea (signal 11) en CUPSEnviá PDF, no .txt. El filtro texttopdf a veces falla; el camino PDF→driver no lo usa.
NT_STATUS_ACCESS_DENIED o el trabajo desapareceProbado a fondo en Windows 10: el anónimo y la cuenta Invitado/Guest no pueden imprimir, aunque:
El trabajo llega a la cola (evento 800 en el visor PrintService/Operacional) y Windows lo borra
solo al instante (evento 310). Solo sirven usuarios normales con contraseña (grupo Usuarios).
La solución es crear/uso un usuario normal (Paso 0) — no es un tema de permisos de la impresora.
Servidor: Windows 10 LIVING (192.168.0.203), impresoras HP PSC 1400 series y
Brother HL-L1222 Printer compartidas. Cliente: Arch Linux. Usuario dedicado: arctest
(oculto del login; su contraseña vive solo en la cola de CUPS, no en ningún tutorial).
# Colas CUPS (verificadas)
sudo lpadmin -p HP1400 -v "smb://arctest:CONTRASENA@192.168.0.203/HP%20PSC%201400%20series" \
-P /usr/share/ppd/HP/hp-psc_1400_series.ppd.gz -E
sudo lpadmin -p Brother1222 -v "smb://arctest:CONTRASENA@192.168.0.203/Brother%20HL-L1222%20Printer" \
-P /usr/share/cups/model/Brother/brother-HLL1222-cups-en.ppd -E
# Prueba rápida de credenciales (imprime una hoja con un renglón)
smbclient -U "arctest%CONTRASENA" "//192.168.0.203/HP PSC 1400 series" -c "print /tmp/test.txt"
# Imprimir de verdad
lp -d HP1400 documento.pdf
lp -d Brother1222 documento.pdf
Verificación en Windows (PowerShell) si algo falla:
Get-WinEvent -LogName 'Microsoft-Windows-PrintService/Operational' -MaxEvents 10 |
ForEach-Object { $_.TimeCreated.ToString('HH:mm:ss')+' id='+$_.Id+' | '+($_.Message -replace '\s+',' ') }
307 = el documento se imprimió ✓800 seguido de 310 = el trabajo se encoló y se borró (cuenta invitada/anónima, o error de acceso)net stop spooler /y
del C:\Windows\System32\spool\PRINTERS\*.*
net start spooler
smb (smbspool) va directo.