WMCTRL não funciona depois de iniciar o xfce4-terminal

1

Se eu digitar esses dois comandos em um terminal:

xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt
wmctrl -r dt -e 0,10,10,720,720

Eu obtenho o resultado desejado (posição e redimensionamento da janela com o título dt , notando que diferente de gnome-terminal , xfce4-terminal não reescreve títulos atribuídos manualmente)

Naturalmente, espero que isso funcione:

#! /bin/bash
xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt && wmctrl -r dt -e 0,10,10,720,720

O terminal é exibido com as configurações e título corretos, mas wmctrl não está tendo efeito algum.

    
por Juicy 02.11.2014 / 02:17

3 respostas

3

O operador de concatenação && faz com que o segundo comando não seja executado até que o primeiro comando ( xfce4-terminal ) saia (e somente se o status de saída indicar sucesso, pois é um operador lógico de curto-circuito).

Você deve obter o comportamento esperado se alterar && para ; ou simplesmente colocar o comando wmctrl em uma linha separada de seu script.

    
por 02.11.2014 / 02:48
2

Você executa o wmctrl diretamente após o comando xfce4-terminal sair. Mas se já houver uma instância aberta do Xfce Terminal, xfce4-terminal se coloca em segundo plano e imediatamente retorna o prompt de comando enquanto ainda está no processo de configuração da tela real do terminal. Então, quando o wmctrl for iniciado, a janela com o título rd pode não estar lá ainda.

Se você não precisar digitar o comando, como no exemplo com && , wmctrl será iniciado muito rápido. No primeiro exemplo, a digitação ou a seleção do histórico é um atraso suficiente para que a janela do terminal com o título correto esteja disponível.

Se você recortar e colar as duas entradas de linha de comando do primeiro exemplo, provavelmente encontrará o problema também.

Você deve colocar um comando sleep antes de invocar wmctrl . Você pode experimentar com a duração, 1 segundo deve ser suficiente como o título do terminal será definido antes do shell que é iniciado precisa ter processado seus arquivos de inicialização. (Se você iniciar o Firefox / Chrom com uma URL que precisa ser recuperada, esperar pelo título esperado pode levar vários segundos, e isso pode nunca acontecer quando houver erros de rede).

Para obter um comportamento uniforme, inicie xfce4-terminal em segundo plano para que ele não seja bloqueado, mesmo que seja a primeira vez que você inicia.

xfce4-terminal --hide-menubar --hide-borders --hide-toolbars --title=dt &
sleep 1
wmctrl -r dt -e 0,10,10,720,720
    
por 02.11.2014 / 06:22
0

A resposta de Anthon explica o que está acontecendo. Usando wmctrl para redimensionar ou mover uma janela após o fato é problemático; você precisa confiar em um temporizador, então a janela aparecerá na posição errada por um breve período e depois se moverá (ou, se a máquina estiver muito lenta, a janela não se moverá porque wmctrl é executado muito cedo). Além disso, você pode ter outra janela com o mesmo título (a menos que você gere títulos exclusivos garantidos, por exemplo, com uma string aleatória ou timestamp).

Felizmente, xfce4-terminal tem uma opção para definir sua posição inicial e tamanho. Ele segue a sintaxe de geometria X11 padrão. Use-o em vez de chamar wmctrl . Observe que o tamanho é expresso em células de caracteres, não em pixels.

xfce4-terminal --geometry 80x40+10+10 --hide-menubar --hide-borders --hide-toolbars --title=dt
    
por 02.11.2014 / 14:50