응용 프로그램 별 키 조합 재 매핑?


18

xbindkeys 응용 프로그램 과 같이 전 세계적으로 Ubuntu에서 키 조합을 다시 매핑하는 여러 가지 방법 (예 : Ctrl + D 또는 기타를 보내기 위해 Ctrl + S를 다시 매핑하는 방법)을 알고 있습니다. 그래도 필요한 것은 특정 응용 프로그램에 대해서만 이 작업을 수행하는 방법 입니다. 예를 들어 'Ctrl + D를 보내려면 Ctrl + S를 다시 매핑하지만 Chrome에서만 '과 같은 것입니다. 이것을 달성 할 수있는 방법이 있습니까?


이 글 을 읽었습니까 ? 나는 그것을 시도하지 않았지만, 당신이 찾고있는 것을 광대하게 보인다. 그래도 적절한 답변을 작성하는 것에 대해 engouh를 모른다.
lumbric

답변:


12

xbindkeys 사용에 대한 아이디어가 좋습니다.

.xbindkeysrc새 키 바인딩을 추가 하십시오 .

"app_specific_keys.sh"
   Control+s

"app_specific_keys.sh"을 누르면 실행 됩니다 ctrl+s.

이제 스크립트를 정의해야합니다. 활성 창과 현재 포커스가있는 앱의 이름을 가져와야합니다.

xprop -id `xdotool getactivewindow` |awk '/WM_CLASS/{print $4}'

이것은 트릭을 수행합니다 : xdotool에 활성 창을 요청한 다음 xprop에 주어진 id를 가진 창의 모든 속성을 요청한 다음 매우 자세한 출력을 응용 프로그램 이름 (실제로 클래스)으로 줄입니다. 그놈 터미널에서 이것을 실행하면

"Gnome-terminal"

이제 애플리케이션에 대한 조치를 정의해야합니다.

if [ $N = '"Gnome-terminal"' ]; then                                                    
    xdotool key --clearmodifiers ctrl+s                                                          
else                                                                            
    xdotool key --clearmodifiers ctrl+d                                                          
fi  

따라서 스크립트 "app_specific_keys.sh"는 다음과 같이 보일 수 있습니다.

#!/bin/bash                                                                     
W=`xdotool getactivewindow`                                                     
S1=`xprop -id ${W} |awk '/WM_CLASS/{print $4}'`                                 
S2='"Gnome-terminal"'                                                           
if [ $S1 = $S2 ]; then                                                          
   xdotool key --clearmodifiers ctrl+d                                             
else                                                                            
   xdotool key --clearmodifiers ctrl+s                                          
fi  

이것은 작동 해야 하지만 이 질문 에서와 같이 작동 하지 않는다는 것을 인정해야합니다. 아마도 Compiz, Unity, Global Menu 중 하나 --clearmodifiers가 xdotool 옵션 과 잘 작동하지 않기 때문일 수 있습니다. 해결 방법은 당신의에서 : 키 자신을 해제 할 수 있도록 데르에서 스크립트의 앞에 잠을 추가하는 것 .xbindkeysrc이 키 바인딩로 변경

"sleep 0.5; app_specific_keys.sh"
   Control+s

참고 : 터미널에서 실행되는 프로그램 (예 : 콘솔 모드의 vi 또는 emacs)에 대한 키를 변경하려는 경우에는 작동하지 않습니다. 반환 된 응용 프로그램 클래스는 여전히 "Gnome-terminal"입니다.

희망이 도움이됩니다.


1
이것은 결국 잘 작동했습니다. xdotool을 사용하여 키 입력을 보내지 않았습니다 xvkbd -xsendevent -text "\Cs". 방금 사용했습니다 . 이것은 xdotool에서 보았던 문제로 고통받지 않는 것 같습니다.
Derek Thurn

f호출하는 것과 같은 키 호출 자체는 불가능합니다 xdotool key f. 여전히이 방법을 찾고 있습니다.
phil294

하, 마침내 하나를 찾았습니다! xdotool type --window $(xdotool getwindowfocus) [keys] --window 옵션을 사용하고 현재 활성화 된 창으로 전송하면 재귀 동작이 발생하지 않습니다.
phil294

2

autokey 는 우분투의 AutoHotkey와 같습니다. 파이썬으로 스크립트를 작성하고 키보드 단축키와 윈도우 필터를 통해 스크립트를 실행하도록 할 수 있습니다 (의사 애플리케이션에 따라 다름). 스크립트는 키보드 및 마우스 이벤트를 제어하고 추가 된 터치로 창을 이동할 수도 있습니다.


autokeyxbindkeys윈도우 감지 모드에서 즉각적인 조치를 취하더라도, 보다 빠릅니다 . 단점 : 마우스 버튼 할당이 작동하지 않는 것 같습니다 (버그라고 생각합니다)
phil294
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.