사용된 단축키는 문제가 되지 않습니다

사용된 단축키는 문제가 되지 않습니다

~ 2년 동안 Super특정 키보드 단축키를 실행하기 위해 해당 키(Windows 키라고도 함)를 사용할 수 없는 것 같습니다.

kde, gnome, xfce4를 사용해 보았지만 그 중 어느 것도 완전히 작동하지 않았습니다.

Super예를 들어 + 를 통해 할당된 날짜를 입력하는 것처럼 날짜를 입력하는 키보드 단축키가 있습니다. a이 키를 누르면 아무 일도 일어나지 않습니다.

명령줄은 bash -c 'xvkbd -xsendevent -text $(date +%Y%m%d)'xfce4 기본 설정에서 올바르게 구성되었습니다.

저는 현재 커널 4.15.1-2-ARCH와 함께 Archlinux x86_64를 사용하고 있습니다.

무슨 일이 일어나는지 아는 사람 있나요? 어디? 해결책이 있나요? 해결책?

답변1

사용된 단축키는 문제가 되지 않습니다

bash …xterm명령을 (또는 다른 그래픽 응용 프로그램) 로 바꾸면 키보드 단축키가 성공적으로 설정되었는지 확인할 수 있습니다 . 창이 나타나면 바로가기가 올바르게 설정된 것입니다. 대신 문제는 거의 확실하게 필수 명령입니다.

bash -c 'xvkbd -xsendevent -text $(date +%Y%m%d)'

내 경험상 XSendEvent사용하기에 신뢰할 수 없습니다. 1이것이 문제의 원인일 수 있습니다. xdotool하나를 사용하면 XTEST과 사이에서 선택할 수 있습니다 XSendEvent. 일반적으로 전자가 저에게 적합합니다. 비슷한 옵션이 있을 xvkbd수 있습니다.

키 시퀀스를 보낼 때 원하는 시퀀스가 ​​전송되도록 하려면 현재 수정자를 지워야 합니다(예: + , + 등이 test아님 ).SupertSupere

또한 xdotool이벤트를 너무 빨리 보내면 사라지는 이상한 동작이 하나 이상 있습니다. 2이것은 실제로 X 서버 드롭 이벤트일 수도 있고 완전히 다른 상황일 수도 있습니다. 어쨌든 xdotool이 문제 해결을 (적어도) 연기할 수 있습니다.

xdotool sleep 0.125 type --clearmodifiers 'string to type'

이 하위 명령 에는 만일의 경우에 대비한 옵션이 type있습니다.--delay초기의드롭 이벤트를 방지하기에는 지연이 충분하지 않습니다.

요컨대

나는 다음을 사용할 것이다:

bash -c 'xdotool sleep 0.125 type --clearmodifiers --delay 125 "$(date +%Y%m%d)"'

예상되는 동작을 복제하지만 설정에 따라 sleep및 사용된 값을 조정해야 할 수도 있습니다.--delay

또 다른 가능한 옵션

클립보드를 파기해도 괜찮다면 다음에 대한 기본 단축키를 보내는 것이 더 나은 접근 방식일 수 있습니다 paste selection.

bash -c 'printf "%s" "$(date +%Y%m%d)" | tee >(xsel -bi) | xsel -i; xdotool sleep 0.125 key --clearmodifiers shift+Insert'

xsel이는 원하는 텍스트를 선택 영역에 넣거나 선택 영역에서 제외하는 데 사용됩니다( CLIPBOARD일관 되지 않은 텍스트를 사용하므로). 그런 다음 키 시퀀스를 합성하여 이 선택 항목을 붙여넣습니다. 두 번의 합성 키 입력만 필요하므로 다른 방법보다 이벤트를 삭제할 가능성이 적습니다.PRIMARYShiftInsert


1xdotool(1):

이벤트 메모 보내기

특정 창에 키 입력을 보내려고 하는데 작동하지 않는 것 같으면 응용 프로그램이 xdotool이 생성하는 이벤트를 무시하고 있을 수 있습니다. 이것은 매우 흔한 일입니다.

특정 창에 키 입력을 보내는 것은 단순히 활성 창에 입력하는 것과 다른 API를 사용합니다. "xdotool type --window 12345 hello"를 지정하면 xdotool은 키 이벤트를 생성하여 창 12345로 직접 보냅니다. 그러나 X11 서버는 이러한 방식으로 생성된 모든 이벤트에 대해 특수 플래그를 설정합니다(수동으로 X11의 XEvent.xany.send_event 참조). 많은 프로그램이 이 플래그를 관찰하고 이러한 이벤트를 거부합니다.

키 누르기 및 마우스 이벤트의 경우 특정 창을 대상으로 할 때만 XSendEvent를 사용한다는 점에 유의하는 것이 중요합니다. 그렇지 않으면 XTEST를 사용합니다.

일부 프로그램은 xdotool에 의해 생성된 이벤트라도 허용하도록 구성할 수 있습니다. 도움이 필요하면 애플리케이션 설명서를 참조하세요.

특정 애플리케이션 노트(작성자 테스트에서 발췌):

  • Firefox 3은 포커스가 없을 때 모든 입력을 무시하는 것 같습니다.
  • ctrl+왼쪽 클릭으로 실행할 때 xterm을 구성할 수 있습니다. "Allow SendEvents"
  • gnome-terminal은 기본적으로 생성된 입력을 허용하는 것 같습니다.

2 이런 일이 발생하는 이유를 정확히 이해하면 이 답변을 다시 방문하여 이에 대해 자세히 설명하겠습니다.

관련 정보