This is a stripped-down version of !676 (closed) by @ajax for use with Xorg only.
@ajax please, review.