Os comandos de configuração do monitor não funcionam no script

2

Estou executando o Arch Linux 64-bit em um Samsung RV511. Costumo conectar monitores externos usando xrandr . Enquanto executo o LXDE com o Awesome como gerenciador de janelas, eu preciso preparar o comando xrandr matando certos elementos GUI e os reiniciando depois para posicioná-los corretamente.

Aqui está o meu script:

#!/bin/sh
# kill conky and lxpanel
killall lxpanel
killall conky

# set monitor
xrandr --output LVDS1 --mode 1366x768 --pos 1680x282 --output VGA1 --mode  1680x1050 --pos 0x0 

# restart awesome
killall -HUP awesome

# restart lxpanel and conky
lxpanel -p LXDE &
conky &

Agora estou me deparando com um problema estranho. Quando executo todos os comandos acima na mesma sequência da linha de comando, obtenho uma configuração de monitor limpa. No entanto, quando executo o script, a interface gráfica falha, deixando um padrão estranho de elementos de papel de parede e painel. Eu recebo o mesmo problema se eu iniciar o comando xrandr sem ter matado o lxpanel primeiro, e é por isso que eu suponho que o comando xrandr de alguma forma não "aguarda" os comandos kill?

Ou existe um motivo diferente?

Editar: adicionando sleep 3 entre os blocos de código resolveu o problema, embora eu ainda não tenha idéia do problema básico. Enfim, aqui está o meu script atual para referência futura:

#!/bin/bash

# kill conky and lxpanel
killall lxpanel
killall conky
sleep 4

# set monitor
xrandr --output LVDS1 --mode 1366x768 --pos 1680x282 --output VGA1 --mode  1680x1050 --pos 0x0 
sleep 4

# restart awesome
killall -HUP awesome

# restart lxpanel and conky
sleep 4
lxpanel -p LXDE &
conky &

Post-Edit: O problema não pode ser considerado completamente resolvido, afinal. Às vezes eu tenho que kill xinit após a inicialização e startx novamente para que funcione. Parece haver algum problema relacionado a tempo de atividade. Escusado será dizer que não tenho ideia do que.

    
por Levent B. 11.02.2014 / 08:58

1 resposta

1

Os primeiros 4 comandos devem acontecer em seqüência e o próximo não deve ser executado até que o anterior seja concluído. Como você está usando os últimos dois comandos, sou tentado a inserir uma declaração de suspensão lá. Usar um sono dessa maneira é um truque, mas permite que você confirme sua teoria brincando com a quantidade de tempo para dormir. Como ele está trabalhando em um shell interativo, eu não esperaria mais do que um sono de talvez 5 ou mais para começar.

lxpanel -p LXDE &
sleep 5
conky &

Existem métodos melhores, como esperar que algum resultado seja retornado de lxpanel , o que significa que está funcionando, mas não estou familiarizado com lxpanel .

    
por 11.02.2014 / 09:18