2010-09-25 1 views
5

처리를 위해 모든 창 관리자 명령 (Alt + F4 및 기타 등등)을 캡처하기 위해 초점을 맞춘 상태에서 키보드를 잡는 것이 바람직한 경우를 고려하십시오. 이제는 사용자가 키보드를 잡을 때 키보드를 통해 다른 응용 프로그램이나 가상 데스크톱으로 전환 할 수있는 단점이 있습니다. 내가 잡기에서 제외 된 키 조합 (예 : 가상 데스크톱 전환을위한 키 조합)의 사용자 정의 허용 목록을 갖고 싶습니다.XGrabKeyboard에서 일부 키 제외

나는 두 가지 접근법을 생각할 수 있습니다. 허용 된 키 이벤트가 도착하면

  1. 평소처럼 계속 처리하도록 X에 알립니다. 이것은 더 자연스러운 방법으로 들리지만이 작업을 수행 할 방법을 찾을 수 없습니다. 또는
  2. 키보드를 해제하고 처리를 위해 키보드 관리자에게 직접 이벤트를 다시 보냅니다. 그러나 잘 모릅니다. 어디로 보낼 것인가 (루트 윈도우?) 또는 그것이 작동할지 여부.

누구도 공백을 채울 수 있습니까? 다른 제안?

그래버에서 키를 제외 할 수있는 방법이 없다면 키보드를 눌렀을 때 키보드를 언 그레이드하는 "이스케이프 키"가 있어야만 해결할 수 있습니다. 사용자는 둘 다 누른 다음 창 관리자 명령을 눌러야합니다.하지만 좋지는 않습니다.

답변

4

나는 그것을 할 방법이 없다고 생각합니다. 메커니즘의 어느 것도 당신이 그들을 필요로하는 방식으로 작동하지 않습니다.

접근법 1은 예를 들어 클릭이나 키를 가로 채기로 결정하지 않은 경우 창 관리자가 수행하는 작업의 일종입니다. 그러나 WM은 특정 키 (XGrabKey = passive XGrabKeyboard = active)와 XAllowEvents ("passive"grabs)를 사용합니다. XAllowEvents()는 XGrabKeyboard()에서 작동하지 않습니다. 또한 재생 모드 중 하나를 사용하여 XAllowEvents를 재생하면 재생 된 이벤트가 원본 캡처가있는 모든 수동 그립과 모든 부모 창을 건너 뜁니다. WM의 움켜 잡는 부분은 항상 상위가 될 루트 창에 표시 될 것이므로 루트 창으로 재생할 방법이 없습니다. 모든 가능한 키에 XGrabKey를하는 것은 어쨌든 일종의 사이코 일 것입니다.

접근법 2는 다른 키 및 마우스 이벤트가 다시 처리되기 전에 처리 될 수 있으므로 잘못된 경쟁 조건 문제가 있으므로 키를 재정렬하고 파괴 된 창 및 다른 혼란에 이벤트를 보냅니다. 또한 키 이벤트를 보내는 좋은 방법이 없습니다. 많은 클라이언트는 XSendEvent()를 무시합니다 (이벤트를 허용하는 send_event 플래그를 설정합니다). XTest 확장을 사용할 수는 있지만 프로덕션 X 서버에서는 사용할 수 없으며 여전히 경쟁 조건 문제가 있습니다.

GrabKeyboard 후에 AllowEvents (mode = ReplayKeyboard)를 수행하고 상위 창에서 수동 수집을 우회하지 않고 프로토콜 확장을해야합니다.

한 가지주의 할 점은 XKB와 XInput2로 수행 할 수있는 모든 야생 콘텐츠를 모르는 것입니다. 따라서 해당 확장에 뭔가가있을 수 있습니다.

어쨌든, 결국 X 서버 및/또는 창 관리자 사양에 "VMWare/VNC-type-thing awareness"가 좋을지라도 "이스케이프 키"를 해결해야한다는 것을 알고 있습니다. , "그것은 단기간에 당신을 도울 수 없습니다. EWMH 스펙 확장은 vnc/vmware/stuff-like와 같은 새로운 _NET_WM_WINDOW_TYPE만큼이나 간단 할 수 있으며 창 관리자는 키 바인딩을 줄이거 나 창에 포커스가있을 때 추가 수정자를 추가 할 수 있습니다.

+0

나는 이런 답을 얻을 까봐 두렵다. 가능하다면이 작업을 수행하는 소프트웨어를 보았을 것입니다.그러나 XInput 2로 나를 안내해 주셔서 감사합니다. 지금 당장보고 있는데 입력 장치를 잡는 새로운 방법이있는 것 같습니다. 이것이 가능한지 확인하기 위해 몇 가지 테스트를 실행하려고합니다. –

+0

그것이 "아마도 XI2.1에 예정되어 있습니다"라고 밝혀졌습니다. 아직 Google에 따르면 존재하지 않는 것 같습니다. 그러나 새로운 WM 힌트는 나쁜 생각처럼 들리지 않으므로 freedesktop.org wm-spec 목록에 대한 토론을 시작했습니다. http://mail.gnome.org/archives/wm-spec-list/2010-September/thread.html –