Alas I rarely have to cut a part more than once, so I simply clamp down square the piece being cut where the router can reach it. To set each axis I use a slip of paper to place between the bit and the wood, then set linuxCNC to step over .005" with each key press. I jiggle the paper until the bit has moved against it and trapped it. I back up one step, remove the paper, then jog one step forward before setting that axis at zero. In Aspire I've set 0,0 using an offset of 1/2 the bit diameter so when the bit touches an edge I can set it at zero. Of course sometimes the center of the board makes more sense to use as 0,0. Most of the time the top of the board is where z=0 is, but sometimes the spoilboard is where I set it at. Sometimes t-track clamps are used to hold down the work. Sometimes when I'll be cutting near the edges of the board I hot melt glue it to a larger piece of scrap that I can put the clamps on. When I'm clamping a board vertically or at any angle under my bed I usually am using small c-clamps to hold the part to my jig face.
In linuxCNC it is possible to set a repeatable location as home, which I would do if all the work I was doing was rectangles of wood and the same corner made sense as the origin. I'd bolt down an L-bracket to butt the wood up against and never have to bother with setting X and Y again once I set it the first time. 0,0 would be at the inside corner of the bracket, and that corner would be the same corner I'd set 0,0 at in Aspire.