Executar script quando foca/desfoca um app - Avançado/Terminal - Diolinux Plus
Executar script quando foca/desfoca um app
KuroiNihonjin Dezembro 12, 2021, 2:18am #1
Tenho uma mesa digitalizadora da Huion com 6 botões, criei um script para alguns programas que uso, constando um conjunto de atalhos para cada botão da mesa e gostaria de executar o script quando foco no aplicativo.
Exemplo: Quando focar na tela do Gimp, executar o script com os atalhos do GImp;
Quando focar na tela do Libresprite, executar o script com os atalhos do Libresprite;
Quando nenhum deles estão com foco, executar o script com atalhos para o Desktop.
Resumindo, quero fazer como os programas de drivers do windows, que permitem que consiga setar conjunto de atalhos para cada programa e como não encontrei um aplicativo similar para o linux, queria fazer através de scripts (mas não tenho conhecimento ainda para isso e não encontrei solução em pesquisas na internet)
Capezotte Dezembro 12, 2021, 3:11am #2
Você pode usar comando xdotool getactivewindow getwindowclassname dentro de seja qual for o script que está utilizando aí para obter o nome do programa focado, e a partir disso construir uma condição.
case "$(xdotool getactivewindow getwindowclassname)" in
coisas_do_gimp
(Libresprite)
coisas_do_libresprite
coisas_de_nenhum_dos_dois
Note que eu não garanto que os nomes aí estão certos (até mesmo maiúsculas e minúsculas afetam).
Uma maneira de verificar os nomes seria rodar sleep 5 && xdotool getactivewindow getwindowclassname dentro de um terminal para esperar 5 segundos (sleep 5) e em seguida (&&) emitir o nome da janela ativa (xdotool getactivewindow getwindowclassname). Nesse intervalo de 5 segundos, você ia focar na janela cujo nome quer descobrir.
KuroiNihonjin Dezembro 12, 2021, 9:32am #3
@Capezotte era isso mesmo!
O único ponto é que o getwindowclassname não funciona. O getwindowname funciona no lugar (Não sei se estou em uma versão mais nova ou mais antiga do xdotool).
Acrescentei também um "*" antes do nome do programa, pois como a janela altera para o nome do arquivo em uso, não executou corretamente (assim como você pontuou).
Coloquei também os comandos dentro de um while para sempre ficar rodando o script. Tenho 99,99% de certeza que fiz da maneira errada, mas não matei meu sistema ainda, então está tranquilo rs.
o script para meu uso ficou assim
case "$(xdotool getactivewindow getwindowname)" in
(*"GIMP")
sh /home/maycon/.config/scripts/gimp.sh
(*"LibreSprite v1.0")
sh /home/maycon/.config/scripts/libresprite.sh
sh /home/maycon/.config/scripts/desktop.sh
Irei incluir os outros apps a medida que for usando, pois não configurei os atalhos para eles ainda.
Muito obrigado! Fiquei quase duas semanas procurando por essa solução e você veio mais rápido que a luz do sol e me ajudou. vlw mesmo!