Timeout für Feststelltasten

Timeout für Feststelltasten

Kontext

Ich verwende xkbsetzum Aktivieren der Feststelltaste:

xkbset sticky -twokey latchlock ## set sticky keys, don't disable via twokey
xkbset exp 1 =sticky ## don't expire sticky keys

Das macht genau das, was ich will. Ich kann die ShiftTaste antippen und loslassen und dann eine andere Taste drücken, um den „verschobenen“ Wert zu erhalten. Doppeltippen Shiftgibt mir CapsLock, und dasselbe funktioniert für Ctrl, Alt, Hyper.

Manchmal stecke ich jedoch mit einem oder mehreren Modifikatoren in der Einstellung „gesperrt“ fest und es kann schwierig sein, herauszufinden, welche ausgelöst werden, um sie freizugeben.

Frage: Gibt es eine Möglichkeit, die Feststelltaste zu deaktivieren?

Das bedeutet, wenn ich einen Sticky-Modifikator gedrückt oder einen Modifikator gesperrt habe, wird er nach etwa 5 Sekunden wieder in den Normalzustand zurückgesetzt, ohne dass ich weitere Tasten drücke.

Ich weiß, dass ich xkbseteine Einstellung nach einer festgelegten Zeit ablaufen lassen kann, aber dadurch werden die Feststelltasten vollständig deaktiviert. Ich möchte alle Modifikatoren nach einigen Sekunden Inaktivität freigeben, aber das Feststelltastenverhalten beibehalten, wenn ich das nächste Mal eine Modifikatortaste drücke.

BEARBEITEN

Um den Unterschied zu verdeutlichen: Wenn ich die Ablaufoptionen verwende, erhalte ich Folgendes:

  • Durch zweimaliges Tippen schalte ich die Umschaltsperre ein Shift.
  • Ich habe die Steuerung versehentlich durch Ctrlzweimaliges Tippen gesperrt.
  • Es entsteht Verwirrung, da durch Drücken Adie Eingabe von Ctrl- Shift- Aerfolgt.
  • Nach Ablauf der Frist werden die festsitzenden Umschalt- und Steuerungsmodifikatoren entfernt, aber die Modifikatoren sind nicht mehr festsitzend - wenn ich tippe Shiftund dann drücke A, erhalte ich ein normales a, kein verschobenesA

Stattdessen hätte ich gerne folgendes Verhalten nach dem „Verwirrung folgt“-Punkt:

  • Ich warte drei Sekunden und dann werden die 'festsitzenden' Umschalt- und Steuerungsmodifikatoren entfernt (d. h., das Drücken aerzeugt ein a), aber Modifikatorensind immer noch klebrig- Wenn ich tippe Shiftund dann drücke a, erhalte ich eine Umschalttaste A.

Ich verwende den i3Fenstermanager und hätte daher idealerweise gerne eine Lösung, die nicht von einer vollständigen Desktop-Manager-Suite abhängig ist.

Alternative: Nach einer Zeit der Inaktivität der Tastatur automatisch (einmalig) ein Skript aufrufen?

Als Workaround habe ich eine Tastenkombination definiert, die meine xkbsetKonfiguration unabhängig davon zurücksetzt, welche Modifikatoren gedrückt werden (d. h. PrintScr, Shift+ PrintScr, Ctrl+ Shift+ PrintScrusw. sind alle an dasselbe Skript gebunden). Das automatische Ausführen dieses Skripts nach 5 Sekunden Inaktivität der Tastatur würde das erreichen, wonach ich suche.

Antwort1

Die Lösung für die Frage scheint ein Skript wie das folgende zu sein, dasAbonnierenum herauszufinden, wann der Sperrzustand zurückgesetzt werden muss. Beachten Sie, dass es eine Abfrageschleife gibt und daher kontinuierlich ausgeführt werden muss.

#!/bin/bash

# Sets sticky keys, but has them reset state (e.g. latchlock goes back to normal) after
# a few seconds

IDLE_RESET=3000 # 3 seconds

# Set up sticky keys and double tap to lock
xkbset sticky -twokey latchlock
# Disable XAccess managed sticky mode timeout
xkbset exp =sticky =latchlock

# Sentinel so we only run the reset once every idle period
sentinel=0
while true;do
    if [ $(xprintidle) -gt $IDLE_RESET ];then
        if [ $sentinel = 0 ];then
            # Reset the state
            xkbset -sticky -twokey -latchlock;xkbset sticky -twokey latchlock
            sentinel=1
        fi
    else
        sentinel=0
    fi
    sleep 1
done

Antwort2

Der Hilfetext xkbsetweist darauf hin, dass jede AccessX-Funktion nach einer bestimmten Zeitüberschreitung automatisch deaktiviert werden kann:

To set the AccessX expire controls:

  xkbset exp <options>

where <options> may be all or any of (<ax_timeout> is the timeout (in
seconds) after which no user activity on X will cause the expiry; '-'
indicates the feature will be switched off, '=' incicates the feature
will be left unchanged, otherwise it will be switched on):

<ax_timeout>
[-|=]{bell|b}
[-|=]{repeatkeys|r}
[-|=]{mousekeys|m}
[-|=]{mousekeysaccel|ma}
[-|=]{accessx|a}
[-|=]{sticky|st} [[-|=]twokey|[-|=]latchlock]...
[-|=]{slowkeys|sl}
[-|=]{bouncekeys|bo}
[-|=]{feedback|f} [[-|=]dumbbell|[-|=]led|[-|=]feature|[-|=]slowwarn|
  [-|=]slowpress|[-|=]slowaccept|[-|=]slowreject|[-|=]slowrelease|
  [-|=]bouncereject|[-|=]stickybeep]...
[-|=]{overlay1|ov1}
[-|=]{overlay2|ov2}
[-|=]ignoregrouplock

Und ein Beispiel auf derUbuntu-Wikizeigt dazu die folgende Befehlszeile an:

# setting the expiry of the accessx settings
/usr/bin/xkbset exp -bell -sticky -twokey -latchlock -accessx -feedback -stickybeep -led

verwandte Informationen