고정 키 시간 초과

고정 키 시간 초과

문맥

고정 키를 활성화하는 데 사용하는 것 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

그러나 때때로 설정에서 하나 이상의 수정자를 "잠그는" 데 문제가 발생하고 이를 해제하기 위해 트리거되는 수정자를 파악하는 데 어려움을 겪습니다.

질문: 고정 키를 "시간 초과"하는 방법이 있습니까?

즉, 고정 수정자를 누르거나 수정자를 잠그면 더 이상 키를 누르지 않고도 5초 정도 후에 정상으로 돌아갑니다.

xkbset정해진 시간 후에 설정이 만료되도록 할 수 있다는 것을 알고 있지만 이렇게 하면 고정 키가 완전히 꺼집니다. 내가 원하는 것은 몇 초 동안 활동이 없으면 모든 수정자 키를 놓고 다음에 수정자 키를 누를 때 고정 키 동작을 유지하는 것입니다.

편집하다

차이점을 명확히 하기 위해 만료 옵션을 사용하면 다음과 같은 결과가 나타납니다.

  • 을 두 번 클릭하여 Shift Lock을 켭니다 Shift.
  • 실수 Ctrl로 두 번 클릭하여 컨트롤을 잠갔습니다.
  • 버튼을 누르면 "- " A가 입력되어 혼란이 발생합니다 .CtrlShiftA
  • 만료 후 "고정된" Shift 및 Control 수정자는 제거되지만 수정자는 더 이상 고정되지 않습니다. 클릭 Shift하고 누르면 Shift가 아닌 A일반이 됩니다.aA

대신, "혼돈이 계속됩니다" 지점 이후에 다음과 같은 동작을 원합니다.

  • 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

그리고 예를 들어주세요우분투 위키이 작업을 수행하려면 다음 명령줄을 표시합니다.

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

관련 정보