Script para maximizar um aplicativo quando ele é iniciado

0

Estou ciente de que esta questão está duplicada:
Como definir o tamanho da janela e localização de um aplicativo na tela via linha de comando?
Resizing de uma janela maximizada a partir da linha de comando

Consegui resolver a minha questão com o primeiro link. Mas estou lutando para aprender a linguagem Bash e gostaria de saber o que está errado com o seguinte script:

#!/bin/bash

xfce4-settings-manager & sleep 0.1
xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'}
wmctrl -i -r $1 -b add,maximized_vert,maximized_horz &

Depois de executar o script, eu marquei que "xwininfo" recebe outro valor de ID do aplicativo. Eu não entendo porque. Alguém pode me dar uma mão com esse problema?

Obrigado antecipadamente.

    
por joshsoj 04.03.2017 / 10:43

3 respostas

2

A ferramenta que você está procurando é Devil's Pie (versão 1 e versão 2, note que eles usam linguagens de configuração completamente diferentes). Existem vários exemplos neste site, por ex. 1 2 3 4 .

O problema com o seu script já foi identificado por Jeff Schaller em um comentário: a linha que extrai a saída de xwininfo não conecta na linha que chama wmctrl . Para usar a saída de um comando em um script, use uma substituição de comando .

windowid=$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}')
wmctrl -i -r "$windowid" -b add,maximized_vert,maximized_horz &

Eu usei uma variável intermediária para evitar que a linha se tornasse muito longa, mas você pode fazer tudo em linha:

wmctrl -i -r "$(xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}')" -b add,maximized_vert,maximized_horz &

Eu também combinei as invocações grep e awk, acho mais simples usar uma única ferramenta aqui.

Você não precisa usar xwininfo para encontrar o ID da janela: wmctrl pode fazer isso, apenas passe o nome da janela.

wmctrl -r "xfce4-settings-manager" -b add,maximized_vert,maximized_horz &
    
por 04.03.2017 / 16:43
1

Como você quer:

the result of the second line is retrieved by $1 of the third line

você poderia:

#!/bin/bash

xfce4-settings-manager & sleep 0.1
wid=$(xwininfo -name "xfce4-settings-manager" | grep xwininfo: | awk {'printf$4'})
wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz &

embora se eu pudesse sugerir outra versão (não testada, já que não estou na frente de um display X):

#!/bin/bash

xfce4-settings-manager & 
while ! pgrep xfce4-settings-manager > /dev/null
do
  :
done
wid=$(xwininfo -name "xfce4-settings-manager" | awk '/xwininfo:/ { print $4 }')
wmctrl -i -r "$wid" -b add,maximized_vert,maximized_horz

Mudanças:

  • Não tenho certeza se o wmctrl precisa ser colocado em segundo plano, por isso removi esse &
  • combinei o awk e o grep, porque o awk pode "grep"
  • Eu mudei o sleep 0.1 , que assume que xfce4-settings-manager começa nesse período de tempo, em um loop que solicita que pgrep procure pelo processo
por 04.03.2017 / 16:49
0

Obrigado por responder. Eu tentei fazer o que @Gilles e @Jeff explicaram nos comentários acima, mas o script não funciona. Tem o mesmo problema que mencionei na minha primeira mensagem.

Deixe-me explicar o que está acontecendo (linha por linha):

  1. O script inicia o "xfce4-settings-manager"

    USER@PC:~$ xfce4-settings-manager & sleep 0.1 ;

[3] 9825

  1. Requer o valor da janela "xfce4-settings-manager". Neste exemplo, quero apenas o resultado da saída. No roteiro eu escrevi como Gilles e Jeff me disseram.

    USER@PC:~$ xwininfo -name "xfce4-settings-manager" | awk '$1 == "xwininfo:" {printf $4}' 0x5400001

  2. Eu incluo o valor da janela no último comando (0x5400001), mas a janela não é maximizada.

    USER@PC:~$ wmctrl -i -r 0x5400001 -b add,maximized_vert,maximized_horz

[4] 9852

  1. Eu corro o comando "xwininfo" e seleciono a janela "xfce4-settings-manager" e este é o resultado:

    USER@PC:~$ xwininfo

xwininfo: Please select the window about which you would like information by clicking the mouse in that window.

xwininfo: Window id: 0x5800003 "Settings"

Absolute upper-left X: 343

Absolute upper-left Y: 286

Relative upper-left X: 5

Relative upper-left Y: 19

Width: 680

Height: 195

Depth: 24

Visual: 0x20

Visual Class: TrueColor

Border width: 0

Class: InputOutput

Colormap: 0x22 (installed)

Bit Gravity State: NorthWestGravity

Window Gravity State: NorthWestGravity

Backing Store State: NotUseful

Save Under State: no

Map State: IsViewable

Override Redirect State: no

Corners: +343+286 -343+286 -343-287 +343-287

-geometry 680x195+338+267

[2] Done xfce4-settings-manager

[4]+ Done wmctrl -i -r 0x5400001 -b add,maximized_vert,maximized_horz

O valor da janela "xfce4-settings-manager" é diferente dependendo da recuperação do valor da linha de comando ou da seleção da janela com o cursor (0x5400001 & 0x5800003).

Alguma idéia?

    
por 05.03.2017 / 11:12