固定キータイムアウト

固定キータイムアウト

コンテキスト

固定キーの有効化に使用するものxkbset:

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

これが私が望むものです。Shiftキーをクリックして放し、別のキーを押して「移動」値を取得します。Shift私のためにダブルクリックしてください。 、、、にもCapsLock同様に適用されますCtrlAltHyper

しかし、時には設定で1つ以上の修飾子を「ロック」するのに問題が発生し、それを解放するためにトリガーされる修飾子を特定するのが困難になります。

質問:固定キーを「タイムアウト」する方法はありますか?

つまり、固定修飾子を押すか修飾子をロックすると、キーを押さなくても5秒後に正常に戻ります。

xkbset指定された時間後に設定が期限切れになることができることはわかっていますが、これにより固定キーが完全にオフになります。私が望むのは、数秒間アクティビティがない場合は、すべての修飾キーを離し、次に修飾キーを押したときに固定キーの動作を維持することです。

編集する

違いを明確にするために有効期限オプションを使用すると、次の結果が表示されます。

  • をダブルクリックしてShift LockをオンにしますShift
  • 誤ってダブルCtrlクリックしてコントロールをロックしました。
  • ボタンを押すと「-」が入力され、A混乱が発生します。CtrlShiftA
  • 有効期限が切れると、「固定」ShiftおよびControl修飾子は削除されますが、修飾子は固定されなくなりました。クリックShiftして押すと Shift ではなくA一般になります。aA

代わりに、「カオスが続く」ポイントの後に、次のような動作が必要です。

  • 3秒待ってから「固定」ShiftおよびControl修飾子を削除しましたが(つまり、押すとa生成されますa)、修飾子はまだベタベタ- タップしShiftてからを押すとa交代作業が行われますA

私はi3ウィンドウマネージャを使用しているので、理想的には、デスクトップマネージャ全体のスイートに依存しないソリューションを探したいと思います。

回避策:一定期間キーボードを使用しない場合は、自動的にスクリプトを一度呼び出しますか?

xkbset回避策として、どの修飾子を押しても設定をリセットするキーボードショートカットを定義しました(例:PrintScrShift+ PrintScrCtrl++などはすべて同じスクリプトにバインドされています)ShiftPrintScr5秒間キーボードを使用しなかった場合、このスクリプトを自動的に実行すると目的のタスクが完了します。

ベストアンサー1

この問題に対する解決策は、次のスクリプトのようです。xprintidleロック状態がリセットされるタイミングを決定します。ポーリングループがあるため、継続的に実行する必要があります。

#!/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

おすすめ記事