How to recover from desktop freeze without losing running windows?

I don't know what the Cinnamon guys renamed gnome-shell when they forked, so you'll have to find this out. It's probably either cinnamon-shell or cinnamon or something. I'll assume it's called cinnamon.

Now, the GNOME Shell - and by extension, Cinnamon - will respond to SIGHUP by completely reinitializing. It's basically the same as typing r into the AltF2 dialog. So, the solution is easy:

  1. Switch to a virtual console by pressing CtrlAltF21.
  2. Log in.
  3. Type killall -HUP cinnamon.
  4. Switch back to whatever virtual console was running Xorg.

It may take a couple seconds for Cinnamon to reinitialize.

1: This is a good choice as some distributions run display managers on tty1, some on tty7/tty8 (depending on the DM). No one uses tty2.