Sharing the context is a good point. I was able to successfully open a window with some changes to line 48 of src/SFML/Window/Linux/ContextGLX.cpp:
Instead of calling XOpenDisplay() for every new context, I did call it once and passed the pointer to all following contexts (for debugging I used a static variable and some poor reference counting
).
Good news: The window opens (thus eliminating the GLX_BadContext error) and Clear() does its job very well.
Bad news: Drawable::Draw() doesn't do anything.
I decided to stop here because you're a lot more experienced in that sector. But I hope this gives a hint for the right direction.
Edit: Funny, I just read your modified code where you seem to be doing exactly what I tried to do. Too late.