Respostas:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
O comando xdpyinfo
exibe 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 sed
para limpar o resultado.
xdpyinfo
imprime 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.
xdpyinfo | grep dimensions
fornecerá a resolução total; se você tiver vários monitores, será a soma de todos eles. xrandr --current
lhe 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
xdpyinfo: Unable to open display "".
rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}')
.
xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1
se você deseja especificar uma tela (com uma configuração de vários monitores) (com SCREEN
1 indexação)
#################################################### ## 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
xwininfo -root|sed '/Height/!d;s/.* //'
para altura e xwininfo -root|sed '/Width/!d;s/.* //'
largura.
xdpyinfo
vai 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
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)
Como na resposta aceita, mas menos complicada:
xdpyinfo | grep dimensions
Exemplo de saída:
dimensions: 1366x768 pixels (361x203 millimeters)
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 edid
arquivo
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 edid
arquivo 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 .
$( )
sintaxe (ou sejaDIMENSIONS=$(xdpyinfo ...
). Em seguida, usesed
novamente para obter os dois:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
eHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
.