Neuere Xorg versionen haben Probleme, die "AllowDeactivateGrabs" option in xorg.conf zu unterstuetzen. Diese Option dient dazu, "eingefrorene" X11 desktops mit der Tastenkombination "Ctrl+Alt+Keypad-Divide" wieder flott zu machen. Bei neueren Xorg Versionen ist sogar die Beschreibung dieser Option aus der Manpage geflogen.

"Eingefroren" bedeutet in diesem Zusammenhang, dass der Maus-Fokus verloren geht. Das kann z.B. beim Arbeiten mit dem Debugger passieren, wenn eine Anwendung den Maus-Fokus in eigenes Fenster bringt und dann auf einen Breakpoint in Debugger laeuft. Damit man mit der Maus weiterarbeiten kann, muesste die Anwendung den Fokus wieder hergeben, aber das kann sie nicht, wenn sie im Debugger gestoppt ist 8-(

Die Workarounds beruhen darauf, dass nicht einfach nur ein Windowmanager (bzw. Desktopmanager) Programm laeuft, nach dessen Beenden man ausgeloggt wird. Stattdessen wird das Windowmanagerprogramm (hier fvwm2) in einer Schleife gestartet (z.B. mit

  while true; do fvwm2 ; done

in .xsession). Jetzt muss man nur noch einen Weg gefunden werden, um das Windowmanagerprogramm abzuschiessen. Danach wird es neu gestartet und damit steht der Maus-Fokus wieder zur Verfuegung.

Fuer Laptops bietet sich die Nutzung des acpi-deamons an. Viele Laptops haben ueber ACPI konfigurierbare Buttons, andernfalls bleibt (wie hier) nur noch die Benutzung des Laptop-Deckels als Schalter.

Um den acpi-deamon zu benutzen, muss man typischerweise eine Datei in /etc/acpi/events anlegen. Hier wird die Datei /etc/acpi/events/lid benutzt:

   # /etc/acpi/events/lid
   # This is called when the user closes the lid (upper part of a laptop)
   # /etc/acpi/lid.sh for further processing.

   # Optionally you can specify the placeholder %e. It will pass
   # through the whole kernel event message to the program you've
   # specified.

   # We need to react on "button lid.*" and "button/lid.*" because
   # of kernel changes.

   event=button[ /]lid
   action=/etc/acpi/lid.sh

Dabei wird auf ein Script /etc/acpi/lid.sh verwiesen:

    #!/bin/sh
    # /etc/acpi/lid.sh
    # Initiates a kill of fvwm when the lid has been closed
    # This is usefull to restart the windowmanager in case of a mouse grab, if
    # fvwm2 is started in a loop (e.g. "while true; do fvwm2; done" in .xsession)

    # Skip if we just in the middle of resuming.
    test -f /var/lock/acpisleep && exit 0

    /usr/bin/killall fvwm2

Wird der Laptop-Deckel geschlossen, wird der Windowmanager gekillt und es kann weitergearbeitet werden.

Eine zweite Loesung bietet sich fuer Desktop-Computer an. Dabei wird der Windowmanager gekillt, wenn die ersten beiden Buttons eines Joysticks gleichzeitig gedrueckt werden.

Das Script dazu lautet

  jstest --event /dev/input/js0 | awk '{
     if ($3 == "1,") {
        if ($7 == "1,")
           if ($9 == "1")
              button1 = 1;
           else       
              button1 = 0;
        if ($7 == "2,")
           if ($9 == "1")
              button2 = 1;
           else
              button2 = 0;
      }
      if (button1 && button2) system("killall fvwm2");
  }' &

Man kann das bequem vor

   while true; do fvwm2 ; done

in .xsession einfuegen