Como detectar a proporção do monitor?

2

Como você detecta o aspect ratio do seu monitor? Eu tentei:

root@malou-laptop:/home/liv# xrandr -q
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 640 x 480, current 1680 x 1050, maximum 1680 x 1050
default connected 1680x1050+0+0 0mm x 0mm
   1680x1050      60.0* 
   1280x1024      61.0  
   1280x800        0.0  
   1024x768       61.0  
   800x600        61.0  
   640x480        60.0  

E descobri que você pode calculá-lo por 1680:1050 = 1.6 = 16:10 ou marcando a lista Resolução da exibição em Wikipédia.

Mas existe um comando que produza isso de forma satisfatória? Eu já tentei lshw e hardinfo , sem sorte.

    
por landroni 28.01.2014 / 22:33

2 respostas

5

Você mesmo encontrou o comando, só precisa analisá-lo. Por exemplo:

$ xrandr -q | grep -Po 'current\s*\d+\s*x\s*\d+' | awk '{print $1/$3}'

A expressão regular procura current , 0 ou mais caracteres em branco ( \s* ), um ou mais dígitos ( \d+ ) seguidos por \s* , depois x e \s* e finalmente mais dígitos. O \K simplesmente descarta tudo o que foi correspondido até esse ponto:

$ xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+'
1680 x 1050

Então, você passa isso para gawk , que irá se dividir em campos no espaço em branco e imprimir o resultado do segundo campo dividido pelo quarto.

A melhor maneira é obter a lista da wikipedia e simplesmente colá-la em um arquivo de texto (certifique-se as abas entre os campos são copiadas corretamente):

$ cat resolutions.txt
VGA 4:3 640 480 00.02   n/a
SVGA    4:3 800 600 00.17   01.03
WSVGA   ~17:10  1024    600 00.31   02.25
XGA 4:3 1024    768 05.53   18.69
XGA+    4:3 1152    864 00.87   01.55
WXGA    16:9    1280    720 01.51   01.54
WXGA    5:3 1280    768 n/a 01.54
WXGA    16:10   1280    800 04.25   12.97
SXGA– (UVGA)    4:3 1280    960 00.72   00.72
SXGA    5:4 1280    1024    10.66   07.49
HD  ~16:9   1360    768 02.36   02.28
HD  ~16:9   1366    768 17.19   19.14
SXGA+   4:3 1400    1050    00.18   n/a
WXGA+   16:10   1440    900 07.60   06.61
HD+ 16:9    1600    900 06.82   03.82
UXGA    4:3 1600    1200    00.53   n/a
WSXGA+  16:10   1680    1050    10.26   03.66
FHD 16:9    1920    1080    25.04   05.09
WUXGA   16:10   1920    1200    03.65   01.11
QWXGA   16:9    2048    1152    00.13   n/a
WQHD    16:9    2560    1440    00.72   00.36
WQXGA   16:10   2560    1600    00.19   n/a
    3:4 768 1024    n/a 01.93
    16:9    1093    614 n/a 00.63
    ~16:9   1311    737 n/a 00.35
Other               01.29   07.25

Agora, use esse arquivo para obter o valor necessário:

$ grep -Po 'current\s*\K\d+\s*x\s*\d+' a | sed 's/ *x */ /' | 
    while read x y; do 
     grep "$x" resolutions.txt | grep "$y" | awk -F"\t" '{print $2}'; 
  done 
16:10

Por fim, transforme isso em um pequeno roteiro:

#!/usr/bin/env bash

## The location of the file with the resolutions
RESOLUTIONS="$HOME/resolutions.txt" 

xrandr -q | grep -Po 'current\s*\K\d+\s*x\s*\d+' | sed 's/ *x */ /' | 
while read x y; do 
    grep "$x" "$RESOLUTIONS" | grep "$y" | awk -F"\t" '{print $2}'; 
done 

Salve o script em algum lugar em seu $ PATH e, em seguida, execute-o para obter a resolução:

$ get_resolution.sh
16:10
    
por 28.01.2014 / 22:51
0

Se você precisar dele para algum script, não apenas para sua curiosidade, você pode sed / awk xrandr output para este valor e calculá-lo pelo menor algoritmo múltiplo comum.

No entanto, por ex. para 16:10 será 8: 5 (é matematicamente correto, mas não como estamos acostumados. Então pode ser mais simples combiná-lo em algum tipo de tabela associativa.

    
por 28.01.2014 / 22:51