Para posicionar uma janela, você pode usar uma ferramenta que manipule eventos X, como xdotool
ou wmctrl
. Por exemplo, com wmctrl
, você pode usar -e
:
-e <MVARG>
Resize and move a window that has been specified with a -r
action according to the <MVARG> argument.
<MVARG>
A move and resize argument has the format 'g,x,y,w,h'. All five
components are integers. The first value, g, is the gravity of
the window, with 0 being the most common value (the default
value for the window). Please see the EWMH specification for
other values.
The four remaining values are a standard geometry specification:
x,y is the position of the top left corner of the window, and
w,h is the width and height of the window, with the exception
that the value of -1 in any position is interpreted to mean that
the current geometry value should not be modified.
Normalmente, você pode ignorar a gravidade, portanto, para colocar uma janela no canto superior esquerdo da tela e torná-la 1200 x 700 pixels, execute:
wmctrl -r :ACTIVE: -e 1,1,1,1200,700
O -r
permite selecionar uma janela e :ACTIVE:
significa a janela atualmente focada.
Você também pode simplificar seu script. Não há razão para analisar ps
, a variável especial $!
contém o PID do trabalho colocado mais recentemente em segundo plano. Em qualquer caso, a análise ps
geralmente falhará, pois pode haver vários processos correspondentes a Thesis.pdf
. Sempre haverá dois: o evince
e o grep Thesis.pdf
que você acabou de executar.
Então, com tudo isso em mente, você poderia fazer:
#! /bin/bash
while true; do
## Open the pdf
evince ~/doc/a.pdf &
## Save the PID of evince
pid="$!"
## Wait for a 1.5 seconds. This is to give the window time to
## appear. Change it to a higher value if your system is slower.
sleep 1.5
## Get the X name of the evince window
name=$(wmctrl -lp | awk -vpid="$pid" '$3==pid{print $1}')
## Position the window
wmctrl -ir "$name" -e 1,1,1,1200,700
## Wait
sleep 5m
## Close it
kill "$pid"
done
Observe que eu removi o exit 0
porque, devido ao seu while true
, ele nunca será alcançado e não faz sentido. Você pode brincar com os argumentos posicionais para descobrir onde deseja colocar a janela.
Por fim, uma observação sobre DISPLAY
. Essas variáveis apontam para um display X. Esta não é uma tela, é o servidor X ativo. Muitos usuários podem estar executando servidores X paralelos em uma única máquina, isso permite escolher em qual deles uma janela deve ser exibida. Não tem absolutamente nada a ver com quantas telas físicas estão conectadas, a menos que cada tela esteja executando uma sessão X separada.