Use o xvfb para automatizar o programa X

4

Eu originalmente postei essa pergunta aqui , mas pensando bem, decidi aqui era um lugar melhor para isso.

Eu infelizmente tenho que usar este programa proprietário que empacota um driver de câmera. Eu quero executar uma ação específica com ele, que envolve clicar em alguns botões. E não há CLI.

Então, qual é a maneira mais fácil de automatizar isso? Eu pensei em usar o xvfb para abrir o programa em um ambiente X falso, mas como eu faria para executar operações de entrada? Poderia ser clique em pixel em (x, y), mas seria ainda melhor se eu pudesse referenciar botões e itens de menu.

Se houver uma maneira mais simples de fazer isso, por favor, diga! Não tenho certeza se o xvfb é o método correto. Eu nem sei o nome real do que estou tentando realizar, então pesquisar é muito difícil ...

    
por Luan Nico 02.02.2016 / 11:49

1 resposta

6

Você pode usar xdotool que pode falsificar entradas de teclado / mouse, gerenciamento de janelas e muito mais.

Veja o script example.sh para xcalc "4*9=" , para ver a imagem do resultado da captura:

#!/usr/bin/env bash

save="$DISPLAY"                          # save original X display number
export DISPLAY=:44                       # set random choosen display for xvfb
case "$1" in                             #         and x-programs called below
  start) Xvfb $DISPLAY &   ;;            # starting xvfb server on :44
   calc) xcalc &           ;;            # run x-calculator
    xdo) xdotool mousemove 1 1 click 1   # focus with click on x:y=1:1
         xdotool key 4 asterisk 9        # calc 4*9
         xdotool key equal ;;            #         =
   show) #capture root window ('36' result image) and display it to saved Xno
         xwd -root | xwud -display $save &                                   ;;
   stop) ps auxww | grep "Xvfb $DISPLAY" | awk '{print $2}' | xargs kill     ;;
    all) DISPLAY=$save; $0 start; $0 calc; sleep 1; $0 xdo; $0 show; $0 stop ;;
esac

Observação: as opções individuais podem ser usadas para testes ou executadas com ./example.sh all .

    
por 02.02.2016 / 20:28