Manipular a tecla X e o ponteiro agarra na linha de comando

18

Quais ferramentas de linha de comando existem para listar e gerenciar os servidores X? (Isso é agarrar como na tecla e ponteiro pega, ou seja, restringindo o uso de uma determinada tecla ou botão do mouse para um aplicativo específico, ou constringir o ponteiro do mouse para permanecer em uma área de tela particular.) Estou à procura de um xgrab hipotético utilitário que mostraria coisas como

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

significa que houve uma chamada para XGrabKey(display, 0x123, 0, 0x00f00ba5, ...) e assim por diante com XGrabButton , XGrabPointer , XGrabKeyboard , XGrabServer (se possível). O formato de exibição não importa, o que eu quero é alguma maneira de ver quem está pegando o que, e possivelmente alguma maneira de revogar esses ataques (se é possível, eu não tenho certeza se a API do X11 permite isso).

    
por Gilles 24.10.2011 / 02:42

3 respostas

17

Versões recentes do X (servidor X.org ≥1.11) suportam vários keyyms de depuração, introduzidos em este cometer . Quando acionados, eles executam ações relacionadas a tentativas.

Por padrão ( pelo menos nas versões recentes ), estes são desativados (ausentes do mapa de teclado padrão).

No entanto, se você tiver xdotool instalado, é possível chamá-los, executando na linha de comando:

xdotool key NameOfKey

onde NameOfKey é o keysym que você deseja ativar. Por exemplo, para imprimir uma lista de tarefas ativas no log do servidor X, use xdotool key XF86LogGrabInfo .

Keyyms relevantes são:

  • XF86LogGrabInfo : imprime uma lista de tarefas ativas no log do servidor X
  • XF86Ungrab : quebra todas as tentativas ativas, sem matar o aplicativo que contém as garras
  • XF86ClearGrab : mata todos os processos que seguram agarra ativos

Note que XF86LogGrabInfo lista apenas as capturas ativas, não as capturas passivas, como a captura de uma tecla que não está atualmente pressionada. Se você deseja obter informações sobre uma captura passiva, é necessário ativar a captura: execute xdotool key XF86LogGrabInfo enquanto a combinação de acordes ou botões do mouse em que você está interessado for pressionada. Faça algo como:

  1. Executar sleep 1; xdotool key XF86LogGrabInfo
  2. Dentro de 1 segundo, pressione a combinação de teclas ou mouse.
  3. Após 1 segundo, solte a tecla / botão.
  4. Verifique as informações de “Captura ativa…” no log do servidor X (geralmente /var/log/Xorg.0.log ).
por 23.01.2013 / 10:47
7

Eu não sei de nada para as garras passivas 1 de uma única tecla ou botão que pode estar presente, mas há algumas maneiras de listar as capturas ativas de um teclado inteiro ou dispositivo de mouse.

  1. Em todas as plataformas, mas apenas com o Xorg 1.11 e posterior (ou uma versão mais antiga com o patch aplicado), mapeie as teclas de atalho para copiar dados de captura para o log como descrito nestas notas de patch .
  2. No Solaris 11 (Solaris 11 Express 2010.11 ou a versão real do Solaris 11), use os scripts do depurador, como /usr/demo/Xserver/mdb/list_Xserver_devicegrab_client , conforme descrito em Capturando informações do servidor X . Há também um aqui para servidores, que as teclas de atalho do Xorg 1.11 não cobrem atualmente.

1 Consulte o link para obter uma definição de ativo vs. garras passivas.

    
por 17.11.2011 / 03:21
4

Esta é uma adição à resposta do caracol mecânico -

As entradas no log do Xorg podem ser bastante indecifráveis. Eu escrevi um programa que os analisa e os apresenta de uma forma tratável:

link

Para usar, execute primeiro xdotool key XF86LogGrabInfo , conforme descrito em Resposta do caracol mecânico. Em seguida, execute o programa vinculado acima. Se o arquivo de log do Xorg não estiver localizado em /var/log/Xorg.0.log , você poderá especificar sua localização usando a opção --xorg-log . Veja --help para detalhes.

    
por 30.03.2016 / 20:03