¿Cómo escribo un script Bash para autoajustar la resolución de la pantalla de Enlightenment 20 que se ejecuta en VirtualBox?

Me he dado count de que las adiciones de invitados de VirtualBox no pueden ajustar automáticamente la resolución de pantalla de Enlightenment 20 en algunas plataforms diferentes (incluyendo Arch Linux, Lubuntu y openSUSE Tumbleweed), ver por ejemplo esta publicación del foro Arch Linux que escribí y en consecuencia he estado usando el script (almacenado en ~/.bashrc ):

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

para ajustar la resolución de pantalla a pantalla completa. El problema es que a veces la altura de la pantalla del modo que quiero no es de 642px, por ejemplo, acabo de iniciar mi máquina virtual Tumbleweed openSUSE y la altura de la pantalla de este modo era 671px (haciendo el script corregido para ajustar la resolución de pantalla xrandr --output VGA-0 --mode 1366x671 ). Si la altura de la pantalla no coincide con 642px, entonces ejecutar xrandr --output VGA-0 --mode 1366x642 no puede ajustar la resolución de la pantalla y devuelve el post de error: xrandr: cannot find mode 1366x642 . La altura de la pantalla de este modo se puede determinar, sin embargo, ejecutando xrandr , que da la salida en mi MV de Tumblwe de 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 

Me preguntaba si sería posible filtrar la salida de xrandr para get el valor correcto de la altura de la pantalla que luego se puede pasar a xrandr --output VGA-0 --mode 1366x<HEIGHT> . Esta es la secuencia de commands que usaría (donde $H es la altura del modo, según lo determinado por el filter que esperaba).

 L=$(xrandr) H=f($L) # Where f(x) is the filter I am hoping for. xrandr --output VGA-0 --mode 1366x$H 

    Me parece que podrías 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 

    Aquí está el progtwig awk muy bien formateado:

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

    Comencé con un simple $3 == "+" , que parece captar la línea correcta, pero agregué algo de paranoia con $1 y $2 comprobando. La línea de print imprime una porción de $ 1: después de calcular la position de la "x" en las dimensiones, omitiendo un lugar más allá, se imprime desde allí hasta el final de $ 1.