# Installing LJ4 Laserjet with Jetdirect



## Oldrancher (Mar 27, 2016)

I have an old HP LJ4MV printer with a Jetdirect card that I want to use on FreeBSD.
The working installation on Solaris requires a `bootp` server to get the printer to show its IP.  HP supplied a script to support the installation, which I have.  It appears that FreeBSD (10.2) does not have a `bootp`.    To summarize the handshaking as I understand it, the printer sends it's MAC address to the O/S, which responds to the printer, allowing the printer to send its IP to the O/S.  The IP is not visible to the O/S until this handshaking is done.

Is there a way to install a driver for this printer on FreeBSD, and if so, how?


----------



## ondra_knezour (Mar 27, 2016)

Are you looking for bootpd(8)? Also some (all?) DHCP servers can respond to the BOOTP messages/requests.

Generally speaking, there is print/hplip, but I can't say anything about support for your model there.


----------



## Oldrancher (Mar 27, 2016)

ondra_knezour said:


> Are you looking for bootpd(8)? Also some (all?) DHCP servers can respond to the BOOTP messages/requests.
> 
> Generally speaking, there is print/hplip, but I can't say anything about support for your model there.



So!  FreeBSD does have bootpd() installed in the default install.  Can't explain why I didn't find it, when it's got man pages and all.  Another case of cockpit error.

Anyway, thanks for the pointer.  I've looked at the man pages, and it looks as though I can just copy over the Solaris installation to FreeBSD.


----------



## shepper (Mar 27, 2016)

You have 3 options in FreeBSD for print spoolers.

1)  lpr

comes w/ base installation
simple, good diagnostics
Can print to jetdirect port 9100
If your printer is postscript capable, no driver needed.  If not, usually the printcap adds a filter/driver.
system covered in handbook documentation.  Recently updated by forum moderator wblock@
network address usually statically set in jetdirect card and then referenced in /etc/hosts
2)  sysutils/LPRng

lpr with gui, accounting.
previously used in production environments but being displaced by print/cups
can print to jetdirect port 9100
3)  print/cups

the defacto standard in linux
xfce4, gnome3, kde4 have print "wizards" that configure cups
does alot behind the scenes sometimes making trouble shooting a pita
can print to jetdirect port 9100
requires a ppd for your particular model - ppd can also be generated with foomatic-db.
network discovery via dbus/avahi


----------



## Oldrancher (Mar 27, 2016)

Thanks for the comments.  I have a functioning Solaris 9 install as a prototype.  
For reference, the LJ4MV is a 1994 printer.  I have two Jetdirect cards for it, both of which require the bootpd() linkup.  The driver on Solaris is lpd(), and I'll assume that the FreeBSD version is compatible with its control files.  I don't think that the old Jetdirect cards know anything about port 9100.
Right now, I think my main issue is getting the printer IP accessible from the O/S.  The filter configuration in Solaris should map over fairly easily; if not, I have a complete description of the control parameters in the LJ4 HP manual.  It's been many years since I configured this printer on Solaris 9, so I'll have to refresh my memory.  However, it is postscript printer, and has about 20 other fonts configurable.  

I have reviewed the Handbook discussion of printer installation, and, right now, it looks as though the only major issue in a straightforward install is getting
the IP sockets linked up through bootpd().  I expect to start work on this later today.


----------



## shepper (Mar 27, 2016)

I do not have experience with Solaris printing although I was running a 1996 HP 5L via a trendnet printserver until a couple of weeks ago.  Some of the terminology being used may be confusing to future readers.
lpd is the default print spooler which is a system daemon in FreeBSD - it is not really a driver.  OpenPrinting adds to the confusion by referring to ppd's as "drivers".  

In cups, there is a AppSocket remote printing option that directs the print job to IPaddress:9100.  


> Hewlett Packard JetDirect
> socket://_address_:9100
> socket://_address_:9101
> socket://_address_:9102


----------



## wblock@ (Mar 27, 2016)

Some really, really, _really_ old JetDirects predated DHCP.  Those were the ones that used bootp.  I had the impression that DHCP kind of grew out of bootp and might be semi-compatible, but whatever, this is all back in the time when top hats were the height of fashion and electricity had not been discovered yet.

Can you just set a static address for the JetDirect from the control panel?  Some resources say a firmware upgrade can convert the very oldest J2550 "A" to a "B" model, but not whether that might support DHCP.   Oldrancher, I have a J2550-60013 here for an MIO slot.  No idea if it supports DHCP, and no way to test, but PM me if you want it.


----------



## wblock@ (Mar 27, 2016)

Aha!  HP makes their support website worse each year, but determined hunting can find things: http://h20564.www2.hp.com/hpsc/doc/public/display?docId=emr_na-bpj07475

So if your old JetDirect is a J2550B, J2552B, or J2555B, it supports DHCP with firmware version A.05.05 and later.  Upgrading those old cards can be challenging.  HP had a reasonably not-terrible update program called JetAdmin (for Windows, of course).  They replaced that with the terrible "Web" JetAdmin, although you can still find the old one sometimes.  Some cards can be updated with just ftp(1) or telnet(1) and the firmware file.


----------



## Oldrancher (Mar 27, 2016)

wblock@ said:


> Some really, really, _really_ old JetDirects predated DHCP.  Those were the ones that used bootp.  I had the impression that DHCP kind of grew out of bootp and might be semi-compatible, but whatever, this is all back in the time when top hats were the height of fashion and electricity had not been discovered yet.
> 
> Can you just set a static address for the JetDirect from the control panel?  Some resources say a firmware upgrade can convert the very oldest J2550 "A" to a "B" model, but not whether that might support DHCP.   Oldrancher, I have a J2550-60013 here for an MIO slot.  No idea if it supports DHCP, and no way to test, but PM me if you want it.



Yes, it's old, and predates the "consumer internet."  The IP that the printer links to in the O/S is set in the printer.  I'm not going to gamble on doing a firmware upgrade when it looks as though FreeBSD has the resources to get it connected through `bootp`.   The script that HP provided for installing the printer on Unix (generic) was broken for actually installing it, but reading the script allowed me to manually install the needed files.   Actually, I installed the print startup as a piggyback on a Solaris Jumpstart server install, so any manual work I do will probably apply to setting up a similar install server for FreeBSD.  At any rate, the ball is in my court to proceed to get this thing set up.  Might be worthwhile to write up what I do as a later HowTo.


----------



## tingo (Mar 29, 2016)

If the printer has an IP address, doesn't just sending it a `ping` work?
If that fails, you can usually add the MAC address to the arp cache via `arp -s ...` and then ping it.
Neither works?


----------



## Oldrancher (Mar 30, 2016)

tingo said:


> If the printer has an IP address, doesn't just sending it a `ping` work?
> If that fails, you can usually add the MAC address to the arp cache via `arp -s ...` and then ping it.
> Neither works?



Just to answer these questions, just pinging the IP does not work.  And part of the `bootp` setup is to add the MAC address to a file in /etc.  
As I've said, the Solaris 9 Jumpstart setup uses a script that can be used to set the daemons and files needed to get the printer connected.  With some appropriate modifications, that script should run on FreeBSD.


----------



## Martin Paredes (Sep 4, 2018)

Oldrancher said:


> To summarize the handshaking as I understand it, the printer sends it's MAC address to the O/S, which responds to the printer, allowing the printer to send its IP to the O/S. The IP is not visible to the O/S until this handshaking is done.



No, the printer does not send its ip to the O/S (server).

When the printer is turned on, the HP Jetdirect print server broadcasts BootP requests. The server listening in the bootps port, with the proper BootP configuration for the MAC sending the request, sends the TCP/IP information to the HP Jetdirect print server. The HP Jetdirect apply the information obtained to it's configuration.

BootP is a bootstrap protocol used to automatically obtain TCP/IP parameters from a network server, DHCP use the same bootstrap and you can think `dhcpd` is the newer version of `bootpd`, you can't use both at the same time in the server.

The IP address may also be specified using the front panel of the printer (recommended), but if you want to use BootP, print the "Configuration Page" of the printer and confirm it is set to use BootP

To enable `bootpd` in FreeBSD

Uncomment the line in /etc/inetd.conf


```
bootps  dgram  udp  wait  root  /usr/libexec/bootpd  bootpd
```

And run `/etc/rc.d/inetd restart` to reread the configuration file.

Assuming that your printer has the MAC 00:60:B0:CB:21:C7, in the/etc/bootptab file you need to put


```
hplj4m:ht=ethernet:ha=0060b0cb21c7:ip=192.168.1.3:sm=255.255.255.0:gw:=192.168.1.254:
```

Change values to feed your needs and turn off  and on the printer.

For more information, read inetd(8), inetd.conf(5), bootpd(8) and bootptab(5)

Whit this, the IP should ping, and for the driver, you shuold read the section "9.5.3.3. Printing PostScript to PCL Printers" of the Handbook.


----------

