我注意到 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 的末尾。