如何使用 xrandr --query 获取显示器宽度?

如何使用 xrandr --query 获取显示器宽度?

我有一个 shell 脚本,它循环通过 xrandr 来查找连接的监视器,这些监视器在变量内部分配。在该循环内,我想要另一个循环来确定所述连接的监视器的宽度。

我怎样才能做到这一点?

答案1

您可以使用任何您喜欢的工具(如 grep、awk 等)对 xrandr 的结果进行后期处理。

$ xrandr --query
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768      60.04*+
   1360x768      59.80    59.96  
VGA-1 disconnected (normal left inverted right x axis y axis)
SVIDEO-1 disconnected (normal left inverted right x axis y axis)

您可以获得“已连接”屏幕,例如:

$ xrandr --query |grep -w 'connected'
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
#With grep , the use -w means grep for a word.

或者使用 awk:

$ xrandr --query |awk '/\<connected\>/{print}'
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

使用 awk,您还可以从上面的输出中打印各种字段(awk 默认字段分隔符是空格):

$ xrandr --query |awk '/\<connected\>/{print $1}'
LVDS-1
$ xrandr --query |awk '/\<connected\>/{print $3}'
1366x768+0+0

或者您甚至可以要求 awk 使用自定义字段分隔符,例如空格、x 和 +:

$ xrandr --query |awk -F '[ x+]' '/\<connected\>/{print $1,$3,$4}'
LVDS-1 1366 768

那么处理所有连接的屏幕的最简单方法是使用数组:

$ IFS=$'\n' screens=( $(xrandr --query |awk -F '[ x+]' '/\<connected\>/{print $1,$3,$4}') )
$ for screen in "${screens[@]}";do
> echo "$screen" # or do whatever action you want to do with each screen
> done
LVDS-1 1366 768

相关内容