Encontre o proprietário de captura de ponteiro do X.org

17

Eu tenho um aplicativo que parece ter agarrado o mouse (eu posso movê-lo, mas não consigo clicar em qualquer lugar). Existe uma maneira de descobrir qual aplicativo é o dono do mouse do X.org?

O atalho fornecido aqui para liberar o mouse não pareceu funcionar, por isso estou interessado em algo que poderia me dar mais informações.

Tobu
fonte
Tem certeza de que é esse o problema? Seria um pouco bizarro para um aplicativo que você não está usando para fazer isso (se o fizesse, eu pararia de usá-lo), então as chances são - se essa é realmente a causa - é o que você estava usando.
o que você
Descobri quais, por tentativa e erro, matando algumas coisas até que algo (um aplicativo de vinho) liberou a garra.
Tobu

Respostas:

16

Você pode fazer isso pressionando a XF86LogGrabInfotecla, introduzida neste commit .

Por padrão, esse keyym não está vinculado a nenhuma chave física ou combinação de teclas. Mas você ainda pode ativá-lo usando xdotool:

xdotool key "XF86LogGrabInfo"

Após executar esse comando, uma lista de capturas ativas será registrada no log do X. No Ubuntu, pelo menos, é isso /var/log/Xorg.0.log. Ele estará em algum lugar próximo ao final do arquivo de log, mas pode haver várias mensagens de log irrelevantes abaixo dele. Se não houver agarrões, ele escreve:

[1199271.146] (II) Printing all currently active device grabs:
[1199271.146] (II) End list of active device grabs

Se houver (aqui, eu abri um menu no Firefox), ele registra algo como:

[1199428.782] (II) Printing all currently active device grabs:
[1199428.782] Active grab 0x4c00000 (core) on device 'Virtual core pointer' (2):
[1199428.782]       client pid 15620 /usr/lib/firefox/firefox 
[1199428.782]       at 1199423728 (from active grab) (device thawed, state 1)
[1199428.782]         core event mask 0x7c
[1199428.782]       owner-events true, kb 1 ptr 1, confine 0, cursor 0x0
[1199428.782] (II) End list of active device grabs
Caracol mecânico
fonte
2

Acabei de ter um problema semelhante e reduzi-o a um bug que de alguma forma faz o X11 pensar que o botão do meio é pressionado e não liberado. Desconectar fisicamente o mouse não ajuda, até que ocorra um evento de mouseup.

O problema pode ser reproduzido usando xdotool mousedown 2- é impossível alternar o foco entre janelas,

xdotool key XF86LogGrabInfo mostra a janela atual do processo focado, mas quando uma mata, outra janela recebe o foco e o mesmo cenário continua.

Solução alternativa: problema xdotool mouseup 2.

Atualização: o botão do meio sendo pressionado e não liberado é simplesmente o menos perceptível, porque a maioria dos aplicativos não responde, e alguns mouses não possuem esse botão para tentar clicar para ver se o problema desaparece.

ArticIceJuice
fonte
0

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 por humanos:

https://gist.github.com/CyberShadow/6412d11aea64144f8905cc0b8196f38e

Para usar, execute primeiro xdotool key XF86LogGrabInfo, conforme descrito na resposta do Mechanical snail. 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 --xorg-logopção Veja --helppara detalhes.

Vladimir Panteleev
fonte