Quando um evento de teclado ou mouse é gerado por um aplicativo e não por um periférico de entrada, esse evento é marcado como "sintético". Muitos aplicativos rejeitam eventos sintéticos.
Em teoria, há uma razão de segurança para isso - você pode executar um aplicativo em seu monitor X, mas sob uma conta diferente ou em uma máquina diferente - mas X é tão ruim em isolar aplicativos (nunca foi projetado para isso) que você não deve permitir que aplicativos não confiáveis acessem seu monitor. E se você não o fizer, não há razão para rejeitar eventos sintéticos.
Até onde sei, o Gtk não oferece uma maneira genérica de decidir se deve permitir eventos sintéticos. Cabe aos aplicativos individuais, e eu não sei qual é o padrão se o programador não se importa.
Existe outra maneira de injetar eventos de entrada, com a extensão XTEST. Os eventos injetados dessa forma aparecem exatamente como os eventos de um periférico de entrada: efetivamente, eles vêm de um periférico de entrada de “teste”. A desvantagem desta abordagem é que eles são roteados para uma janela da mesma forma que qualquer outro evento, então eles são enviados para a janela que tem o foco (a menos que seja interceptado pelo gerenciador de janelas). Você pode enviar eventos XTEST com (versões suficientemente recentes de) xdotool, isso é o que acontece se você não passar uma ID de janela.
xdotool windowactivate 29360262
xdotool key ctrl+a ctrl+c
Sim, isso é irritante. Você pode encontrar uma discussão sobre este problema em o wiki do Selenium . Parece que há uma maneira de enviar eventos falsos para um aplicativo GTK + por meio de sinais GTK ou eventos do GDK, mas não sei como isso funciona.