문맥
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 잠금을 켭니다 Shift.
- 실수로 두 번 탭하여 컨트롤을 잠갔습니다 Ctrl.
- 를 누르면 - -가 입력되므로 A혼란 이 따릅니다 .CtrlShiftA
- 만료 기간이 지나면 '고착' 시프트 및 제어 수정자는 제거되지만 수정자는 더 이상 고정되지 않습니다. 탭한 Shift다음 을 누르면 시프트가 아닌 A일반 가 표시됩니다.
a
A
대신 "혼란이 따른다" 지점 이후에 다음과 같은 동작을 원합니다.
- 3초를 기다린 후 '고정된' Shift 및 Control 수정자가 제거되지만(즉, 누르면 가
a
생성됨a
) 수정자는 제거됩니다.아직도 끈적끈적해- 두드린 Shift다음 누르면 a이동이 발생합니다A
.
저는 i3
창 관리자를 사용하고 있으므로 이상적으로는 전체 데스크톱 관리자 제품군에 의존하지 않는 솔루션을 원합니다.
대안: 일정 기간 동안 키보드를 사용하지 않으면 자동으로 스크립트를 한 번 호출하시겠습니까?
xkbset
해결 방법으로 어떤 수정자를 눌렀는지에 관계없이 구성을 재설정하는 키보드 단축키를 정의했습니다 (예: PrintScr, Shift+ PrintScr, Ctrl++ Shift등 PrintScr은 모두 동일한 스크립트에 바인딩됨). 5초 동안 키보드를 사용하지 않으면 자동으로 이 스크립트를 실행하면 원하는 작업이 수행됩니다.
답변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