X 서버 크롤링을 나열하고 관리하기 위한 명령줄 도구는 무엇입니까? (이것은 키와 포인터 잡기와 같습니다. 즉, 특정 키나 마우스 버튼의 사용을 특정 응용 프로그램으로 제한하거나 마우스 포인터가 화면의 특정 영역에 머물도록 제한하는 것입니다.) 저는 다음과 같은 가상의 유틸리티를 찾고 있습니다 xgrab
. 같은 것을 보여줘
Key 0x00f00ba5 0x123 0
Button 0x00f00ba5 2
Pointer 0x00abcdef
XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)
, XGrabButton
, XGrabPointer
, 가 호출되었음을 나타냅니다 XGrabKeyboard
( XGrabServer
가능한 경우). 표시 형식은 중요하지 않습니다. 내가 원하는 것은 누가 무엇을 가져오고 있는지 확인하는 방법과 해당 가져오기를 취소하는 방법입니다(가능한 경우 X11 API가 이를 허용하는지 확실하지 않습니다).
답변1
최신 버전의 X(X.org 서버 ≥1.11)는 다양한 디버깅 키보드 기호를 지원합니다.이번에 제출하세요. 트리거되면 크롤링 관련 작업을 수행합니다.
기본적으로(적어도 최신 버전에서는), 이는 비활성화됩니다(기본 키맵에는 없음).
그러나 이미 xdotool
설치한 경우에는예명령줄에서 실행하여 호출할 수 있습니다.
xdotool key NameOfKey
NameOfKey
활성화하려는 키보드 기호는 어디에 있습니까? 예를 들어 X 서버 로그에 대한 활성 크롤링 목록을 인쇄하려면 를 사용합니다 xdotool key XF86LogGrabInfo
.
관련 주요 기호는 다음과 같습니다.
- XF86LogGrabInfo:활성 크롤링 목록을 X 서버 로그에 인쇄
- XF86Ungrab: 크롤링을 보유하고 있는 응용 프로그램을 종료하지 않고 모든 활성 크롤링을 중단합니다.
- XF86ClearGrab: 활성 크롤링을 보유한 모든 프로세스를 종료합니다.
XF86LogGrabInfo현재 누르지 않은 키 잡기와 같은 수동 크롤링이 아닌 활성 크롤링만 나열됩니다 . 패시브 잡기에 대한 정보를 얻으려면 잡기를 활성화해야 합니다. xdotool key XF86LogGrabInfo
관심 있는 키-코드 또는 마우스-버튼 조합을 누를 때 실행됩니다. 다음과 같이 하십시오:
- 달리기
sleep 1; xdotool key XF86LogGrabInfo
- 1초 이내에 키 또는 마우스 버튼 조합을 누르십시오.
- 1초 후에 키/버튼을 놓습니다.
- X 서버 로그에서 "활성 크롤링..." 메시지를 확인하십시오(항상
/var/log/Xorg.0.log
).
답변2
개별 키나 버튼에 대해 존재할 수 있는 수동 잡기 에 대한 즉각적인 정보는 모르지만 전체 키보드 또는 마우스 장치에 대한 활성 잡기를 나열하는 몇 가지 방법이 있습니다.
- 모든 플랫폼에서 Xorg 1.11 이상(또는 패치가 적용된 이전 버전)만 다음과 같이 크롤링 데이터를 로그에 덤프하도록 단축키를 매핑합니다.이 패치 노트에 설명되어 있습니다..
- Solaris 11(Solaris 11 Express 2010.11 또는 실제 Solaris 11 릴리스)에서는 다음과 같은 디버거 스크립트를 사용합니다
/usr/demo/Xserver/mdb/list_Xserver_devicegrab_client
.X 서버에서 정보 가져오기. 현재 Xorg 1.11 단축키에서 다루지 않는 서버 스내칭 기능도 있습니다.
1 본다http://tronche.com/gui/x/xlib/input/pointer-grabbing.html활성 및 수동 크롤링을 정의하는 데 사용됩니다.
답변3
이것은 기계달팽이의 대답에 덧붙여-
Xorg 로그의 항목은 읽기가 매우 어려울 수 있습니다. 나는 그것들을 구문 분석하고 인간 친화적인 형식으로 제시하는 프로그램을 작성했습니다.
https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e
사용하려면 먼저 xdotool key XF86LogGrabInfo
Mechanical snail의 답변에 설명된 대로 실행하세요. 그런 다음 위에 링크된 프로그램을 실행하세요. Xorg 로그 파일을 찾을 수 없는 경우 옵션을 /var/log/Xorg.0.log
사용하여 해당 위치를 지정할 수 있습니다 . 자세히보다.--xorg-log
--help
답변4
위의 답변을 바탕으로 다음 명령은 키보드 단축키가 있는 모든 프로그램을 식별하는 데 도움이 되었습니다.
$ lsof -c Xorg | grep ".log" # find out the path for the Xorg log file
Xorg 16025 sr 4w REG 254,1 225839 3933229 /home/sr/.local/share/xorg/Xorg.0.log
$ xdotool key XF86LogGrabInfo # prints all Xorg registered grabs
$ cat /home/sr/.local/share/xorg/Xorg.0.log | grep grabs
[ 39303.019] (II) Printing all currently active device grabs:
[ 39303.019] (II) End list of active device grabs
[ 39303.019] Printing all currently registered grabs
[ 39303.019] Printing all registered grabs of client pid 16024 xinit /home/sr/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.6AO52I3zhe
[ 39303.019] Printing all registered grabs of client pid 16045 unclutter
[ 39303.019] Printing all registered grabs of client pid 16047 xscreensaver
[ 39303.019] Printing all registered grabs of client pid 16109 /usr/lib/firefox/firefox
[ 39303.019] Printing all registered grabs of client pid 16055 xscreensaver-systemd
[ 39303.019] Printing all registered grabs of client pid 16057 xbindkeys
[ 39303.027] Printing all registered grabs of client pid 16039 /usr/bin/openbox --startup /usr/lib/openbox/openbox-autostart OPENBOX
[ 39303.039] Printing all registered grabs of client pid 16048 copyq
[ 39303.039] Printing all registered grabs of client pid 16049 konsole
[ 39303.039] Printing all registered grabs of client pid 16095 /usr/bin/copyq --clipboard-access monitorClipboard
[ 39303.039] Printing all registered grabs of client pid 16109 /usr/lib/firefox/firefox
[ 39303.039] Printing all registered grabs of client pid 16456 subl --detached
[ 39303.039] Printing all registered grabs of client pid 16465 /usr/lib/at-spi2-registryd --use-gnome-session
[ 39303.039] Printing all registered grabs of client pid 17178 xdotool key XF86LogGrabInfo
[ 39303.039] End list of registered passive grabs
그래서 내 경우에는 다음 응용 프로그램에 키 바인딩이 적용됩니다: xinit, unclutter, xscreensaver, firefox, xbindkeys, openbox, copyq, konsole, subl, at-spi2-registryd