Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Category: Software
General-purpose computers doing something specific
After a rather tedious morning devoted to figuring out why printing had suddenly stopped working, it seems there’s something badly wrong with the most recent CUPS update.
The symptoms included:
Wrong sheet orientation for multi-page output regardless of the Landscape or Portrait setting
No output at all, generally with a CUPS error message
The error messages were utterly inscrutable:
“missing required flags”
“cfFilterChain: pdftopdf (PID 8189) stopped with status 1”
“temp file (object 3 0, offset 11462): dictionary has duplicated key /x12; last occurrence overrides earlier ones”
Downgrading two packages restored the status quo ante:
libcupsfilters 2.2.1-2 → 2.1.1-4
cups 2.4.19-1 → 2.4.16-2
Perhaps cups need not be reverted, but I’m loathe to fiddle around with it now that printing works again.
Those are now frozen in /etc/pacman.conf:
IgnorePkg = cups libcupsfilters
The least-awful way to downgrade / revert packages seems to be with manjaro-downgrade. You can, of course, do it on hard mode with pacman or pamac, but perusing a list of what’s in the update cache helped figure out what just changed.
And there they will sit until the next update rolls through.
A month or two ago the Huion H610Pro tablet’s buttons stopped working with the input-remapper macros I set up to do useful things. Considerable searching showed that the Digimend kernel driver project previously handling the buttons went inertial two years ago and, apparently, no longer worked with contemporary kernels. Further searching suggested old Huion tablets, which mine certainly is, should be handled by the native kernel / X drivers, so I uninstalled Digimend.
Which produced a persistent error message from the DKMS machinery telling me something awful was happening with the now-missing Digimend.
An Arch Linux BBS thread suggested manually removing various detritus left behind during successive kernel updates in places like /usr/lib/modules and /var/lib/dkms. Given that my desktop box runs the 6.18 kernel, I felt reasonably confident in removing the 5* kernel directories and anything mentioning digimend from those locations.
After the box started up the next morning, all the tablet buttons once again worked the way they use to.
The nice thing about Free Software is having access to all the pieces when something breaks …
Slightly modify the OpenSCAD code to suit thinner chipboard:
include <BOSL2/std.scad>
fn = "Printed Fragment Coaster - 5 in Set B - Inkscape paths.svg";
FragmentThick = 0.8;
BaseThick = 2.0;
RimHeight = 0.4;
union() {
linear_extrude(h=BaseThick)
import(fn,id="Perimeter");
color("Green")
up(BaseThick)
linear_extrude(h=FragmentThick)
difference() {
import(fn,id="Perimeter");
import(fn,id="Recesses");
}
color("Red")
up(BaseThick + FragmentThick)
linear_extrude(h=RimHeight)
difference() {
import(fn,id="LipOut");
import(fn,id="LipIn");
import(fn,id="Island");
}
}
Run the solid model through PrusaSlicer:
Chipboard Fragment Coaster B – slicer preview
And have a baseplate an hour later:
Coaster Printing – in progress
While that’s buzzing away, tell LightBurn to cut chipboard instead of metallized paper, stick some craft adhesive sheet on the chipboard, and Fire The Laser:
Chipboard Fragment Coaster – chipboard cutting
Remember to mirror the fragments, because you’re cutting them bottom-up.
Do the same for the cork sheet going on the bottom, which does not require mirroring.
I tossed the cardboard alignment fixtures I used to stick the cork onto the 3D printed baseplate, so make another one for each coaster.
The top layer holds the baseplate:
Chipboard Fragment Coaster – cork fixture – top
The cork + adhesive sheet is inset 0.5 mm from the edge of the baseplate, so the outline cut in the bottom layer of cardboard is just that much smaller:
Chipboard Fragment Coaster – cork fixture – bottom
Although the time used to make a fixture isn’t deducted from your allotment, I’m not sure about making two identical fixtures, so I’m saving these for the next time.
Then peel-n-stick the chipboard fragments in their recesses:
Chipboard Fragment Coaster – variety
The first baseplate didn’t have raised rims around the fragments (because there’s no need to retain any epoxy), but the result looked kinda … flat:
Chipboard Fragment Coaster – flat top
Fixing that was a matter of not setting the rim height to zero in the OpenSCAD code.
It’s perfectly functional even without a rim:
Printed Coaster – chipboard inserts – sweaty mug
Protip: White chipboard is a Terrible Idea™ in a quick-n-easy laser cuttery project. All the rest have only red or blue fragments for a good reason.
Conversely, white PETG makes a nice contrast to the deep red and blue.
Print that on fancy paper, drop it into the Letter cutting fixture, align the printed targets with the layout using the same technique as with the punched cards:
Position the laser head at the center of a target in the LightBurn workspace
Skootch the fixture to put the corresponding printed target under the red dot pointer
Position the laser head at another target
Skootch the other printed target to match
Iterate until both align properly
I find that’s faster / easier / no less accurate than Print and Cut.
Then Fire The Laser:
Page 5 – Test piece – cutting
That’s cut over honeycomb, rather than empty space, because there’s not much paper left when the cutting is done and the remaining pieces distort the lacework:
Page 5 – Test piece – as cut
That layer (with binary code 0001) goes under the top black mask hiding the remaining colors on the lacework. The wing feathers and details seemed too small for slots cut into paper, so printing them finessed the issue.
I had aligned the fixture at the upper-right target:
Page 5 – Printed page test piece – cut top-right
And the lower-left target:
Page 5 – Printed page test piece – cut bottom-left
The printed lines are about 0.3 mm wide, so the cut alignment is off by that much in both X and Y.
The lower-right target is spot on:
Page 5 – Printed page test piece – cut bottom-right
But the upper-left target is off by nearly a millimeter in Y:
Page 5 – Printed page test piece – cut top-left
As well as I can measure, the printed image is slightly distorted, perhaps by the printer’s feed rollers skewing the paper slightly on its way through the printer. The laser-cut holes are, again as well as I can measure, dead on.
The punched card process required scaling the composited PNG image by 97%×97.9% so the image matched the laser-evaporated holes. This distortion seems different, but different paper and printer settings surely affect the outcome.
On the whole, though, the first test piece came out OK:
Spotted on a price scanning terminal during our grocery ride:
Price scanner update in progress
The process continued on all the scanner terminals as we collected our weekly supplies, crashed because a file was missing / locked / whatever, then became a steel-cage death match between whoever was running remote updates and Microsoft Windows:
The idea came from the June/July 2026 Machinist’s Workshop, wherein I learned Dremel nuts / chucks fit on a 0.275 inch = 9/32 inch 40 TPI threaded body, drilled through 11/64 inch.
Making such a thing involved some pleasant lathe time:
Dremel Collet Chuck Handle – lathe work
The business end of the body has a slight taper to (ideally) match the collets:
Dremel Collet Chuck Handle – threaded body recess
However, the collets have tapers ranging from 20° to 35°, so I defined a 60° center drill to be Good Enough™ and got a free taper while drilling the central hole.
The collets sit in the taper:
Dremel Collet Chuck Handle – collet installed
Tightening the nut closes the collet:
Dremel Collet Chuck Handle – threaded body – nut installed
The article described a nicely turned wooden handle, but a somewhat uglier 3D printed handle is fine with me:
Dremel Collet Chuck Handle – solid model – top view
The variables match the threaded body to my fingers:
Protrusion = 0.1; // make holes end cleanly
HoleWindage = 0.2; // make holes large enough to fit
ShaftOD = 6.9; // collet closer thread - 40 TPI 0.275 OD
ShaftID = 4.3; // … internal clearance
HandleOD = 15.0;
HandleLength = 45.0;
Knurling = "trunc_diamonds";
The motivation for all this was to put the smallest taps in a holder suitable for delicate jobs. The smallest chuck on my real tap driver bottoms out on an M3 tap and can’t grip the M2 tap:
Dremel Collet Chuck Handle – M3 vs M2 taps
I try very hard to not tap small holes, but sometimes you gotta do what you gotta do and now I’m better prepared.
Incidentally, the first threaded body I made absolutely did not fit the Dremel nuts. After eliminating everything else, I discovered I’d set up the lathe change gears with a 20-65-45 train, rather than the 20-65-50 train required for 40 TPI with the lathe’s 16 TPI leadscrew.
Protip: Even the best threading job (which I didn’t do on any of those things) can’t make a 36 TPI screw fit into a 40 TPI nut.
That’s not quite “as found”, because it came festooned with the remains of an obviously lab-built Peltier-cooled laser (?) diode fixture:
Rotary positioner – Peltier diode fixture
The positioner sported an obviously aftermarket tapped hole in the side, presumably for mounting to a support:
Rotary positioner – tapped mounting hole
The knob was apparently intended for fine angle adjustment, but it spun freely. Loosening another setscrew on the side released its well-worn parts:
Rotary positioner – drive gear – OEM knob
It’s not clear what the brown ring did, back when it did something, but there were no signs of stripped-off teeth or other debris in the recess; it is a very sloppy fit on the pin holding the knob. The knob may have had a compliant surface engaging the top of the ring, made with a long-since fossilized substance.
It turns out the rotary ring has triangles, not gear teeth:
Rotary positioner – tooth detail
However, setting the gear tooth pressure angle to 45° produces a reasonable triangle:
Rotary positioner – drive gear – solid model – end view
Even so, getting a functional knob required many iterations, primarily because I can’t measure any of the details and had to figure the fit by cut-and-try:
Rotary positioner – drive gear – gallery
The little white dots were an excuse to use the MMU3 for multi-material printing, because why not.
In truth, the knob doesn’t work particularly well, as the forces from the triangular teeth on the rotary ring tend to jam the knob against its pin. The knob might work better with splines driving a squishy TPU tire riding the crests of the rotary ring teeth than a real gear. Perhaps that’s what the original brown ring did before it fossilized.
For now, the positioner returns to the Box o’ Optics Lab Stuff, because it’s the wrong hammer for the Sherline’s laser aligner. It may emerge for a future project, when I’ll have more motivation to build a functional knob.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters