MacIPRpi beta release 6.02

mactjaap

Well-known member
I'm very happy to announce the beta release of MacIPRpi 6.02!

Made a complete update of system and packages and spend a lot of time to make it more easy to upgrade. At the heart is now Netatalk 2.4.10 and macipgw.

Designed to run on a Raspberry Pi, MacIPRpi 6.02 provides a complete MacIP gateway out of the box, allowing LocalTalk Macintosh computers to access the internet and share files effortlessly. Here’s everything you need to know about this release:

  • What is a MacIPRpi?
    • MacIPRpi transforms a Raspberry Pi into a MacIP gateway, enabling TCP/IP communication for LocalTalk-only Macs.
    • Perfect for vintage Macintosh enthusiasts and modern users alike, it supports seamless file sharing and internet access even with LocalTalk-only.
  • Key Features in MacIPRpi 6.02:
    • MacIP Gateway Functionality
      • Provides internet access for LocalTalk-only Macs by macipgw.
      • Works with hardware LocalTalk bridges (e.g., AsantéTalk) or emulators like BasiliskII.
    • File Sharing Across Platforms
      • Full file-sharing support for classic Macintosh systems (System <6, 7, 8, 9), Mac OS X, Windows, Linux, iOS, and Android.
      • Access for guest user and local users.
    • Web Rendering Proxy
      • Browse modern internet pages with vintage web browsers using the Web Rendering Proxy on port 8080.
    • HTTP Proxies for Old Browsers
      • HTTP 1.1 to HTTP 1.0 proxy (port 8082) for older web browsers with only http 1.0 support.
      • WebOne proxy (port 8081) handles HTTPS and makes modern web sites accessible for vintage browsers.
    • TimeLord
      • Revived AppleTalk Time Server, accessible via Chooser for vintage systems.
    • Diagnostics and Network Tools
      • Tools like nbplkup, tcpdump, nmap, and aecho pre-installed for testing and troubleshooting.
      • Updated dynamic MOTD showing AppleTalk devices and network details.
    • Web Server
      • Hosts a historical replica of the first CERN website on port 80 for testing vintage browsers.
    • Command-Line Utilities and Desktop Environment
      • LXDE for graphical use via X2Go, RDP, or directly with monitor/keyboard/mouse.
      • Utilities like Avahi, GParted, and more.
    • Ease of Use and Setup
      • Automatic SD card resize on first boot (minimum 8GB recommended).
      • SSH and Telnet access enabled by default.
    • Supported Platforms
      • Tested on Raspberry Pi 4, with potential support for other models like Raspberry Pi 5 (feedback welcome).
  • How to Get Started:
    • Download the image from: https://www.macip.net/beta.html
    • Write the image to an SD card using dd or Raspberry Pi Imager.
    • Connect the Raspberry Pi to your network via Ethernet (no WiFi support).
    • Default login credentials:
      • Username: macipgw
      • Password: macipgw
  • Credits for all the software and thanks to:
Your feedback is appreciated!

Reach out to me at info (at) macip.net or here at the 68kmla forum.
https://68kmla.org/bb/index.php?members/mactjaap.895/
 

Fizzbinn

Well-known member
So, I have it up and running on a spare RPi 4, connected to file sharing okay, but haven't done much else testing yet. One thing I noticed it I can't get Chromium to launch from the desktop, Firefox works though.

I have my current MacIPRpi 5 Pi configured as a CUPS print server for my AppleTalk only LaserWriter 4/600 PS and looks like I'll need to work on getting that setup again. I was hoping that Netatalk 2.4.10 would come with the pap stuff needed for CUPS.

I had to change the hostname (picked "maciprpi6") as the default conflicted with my current v5 MacIPRpi but it seems that name might need to be changed in more than one place ...or might jsut be confusing my self.
 

mactjaap

Well-known member
Thanks for testing!

I can launch Chromium in a remote session like XRDP (rdesktop) or X2Go. I will test with monitor and keyboard too. Maybe that is the problem?

However.... There is a setting which prevents a normal screen!! I can solve it and will do in the final version.
You can read about this problem here and also how to solve it for now:


About printing. I have to be honest... I never have printed from / or with help of the MacIPRpi! So... would be nice to know how to do this, so I can add it.

papd.service is always started at boot.


Code:
● papd.service - AppleTalk PAP printer server daemon
     Loaded: loaded (/lib/systemd/system/papd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-01-13 23:00:25 CET; 13min ago
       Docs: man:papd(8)
             man:papd.conf(5)
             https://netatalk.io/
    Process: 1644 ExecStart=/usr/local/sbin/papd (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 1575)
        CPU: 17ms
     CGroup: /system.slice/papd.service
             └─1650 /usr/local/sbin/papd

Jan 13 23:00:25 maciprpi systemd[1]: Starting papd.service - AppleTalk PAP printer server daemon...
Jan 13 23:00:25 maciprpi systemd[1]: Started papd.service - AppleTalk PAP printer server daemon.

The hostname... Hmmm yes you are right. Never thought about two MacIPRpi in a network. Maybe I can make this configurable.
With migration from 5 to 6 this can be handy. I will think about it, because not only the hostname has to change, also some values of AFPD and SAMBA, etc.


Again ... thank you very much for your feedback.


BTW ....... It would be great if anybody with a Raspberry Pi 5 could test too.
 

slipperygrey

Well-known member
Good to see a refresh of maciprpi! I'm curious what base OS you're using now?

It's also encouraging to see that you're on a supported and secure release version of netatalk now.

May I ask what it would take for you to migrate to the netatalk 4.x release series? Is there some technical reason holding you back? Please note that the 2.4 release series will receive security patches until September 2025, but after that we plan to EOL it.

A few benefits of netatalk 4.x over 2.4:

- Coexistence with Samba (avoid risk of filesystem metadata corruption)
- AFP 3.4 compliance
- Extended Attributes metadata (more reliable than AppleDouble)
- Bundled and improved macipgw (such as a macipgw.conf configuration file)
- Tons of bug fixes

Ultimately it's your call. But I'm invested in setting you up for success in adopting the latest and best supported version.
 

slipperygrey

Well-known member
@mactjaap Regarding Fizzbin's problem, do you remember if you had all CUPS dependencies installed when you built netatalk?

It is possible to build papd without CUPS, at which time you get a traditional BSD line printer daemon interface instead.
 

mactjaap

Well-known member
Good to see a refresh of maciprpi! I'm curious what base OS you're using now?

It's also encouraging to see that you're on a supported and secure release version of netatalk now.

May I ask what it would take for you to migrate to the netatalk 4.x release series? Is there some technical reason holding you back? Please note that the 2.4 release series will receive security patches until September 2025, but after that we plan to EOL it.

A few benefits of netatalk 4.x over 2.4:

- Coexistence with Samba (avoid risk of filesystem metadata corruption)
- AFP 3.4 compliance
- Extended Attributes metadata (more reliable than AppleDouble)
- Bundled and improved macipgw (such as a macipgw.conf configuration file)
- Tons of bug fixes

Ultimately it's your call. But I'm invested in setting you up for success in adopting the latest and best supported version.
Absolutely! MacIPRpi will be updated to Netatalk 4.*

I was in a hurry to release.. so I used 2.4.10. I had all the configuration, Ansible playbooks, macipgw configuration ready.
Now I have been reading about Netatalk 4. What a fantastic project!! I think I understand how it works with the new configuration files. More Samba style. Maybe I need a little bit help....

Code:
__  __            ___ ____  ____  ____  _
|  \/  | __ _  ___|_ _|  _ \|  _ \|  _ \(_)
| |\/| |/ _` |/ __|| || |_) | |_) | |_) | |
| |  | | (_| | (__ | ||  __/|  _ <|  __/| |
|_|  |_|\__,_|\___|___|_|   |_| \_\_|   |_|



Welcome to this MacIPRPi running on Raspberry Pi OS
 Debian GNU/Linux 12 (bookworm) 6.6.51+rpt-rpi-v8

On a Raspberry Pi 4 Model B Rev 1.5

MacIPRPi Stable Release 6.02

atalkd (version 2.4.10)
afpd 2.4.10 - Apple Filing Protocol (AFP) daemon of Netatalk

Linux maciprpi 6.6.51+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64
Host:      maciprpi            OS:             Debian GNU/Linux 12 (bookworm)
System load:   0.38 0.35 0.33  Up time:        22 hours, 32 minutes   Local users:   3
CPU usage:     31.2%           CPU temp:       43.3°C
Memory usage:  47% of 1846MB   IP:             192.168.178.6 172.16.2.1 2001:1c04:2b05:8100:72cf:6e61:8b34:f850
Usage of /:    48% of 14G
 

Fizzbinn

Well-known member
I can launch Chromium in a remote session like XRDP (rdesktop) or X2Go. I will test with monitor and keyboard too. Maybe that is the problem?

I just enabled the VNC service via "RPi Menu/Prefences/Raspberry Pi Configuration". I then used Real VNC on my Mac to connect, but still can't launch Chromium via the menu bar Web browser icon or "RPi Menu/Internet/Chromium Web Browser". Just tried it from the command line and got:

Code:
macipgw@maciprpi6:~ $ chromium-browser
[5757:5757:0114/213725.720439:ERROR:process_singleton_posix.cc(358)] The profile appears to be in use by another Chromium process (5244) on another computer (maciprpi). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
[5757:5757:0114/213725.720683:ERROR:message_box_dialog.cc(190)] Unable to show message box: Chromium - The profile appears to be in use by another Chromium process (5244) on another computer (maciprpi). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.

So this looks like an issue with me changing the hostname to maciprpi6 which seem weird... At first I thought it might be talking about my v5 MacIPRpi "another computer (maciprpi)" but that does not match the hostname on my v5 which is "macippi" (I left that as the default).

About printing. I have to be honest... I never have printed from / or with help of the MacIPRpi! So... would be nice to know how to do this, so I can add it.

papd.service is always started at boot.

/usr/lib/cups/backend/pap is what I had to get setup on my v5 to get CUPS working with AppleTalk Printing, the file I'm using is something I found on the Internet and hacked on until it surprisingly worked, at least for what I wanted to do (print to an AppleTalk only LaserWriter from modern machines using the Rpi as a print server). I was hoping the newer Netatalk build would come with that file fixed up.

@mactjaap Regarding Fizzbin's problem, do you remember if you had all CUPS dependencies installed when you built netatalk?

It is possible to build papd without CUPS, at which time you get a traditional BSD line printer daemon interface instead.

Would that put a /usr/lib/cups/backend/pap file in place?

FYI another change I made (when first looking at printing on the v6 beta) was to enable the CUPS web interface, I *think* it was enabled by default in your v5 image? I did this by adding " Allow @local" to these three stanzas in "/etc/cups/cupsd.conf", not sure if that's the best way or not...

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

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

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @local
</Location>

That let me open: http://maciprpi6.local:631/
Which can at least see the modern printers on my network if not the AppleTalk one at present.


Not sure its of any use but this is what my v5 server sees on my network AppleTalk wise:

Code:
                            UTC:TimeLord                           65280.242:133
                      LocalTime:TimeLord                           65280.242:131
                        MacIPpi:AFPServer                          65280.242:129
                     172.16.2.1:IPGATEWAY                          65280.242:72
                      MacIPiRpi:netatalk                           65280.242:4
                      MacIPiRpi:Workstation                        65280.242:4
                  Performa 6360:Workstation                        65308.76:4
                      maciprpi6:ProDOS16 Image                     65280.91:3
                      maciprpi6:Apple //e Boot                     65280.91:3
                       MacIPRPi:AFPServer                          65280.91:132
                      maciprpi6:TimeLord                           65280.91:130
                      maciprpi6:Apple //gs                         65280.91:3
                      maciprpi6:Workstation                        65280.91:4
                       4/600 PS:LaserWriter                        3072.249:128
                       iBook G4:Darwin                             65454.176:128
                       iBook G4:AFPServer                          65454.176:129

I should learn more about AppleTalk addressing, is it okay that the v5 and v6 servers start with the same "65280"?
 
Last edited:

slipperygrey

Well-known member
/usr/lib/cups/backend/pap is what I had to get setup on my v5 to get CUPS working with AppleTalk Printing, the file I'm using is something I found on the Internet and hacked on until it surprisingly worked, at least for what I wanted to do (print to an AppleTalk only LaserWriter from modern machines using the Rpi as a print server). I was hoping the newer Netatalk build would come with that file fixed up.
I'm not familiar with a /usr/lib/cups/backend/pap file. Is it a plain text or binary file? This is not something that Netatalk creates or touches directly.
 

Fizzbinn

Well-known member
I'm not familiar with a /usr/lib/cups/backend/pap file. Is it a plain text or binary file? This is not something that Netatalk creates or touches directly.

Code:
macipgw@macippi:/usr/lib/cups/backend $ cat /usr/lib/cups/backend/pap
#!/bin/bash
#
# Usage:     pap job user title copies options [filename]
#            pap
#
# Important: This backend supports device discovery -- just call it without
#            parameters to see whether it works correctly on your system.
#
# Main use:  CUPS backend to drive AppleTalk printers. Tested with CUPS
#            1.1.14/1.1.15/1.1.19 (version 0.1.4 tested with CUPS 1.7.5)
#
# Notes:     Device URIs have to have the following format (special chars
#            in URL encoding): pap://zone/printername/printertype
#            Normally you shouldn't care about that since the backend lists
#            all available devices correctly formatted when asked by the
#            CUPS scheduler.
#            Don't forget to adjust $devicetypes and $formfeed to your needs!
#            When used with Darwin 7.0 (MacOS X 10.3.x) you might want to
#            change the shell to /bin/bash in the first line due to problems
#            with the encoding routines for the device uri (perl -e call)
#
#############################################################################
#
# author:    Thomas Kaiser <mailto:Thomas.Kaiser@phg-online.de>
# url:       http://kaiser-edv.de/en/CUPS/pap-backend
# license:   http://www.opensource.org/licenses/bsd-license.php
# date:      08 Jan 2004 (v0.1.3)
#
#############################################################################
#
# Changes
#
# 0.1.4 (11 Apr 2017):
#        Changes by M. Amolsch as per forum discussion with Thomas Kaiser:
#        - changed shebang line to /bin/bash
#        - updated NetatalkBinDir to correspond with the Netatalk path in
#          recent versions of Ubuntu and Debian
#        - specified separate TimeoutDir and corresponding call to use with
#          coreutils in recent versions of Ubuntu and Debian
#        - added line end to printer name query
#
# 0.1.3: - query AppleTalk devices by default for their "Product name" to
#          let CUPS assign the correct PPD automatically (this is achieved
#          by setting FullDeviceDiscovery=TRUE)
#        - set the default netatalk installation path back to /usr/bin
#        - set a timeout value of 15 seconds when querying printers for
#          their "Product name"
#        - massive performance improvement in larger networks with many
#          zones when doing device discovery while $FullDeviceDiscovery
#          set to TRUE (due to parallelizing the queries)
#
# 0.1.2: - fix the inability to deal with printers with slashes in their
#          names
#        - report wrong netatalk installation dir --> ${NetatalkBinDir}
#        - minor documentation improvements
#
# 0.1.1: - fix some documentation errors and default values
#
# 0.1.0: - first official release (22 Mar 2003)
#
#############################################################################
#
# To Do:
#
# - optionally send pagecount queries to get exakt accounting info
#
#############################################################################
#
# Non-Warranty:
# This script comes with absolutely no warranty.
#
# Use at your own risk!
#
#############################################################################
#
# Customizable settings:
#
# The devicetype variable specifies for which devices to look for (eg.
# LaserWriter, DeskWriter, ImageWriter). If you want to lookup more than
# one device at a time, write them separated with colons, ie.
#
#     devicetypes="LaserWriter:DeskWriter"
#
# For all devicetypes use "=" instead. But be warned: this will also find
# macs, servers, serial numbers and the like
 
devicetypes="LaserWriter"

# specify whether or not to send an additional form feed (DeskWriters
# seem to need this. TRUE means send the ff

formfeed=FALSE

# When you want to use this with Netatalk, then specify the path to
# the $BINDIR (do a search for nbplkup, eg.). You might also want to set
# $FullDeviceDiscovery to TRUE to let CUPS guess the correct PPD for the
# devices by asking them for their "Product" name...
# Additionally you can let the backend collect exact pagecounts from
# PostScript printers that correctly implement a back channel (answering
# the backend's questions). If you use dumb AppleTalk print servers do
# NOT set this option
#
# Note: This last option is still not implemented

NetatalkBinDir=/usr/bin
TimeoutDir=/usr/bin
FullDeviceDiscovery=TRUE
ExaktPageCount=FALSE            # currently without effect

#############################################################################

main()
{
    # Processing the CUPS request. There exist 2 possibilities: Either CUPS
    # is asking us about device capabilities we can provide or it want us to
    # handle a print request and send the print job to a specific device
    
    CollectAccountingData "$@"
    PrepareRequest

    # No arguments means show available devices and exit...
    
    if test $# = 0; then
    
        echo "network ${protocol} \"Unknown\" \"AppleTalk Devices via ${protocol}\""
        
        LookupDevices | sort | uniq
    
        exit 0
    
    fi
    
    # Handle the print request. First check whether the device is available

    if PrinterAvailable "${PrinterName}" ; then

        type=`GetAppleTalkType "${PrinterName}"`
    
        if test $# = 5; then
        
            # Get print file from stdin; copies have already been handled...

            NotifyCUPS "INFO: Sending to ${PrinterName}"
            cat | PrintAndAccount "${PrinterName}"
            NotifyCUPS "PAGE: 1 1"    # TO DO: send pagecount queries
        
        else

            # Print file is on command-line and we have to handle copies ourselve...
        
            SpoolFile=$6
        
            while [ ${NeededCopies} -gt 0 ]; do

                ActualCopy=`expr $4 + 1 - ${NeededCopies}`
                NotifyCUPS "INFO: Sending copy ${ActualCopy} to ${PrinterName}"
                
                PrintAndAccount "${PrinterName}" < "${SpoolFile}"
                NotifyCUPS "PAGE: ${CountOfCopies} $4"    # TO DO: send pagecount queries
                
                NeededCopies=`expr ${NeededCopies} - 1`
                
            done
            
        fi
    
        # Eventually send an additional form feed (some DeskWriters seem to
        # need that)
    
        if [ "X${type}" = "XDeskWriter" ]; then
            test "X${formfeed}" = "XTRUE" && printf "\f" | PrintAndAccount "${PrinterName}"
        fi

    else

        NotifyCUPS "ERROR: Unable to get printer status for \"${PrinterName}\""
        exit 1

    fi
}

PrepareRequest()
{
    # How are we called?

    protocol=`basename $0`

    # Let's have a look whether we are using Netatalk's or Darwin's
    # AppleTalk implementation
        
    case `uname -s` in
    Darwin)
        ZoneLookup="/usr/bin/atlookup -z"
        PrinterAvailable()
            {
            /usr/bin/atstatus "$1" >/dev/null
            }
        PrintAndAccount()
            {
            /usr/bin/atprint "$1"
            }
        NBPLookup()
            {
            /usr/bin/atlookup -a "$1" | grep -v "^#  Found"
            }
        ATPErrMsg="ATPsndreq\:\ Operation\ timed\ out"
        CheckProductName()
            {
            echo "Unknown"
            }
        TotalPages()
            {
            echo ${CUPS_PrintSettingsPMTotalBeginPages}
            }
        ;;
    *)
        # test the path of ${NetatalkBinDir}
        if [ ! -x "${NetatalkBinDir}/papstatus" ]; then
            echo "ERROR: Netatalk tools not found in \"${NetatalkBinDir}\"" >&2
            exit 1
        fi

        ZoneLookup="${NetatalkBinDir}/getzones"
        PrinterAvailable()
            {
            ${NetatalkBinDir}/papstatus -p "$1" >/dev/null
            }
        PrintAndAccount()
            {
            ${NetatalkBinDir}/pap -p "$1"
            }
        NBPLookup()
            {
            ${NetatalkBinDir}/nbplkup "$1" | \
            perl -ne 'chomp; next if /^$/; m|^\s+(.+)\s+\d+\.\d+:|; my $entry = $1; $entry =~ s/\s+$//; print "$entry\n"'
            }
        ATPErrMsg="atp_rresp\:\ Connection\ timed\ out"
        CheckProductName()
            {
            # We'll try to ask the printer for its so called
            # "Product name" to let CUPS automatically assign
            # the right PPD file for the printer

            GuessedDeviceType="Unknown"

            if [ "$2" = "LaserWriter" -a "${FullDeviceDiscovery}" = "TRUE" ]; then
                if ${NetatalkBinDir}/papstatus -p "$1:$2@$3" >/dev/null 2>&1
                    then
                    DeviceLookup=`echo -e "%%?BeginFeatureQuery: *Product\nstatusdict begin\nproduct print\nend\n%%?EndFeatureQuery: Unknown\n%%EOF" | ${TimeoutDir}/timeout -s HUP 15 ${NetatalkBinDir}/pap -p "$1:$2@$3" | sed -e '$a\' | sed 's|^\"(||;s|)\"$||;'`
                    if [ -n "${DeviceLookup}" ]; then
                        GuessedDeviceType="${DeviceLookup}"
                    fi
                fi
            fi

            echo "${GuessedDeviceType}"
            }
        TotalPages=1
        ;;
    esac

    # redefine the internal field separator to parse the zone list
    # correctly
    
IFS="
"
}

GetAppleTalkType()
{
    echo "$1" | cut -d: -f2 | cut -d@ -f1
}

LookupDevices()
{
    # Fetch the zone list and do a lookup in every single zone for occurences
    # of type $devicetype
    
    zonelist="`GetZoneList`"
    
    # get a list of AppleTalk Devicetypes to look for
    OIFS=$IFS
    IFS=":"
    set ${devicetypes}
    IFS=$OIFS

    for devicetype in $@; do
        echo "${zonelist}" | while read zone; do
            NBPLookup "=:${devicetype}@${zone}" | while read nbpentry ; do
                GetPrinterProperties "${nbpentry}" "${zone}" "${protocol}" &
            done &
        done
    done
}

GetZoneList()
{
    # check whether we have to deal with zones
    
    eval ${ZoneLookup} >/dev/null
    
    if [ $? -eq 0 ]; then     # okay, zones are available
        eval ${ZoneLookup} 2>&1 | sed "s|${ATPErrMsg}|*|;"
    else
        echo '*'
    fi
}

GetPrinterProperties()
{
    name=`echo $1 | awk -F: '{print $1}'`
    type=`echo $1 | awk -F: '{print $2}'`
    model=`CheckProductName "${name}" "${type}" "$2"`
    echo -e "network $3://`EncodeDeviceURI "$2"`/`EncodeDeviceURI "${name}"`/`EncodeDeviceURI "${type}"` \"${model}\" \"${name}@${zone} ($3)\""
}

EncodeDeviceURI()
{
    # We'll have to quote the names with an URL encoding (RFC 2396)

    echo "$@" | perl -ple 's|([^\w=\-:@])|sprintf( "%%%02x", ord( $1))|ge'
}

DecodeDeviceURI()
{
    # Decode the Device-URI
    
    echo "$@" | awk -F/ '{print $4 ":" $5 "@" $3}' | perl -ple 's/%([0-9A-Fa-f]{2})/chr(hex($1))/eg'
}

NotifyCUPS ()
{
    # sending message on stderr to keep CUPS informed
    
    echo -e "$*" >&2
}

CollectAccountingData ()
{
    PrinterName=`DecodeDeviceURI ${DEVICE_URI}`
        Owner="$2"
        Title="$3"
        NeededCopies=$4

    # parse the options passed from CUPS
    eval ParseCUPSOptions $5
}

ParseCUPSOptions()
{
    # We parse the CUPS options, delete occurences of "com.apple.print" in
    # their names, prepend the variable names with "CUPS_", define
    # them as variables and export them

    i="com\.apple\.print\."
        while [ $# -ge 1 ]; do
        VarName=`echo $1 | cut -d"=" -f1 | sed "s|^$i||g;s|\.[nb]\.$||g;s|\.||g"`
        VarValue=`echo $1 | cut -d"=" -f2 | sed "s|\ |\\\\\ |g"`
        eval CUPS_${VarName}=${VarValue}
        eval export CUPS_${VarName}
                shift
        done
}

#############################################################################
#
# Let's start to process the CUPS requests

main "$@"
exit 0
 

Fizzbinn

Well-known member
Hmm, all of this shouldn't be required. If CUPS is aware of your printer, you should only have to put
Code:
cupsautoadd:op=root:
in papd.conf and that's it.

See this guide that I wrote some time ago: https://netatalk.io/docs/Print-Server

This worked for me with MacIPRpi beta release 6.02. Took me a minute to find the papd.conf file, it was under /user/local/etc/, just uncommented the last line:

Code:
macipgw@maciprpi6:/ $ cat /usr/local/etc/papd.conf
# PAP print server daemon configuration (Netatalk 2.x)
#
# See the `papd.conf' manual page for examples.

# Uncomment the following line to share all CUPS enabled printers.
cupsautoadd:op=root:

Was able to print from my Performa 6360 to my HP Envy Inkjet using the LaserWriter 8 driver included with Mac OS 8.6.

Old computer -> AppleTalk pap print job -> Rpi server -> IP CUPS print job > modern printer

The pap backend file is only if you want to print to a pap only LaserWriter from Linux.

That's the use case I initially was interested in testing in MacIPRpi beta release 6.02. Allowing my modern machines to print to my AppleTalk only LaserWriter using the Rpi as translating printer server.

Modern computer -> IP CUPS print job -> Rpi server -> AppleTalk pap print job -> Old AppleTalk only LaserWriter
 

mactjaap

Well-known member
Thanks for all your help with printing!! Really very interesting. Setup is very easy. I now have my printer HP LaserJet Pro M118dw also accessible.


Code:
macipgw@maciprpi:~ $ nbplkup
  HP LaserJet Pro M118dw 6071AC:LaserWriter                        65280.5:129
                       maciprpi:ProDOS16 Image                     65280.5:3
                       maciprpi:Apple //e Boot                     65280.5:3
                       MacIPRPi:AFPServer                          65280.5:132
                       maciprpi:TimeLord                           65280.5:130
                       maciprpi:Apple //gs                         65280.5:3
                     172.16.2.1:IPGATEWAY                          65280.5:72
                       maciprpi:Workstation                        65280.5:4
                     BasiliskII:AFPServer                          65280.123:249
                     BasiliskII:PPCToolBox                         65280.123:250
                       tjabring:Timelord                           65280.123:251
                     BasiliskII:  Macintosh                        65280.123:252
                     BasiliskII:Workstation                        65280.123:4
           AsantéTalk 940863E7:AsantéTalk                         65289.159:252
           AsantéTalk 94081D2A:AsantéTalk                         65320.207:252




I will try to change some things on the release 6.02 so that people will be able to setup printing easy. I also will include some instructions.

I will also try to get rid of some small bugs/inconveniences found in the beta period before releasing 6.02 stable.
 

slipperygrey

Well-known member
It is kind of a miraculous feeling when hardware from such different eras interoperate, isn't it!

So I found the source of the CUPS pap backend configuration, namely this article on the EMaculation wiki.

The tarball with the backend configuration and license text are available for download via: https://www.emaculation.com/pap_tkaiser_v0.1.4.tgz

This is a very interesting footnote on that EMaculation guide page...
There are at least three other PAP backends available on the net (Duncan Gibb [based on Rupi]: download · instructions · info · Rupi's original [info] · archive with Rupi's backend and docu [next to other stuff] | Derrik Pates: download · description · setup 1 · setup 2 | SRZ Berlin: download and description), but the one from Thomas Kaiser is the most advanced and automated one. The original can be found here. To meet the development status of today's Linux systems, emaculation.com is hosting an updated version that is downloaded and installed with the following entries.
Unfortunately, Thomas Kaiser's website has been offline since at least 2021 now. And even more unfortunately, the CUPS and Netatalk "tipps und tricks" pages on his website aren't even archived on archive.org...

We are fortunate that EMaculation rescued those files before they were swallowed by entropy!

FWIW, I was able to recover the other pap backends, except the Duncan Gibb version, for science.

I will look into the possibility of bundling a pap backend in future Netatalk releases. The EMaculation edition of Thomas Kaiser's work is distributed under a BSD-2-clause license, which is permissive enough.
 
Top