Como obter a largura do monitor usando xrandr --query?

1

Eu tenho um script de shell, que percorre xrandr para encontrar monitores conectados, que são atribuídos dentro de uma variável. Dentro desse loop, eu quero ter outro loop que determina a largura dos monitores conectados.

Como posso fazer isso?

    
por Zclause 08.12.2017 / 07:46

1 resposta

0

Você pode apenas postar o processo dos resultados do xrandr usando qualquer uma das suas ferramentas favoritas como grep, awk, etc.

$ 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)

Você pode obter as telas "conectadas" como:

$ 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.

Ou com o awk:

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

Com o awk você também pode imprimir vários campos da saída acima (o delimitador de campos padrão do awk é o espaço em branco):

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

Ou você pode até pedir ao awk para usar um delimitador de campos customizado como space, xe +:

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

A maneira mais fácil de processar todas as telas conectadas é usar uma matriz:

$ 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
    
por 09.12.2017 / 20:58