xbindkeys 응용 프로그램 과 같이 전 세계적으로 Ubuntu에서 키 조합을 다시 매핑하는 여러 가지 방법 (예 : Ctrl + D 또는 기타를 보내기 위해 Ctrl + S를 다시 매핑하는 방법)을 알고 있습니다. 그래도 필요한 것은 특정 응용 프로그램에 대해서만 이 작업을 수행하는 방법 입니다. 예를 들어 ‘Ctrl + D를 보내려면 Ctrl + S를 다시 매핑하지만 Chrome에서만 ‘과 같은 것입니다. 이것을 달성 할 수있는 방법이 있습니까?
답변
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”입니다.
희망이 도움이됩니다.
답변
autokey 는 우분투의 AutoHotkey와 같습니다. 파이썬으로 스크립트를 작성하고 키보드 단축키와 윈도우 필터를 통해 스크립트를 실행하도록 할 수 있습니다 (의사 애플리케이션에 따라 다름). 스크립트는 키보드 및 마우스 이벤트를 제어하고 추가 된 터치로 창을 이동할 수도 있습니다.