コンテキスト
固定キーの有効化に使用するもの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同様に適用されますCtrl。AltHyper
しかし、時には設定で1つ以上の修飾子を「ロック」するのに問題が発生し、それを解放するためにトリガーされる修飾子を特定するのが困難になります。
質問:固定キーを「タイムアウト」する方法はありますか?
つまり、固定修飾子を押すか修飾子をロックすると、キーを押さなくても5秒後に正常に戻ります。
xkbset
指定された時間後に設定が期限切れになることができることはわかっていますが、これにより固定キーが完全にオフになります。私が望むのは、数秒間アクティビティがない場合は、すべての修飾キーを離し、次に修飾キーを押したときに固定キーの動作を維持することです。
編集する
違いを明確にするために有効期限オプションを使用すると、次の結果が表示されます。
- をダブルクリックしてShift LockをオンにしますShift。
- 誤ってダブルCtrlクリックしてコントロールをロックしました。
- ボタンを押すと「-」が入力され、A混乱が発生します。CtrlShiftA
- 有効期限が切れると、「固定」ShiftおよびControl修飾子は削除されますが、修飾子は固定されなくなりました。クリックShiftして押すと Shift ではなくA一般になります。
a
A
代わりに、「カオスが続く」ポイントの後に、次のような動作が必要です。
- 3秒待ってから「固定」ShiftおよびControl修飾子を削除しましたが(つまり、押すと
a
生成されますa
)、修飾子はまだベタベタ- タップしShiftてからを押すとa交代作業が行われますA
。
私はi3
ウィンドウマネージャを使用しているので、理想的には、デスクトップマネージャ全体のスイートに依存しないソリューションを探したいと思います。
回避策:一定期間キーボードを使用しない場合は、自動的にスクリプトを一度呼び出しますか?
xkbset
回避策として、どの修飾子を押しても設定をリセットするキーボードショートカットを定義しました(例:PrintScr、Shift+ PrintScr、Ctrl++などはすべて同じスクリプトにバインドされています)Shift。PrintScr5秒間キーボードを使用しなかった場合、このスクリプトを自動的に実行すると目的のタスクが完了します。
答え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
答え2
ヘルプテキストは、xkbset
指定されたタイムアウト後にすべてのAccessX機能を自動的に無効にすることができることを示しています。
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
そして、例えばUbuntu Wikiこれを行うには、次のコマンドラインを表示します。
# setting the expiry of the accessx settings
/usr/bin/xkbset exp -bell -sticky -twokey -latchlock -accessx -feedback -stickybeep -led