Como descubro minha resolução de tela a partir de um script de shell?


Respostas:


55
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'

O comando xdpyinfoexibe várias informações sobre o seu servidor X. Ele escreve muitas coisas na saída padrão, mas precisamos apenas da linha que começa com a palavra e dimensions, portanto, usamos grep. Finalmente, usamos sedpara limpar o resultado.


Se você precisar das dimensões dos eixos x e y separadamente, faça o seguinte. Primeiro, coloque o resultado do comando acima em uma variável usando a $( )sintaxe (ou seja DIMENSIONS=$(xdpyinfo ...). Em seguida, use sednovamente para obter os dois: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')e HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
15137 mneri

xdpyinfoimprime uma mensagem de erro se não puder acessar informações, portanto, redirecione o erro para /dev/null. Por esta razão, você pode querer adicionar um redirecionamento de erro: xdpyinfo 2> /dev/null. Assim, o piple completo fica assim: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Isso tornará seu script mais sólido.
15137 mneri

29

xdpyinfo | grep dimensionsfornecerá a resolução total; se você tiver vários monitores, será a soma de todos eles. xrandr --currentlhe dará a resolução para cada monitor.

Eu uso esse snippet para encontrar a resolução máxima possível para o rDesktop sem ir para a tela cheia:

Xaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f1)

Yaxis=$(xrandr --current | grep '*' | uniq | awk '{print $1}' | cut -d 'x' -f2)

Resultado:

Xaxis = 1280
Yaxis = 1024

Menos decoração de janelas (mais ou menos):

MaxRes=$(($Xaxis-5))"x"$(($Yaxis-25))

Resultado:

MaxRes = 1275x999

Qual é a resolução máxima para o rDesktop sem passar em tela cheia.

Comando final:

rdesktop -u $User -P -z -5 -g $MaxRes $Host &

Até agora, funciona bem, mas ainda não testei completamente.

Outro exemplo é para screencast com avconv:

avconv -f x11grab -r 15 -s `xrandr --current | grep  '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4

ele diz>xdpyinfo: Unable to open display "".
Para Kra

Como você descobre os modos disponíveis para os quais mudar?
CMCDragonkai

Se você não precisar subtrair a decoração da janela (etc), faça isso de uma só vez rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
C24w # 12/16

Não é a soma de vários monitores. São as dimensões de uma caixa delimitadora que contém todos os monitores.
Dennis Williamson

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1se você deseja especificar uma tela (com uma configuração de vários monitores) (com SCREEN1 indexação)
SapuSeven

5

Você poderia usar o xrandr -qcomando A partir disso, você pode criar um script de shell, se necessário.

Para obter mais informações sobre o comando, clique aqui ou digite man xrandr


2
####################################################
## Eu uso isso com um programa de gravação de vídeo.
# window size --root option - informações na janela raiz da tela
echo $ (xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
# saída (s): 1024x768 + 0 + 0
# altura x largura + x + posições y.
######################
## Manual de referencia ##
homem xwininfo

Eu usei xwininfo -root|sed '/Height/!d;s/.* //'para altura e xwininfo -root|sed '/Width/!d;s/.* //'largura.
dessert

1

xdpyinfovai fazer isso, com algumas análises. Ele fornece muitas informações, das quais você terá que cavar o número da tela e as dimensões de


1

Duas alternativas possíveis produzidas combinando as respostas de @ user31752 e @ eliezer-e-vargas

Um regex mais simples:

$ xrandr --current | sed -n 's/.* connected \([0-9]*\)x\([0-9]*\)+.*/\1x\2/p'
1440x900

ou usando corte:

$ xrandr --current | grep ' connected ' | cut -d ' ' -f 3 | cut -d '+' -f 1
1440x900

O uso de grep '*' | uniq@ eliezer-e-vargas obtém uma linha diferente (ex. "1440x900 59,90 * + 59,89") de saída xrandr, enquanto o grep 'conectado' obtém uma linha simples (ex. "LVDS1 conectado 1440x900 + 0 + 0 ..... ").

O uso de regex por @ user31752 é bom; portanto, a linha que estou usando precisa de um regex mais simples ou pode ser substituído pelo comando de corte mais simples.

Exemplo de saída xrandr

$ xrandr --current
Screen 0: minimum 320 x 200, current 1440 x 900, maximum 8192 x 8192
LVDS1 connected 1440x900+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
   1440x900      59.90*+  59.89  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1024x768      60.00  
   800x600       60.32    56.25  
   640x480       59.94  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

Existe alguma razão para alguém usar esses comandos em vez dos da resposta de Eliezer E. Vargas ?
Scott

Por favor editar essa informação em sua resposta.
Scott

0

Como na resposta aceita, mas menos complicada:

xdpyinfo | grep dimensions

Exemplo de saída:

dimensions:    1366x768 pixels (361x203 millimeters)

0

Lendo os dados da tela do monitor

O padrão vesa fornece um método para ler a resolução da tela do monitor.

Dados estendidos de identificação de exibição (EDID ): esse padrão define os formatos de dados para transportar informações de configuração, permitindo o uso ideal dos displays.

Um monitor geralmente suporta várias resoluções e atualizações. É claro que alguém prefere o máximo (físico).

Para ler esses dados do monitor, tente uma destas soluções:

  • edid-decode

    Se não estiver instalado, digite

    sudo apt install edid-decode
    

    Então leia o edidarquivo

    edid-decode /sys/class/drm/card0-eDP-1/edid
    
  • read-edid

    Instale com

    sudo apt install read-edid 
    

    Em seguida, leia via i2c os dados do monitor de tela e analise-os

    sudo get-edid | parse-edid
    
  • Hexdump os dados edid

    Caso o edid-tools não esteja instalado, você pode despejar o edidarquivo hexadecimal, por exemplo:

    hd /sys/class/drm/card0-eDP-1/edid
    

    Para criptografar esse arquivo hexadecimal, consulte o wiki ou faça o download das especificações edid .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.