CUPS + AirPrint on Raspberry PI

Install CUPS and Enable Remote Access

apt-get install cups

 

Add Pi user to lpadmin group

usermod -aG lpadmin pi

 

Enable Remote Access

/etc/cups/cupsd.conf

Comment out Listen localhost:631 and add Port 631

then Allow access

/etc/cups/cupsd.conf

 

# Only listen for connections from the local machine
# Listen localhost:631
Port 631

 

< Location / >
# Restrict access to the server...
Order allow,deny
Allow @local
< /Location >

< Location /admin >
# Restrict access to the admin pages...
Order allow,deny
Allow @local
< /Location >

< Location /admin/conf >
AuthType Default
Require user @SYSTEM

# Restrict access to the configuration files...
Order allow,deny
Allow @local
< /Location >

 

Restart CUPS

/etc/init.d/cups restart

 

Now you are able to access remotely x.x.x.x:631 and add the printer

 

Install AirPrint

apt-get install avahi-discover cups cups-pdf python-cups

apt-get install hplip

 

Make your old printer AirPrint capable

 
/etc/init.d/avahi-daemon start mkdir /opt/airprint cd /opt/airprint wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py chmod +x airprint-generate.py ./airprint-generate.py -d /etc/avahi/services /etc/init.d/avahi-daemon restart ls /etc/avahi/services/

Add those files with this content

/usr/share/cups/mime/local.convs

/usr/share/cups/mime/local.convs
image/urf application/vnd.cups-postscript 66 pdftops

 

/usr/share/cups/mime/apple.types

/usr/share/cups/mime/apple.types
image/urf urf (0,UNIRAST)

 

/usr/share/cups/mime/apple.convs

/usr/share/cups/mime/apple.convs
image/urf application/pdf 100 pdftoraster

 

Open port 631

iptables -A INPUT -i eth0 -p tcp -m tcp –dport 631 -j ACCEPT

iptables -A INPUT -i eth0 -p udp -m udp –dport 631 -j ACCEPT

 

Disable power saving (optional)

/etc/modprobe.d/8192cu.conf
 
/etc/modprobe.d/8192cu.conf
# Disable power saving options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
 

Connect from windows

http://server_ip:631/printers/printer_name