Como eu escrevo um script Bash para auto-ajustar a resolução da tela do Enlightenment 20 em execução no VirtualBox? [fechadas]

2

Eu notei que as adições de convidados do VirtualBox não ajustam automaticamente a resolução da tela do Enlightenment 20 em algumas plataformas diferentes (incluindo Arch Linux, Lubuntu e openSUSE Tumbleweed), veja por exemplo este post no forum do Arch Linux eu escrevi e consequentemente eu tenho usado o script (armazenado em ~/.bashrc ):

xrandr --output VGA-0 --mode 1366x642

para ajustar a resolução da tela para tela cheia. O problema é que às vezes a altura da tela do modo que eu quero não é 642px, por exemplo eu comecei a minha VM openSUSE Tumbleweed e a altura da tela deste modo era 671px (fazendo o script corrigido para ajustar a resolução da tela xrandr --output VGA-0 --mode 1366x671 ) . Se a altura da tela não corresponder a 642px, a execução de xrandr --output VGA-0 --mode 1366x642 não ajustará a resolução da tela e retornará a mensagem de erro: xrandr: cannot find mode 1366x642 . A altura da tela desse modo pode ser determinada, no entanto, executando xrandr , que fornece a saída em minha VM do Tumbleweed do openSUSE:

    Screen 0: minimum 64 x 64, current 800 x 600, maximum 32766 x 32766
VGA-0 connected primary 800x600+0+0 0mm x 0mm panning 800x600+0+0
   1366x671      60.00 +
   2560x1600     60.00
   2560x1440     60.00
   2048x1536     60.00
   1920x1600     60.00
   1920x1080     60.00
   1600x1200     60.00
   1680x1050     60.00
   1400x1050     60.00
   1280x1024     60.00
   1024x768      60.00
   800x600       60.00*
   640x480       60.00

Eu queria saber se seria possível filtrar a saída de xrandr para obter o valor correto da altura da tela, que pode então ser passada para xrandr --output VGA-0 --mode 1366x<HEIGHT> . Este é o script que eu usaria (onde $H é a altura do modo, conforme determinado pelo filtro que eu esperava).

L=$(xrandr)
H=f($L) # Where f(x) is the filter I am hoping for. 
xrandr --output VGA-0 --mode 1366x$H
    
por Brenton Horne 21.12.2015 / 12:46

1 resposta

0

Parece-me que você poderia usar:

H=$(xrandr | awk '$1 ~ /^[[:digit:]]+x[[:digit:]]+$/ && $2 ~ /^[[:digit:]]+\.[[:digit:]]+$/ && $3 == "+" { print substr($1, index($1, "x")+1) }')
xrandr --output VGA-0 --mode 1366x$H

Aqui está o programa awk bem formatado:

'$1 ~ /^[[:digit:]]+x[[:digit:]]+$/ && \
 $2 ~ /^[[:digit:]]+\.[[:digit:]]+$/ && \
 $3 == "+" \ 
 { print substr($1, index($1, "x")+1) }'

Comecei com um simples $3 == "+" , que parece pegar a linha correta, mas adicionei alguma paranoia com $1 e $2 checking. A linha print imprime uma porção de $ 1: depois de computar a posição do "x" nas dimensões, pulando um lugar após ela, imprime a partir daí até o final de $ 1.

    
por 26.02.2017 / 01:37