Typing keys on the keyboard does break that select() and cause things to happen in strace -- so I guess X is at least semi-alive and getting keyboard events, just not reacting to them. (ctl-alt-backspace causes strace activity but doesn't cause the X server to quit.)
Just in case it helps anybody, I'll attach a log of what strace shows when I type ctl-alt-Backspace. I'm not seeing anything obvious here, but maybe someone more familiar with X might see something.
Did I mention that killing X doesn't bring the machine back? The X process dies but the screen doesn't come back, and sequences like ctl-alt-F2 don't help. Worse, I can't reboot cleanly either: typing reboot from the remote shell prints a message that it's going to reboot, breaks the network connection, then the machine goes into a CPU-spinning loop and pulling the plug is the only solution I've found.
There's no additional process that shows up, under top or pstree. strace on the X process once it's hung shows:
10:00:47.970272 select(256, [1 3 4 10 11 12], NULL, NULL, {447, 556000}
Typing keys on the keyboard does break that select() and cause things to happen in strace -- so I guess X is at least semi-alive and getting keyboard events, just not reacting to them. (ctl-alt-backspace causes strace activity but doesn't cause the X server to quit.)
Just in case it helps anybody, I'll attach a log of what strace shows when I type ctl-alt-Backspace. I'm not seeing anything obvious here, but maybe someone more familiar with X might see something.
Did I mention that killing X doesn't bring the machine back? The X process dies but the screen doesn't come back, and sequences like ctl-alt-F2 don't help. Worse, I can't reboot cleanly either: typing reboot from the remote shell prints a message that it's going to reboot, breaks the network connection, then the machine goes into a CPU-spinning loop and pulling the plug is the only solution I've found.