如何编写 Bash 脚本来自动调整 VirtualBox 下运行的 Enlightenment 20 的屏幕分辨率?

如何编写 Bash 脚本来自动调整 VirtualBox 下运行的 Enlightenment 20 的屏幕分辨率?

我注意到 VirtualBox 来宾添加无法在几个不同平台(包括 Arch Linux、Lubuntu 和 openSUSE Tumbleweed)上自动调整 Enlightenment 20 的屏幕分辨率,请参见示例我写的 Arch Linux 论坛帖子,因此我一直在使用该脚本(存储在~/.bashrc):

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

将屏幕分辨率调整为全屏。问题是,有时我想要的模式的屏幕高度不是 642px,例如我刚刚启动我的 openSUSE Tumbleweed VM,该模式的屏幕高度是 671px(制作用于调整屏幕分辨率的更正脚本xrandr --output VGA-0 --mode 1366x671)。如果屏幕高度不匹配 642px 则运行xrandr --output VGA-0 --mode 1366x642无法调整屏幕分辨率并返回错误消息:xrandr: cannot find mode 1366x642。不过,可以通过运行 来确定此模式的屏幕高度xrandr,这会在我的 openSUSE Tumbleweed VM 中给出输出:

    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

我想知道是否可以过滤 的输出,xrandr以获得正确的屏幕高度值,然后将其传递给xrandr --output VGA-0 --mode 1366x<HEIGHT>.这是我将使用的脚本(其中$H是模式高度,由我希望的过滤器确定)。

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

答案1

在我看来你可以使用:

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

以下是格式良好的 awk 程序:

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

我从一个简单的开始$3 == "+",它似乎抓住了正确的线,但我添加了一些偏执$1$2检查。该print行打印 $1 的一部分:计算维度中“x”的位置后,跳过一个位置,从那里打印到 $1 的末尾。

相关内容