¿Cómo puedo encontrar la resolución de pantalla de un script de shell?


Respuestas:


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

El comando xdpyinfomuestra diversa información sobre su servidor X. Escribe muchas cosas en la salida estándar, pero solo necesitamos que la línea comience con la palabra dimensions, por lo tanto, la usamos grep. Finalmente usamos sedpara limpiar el resultado.


Si necesita la dimensión del eje x e y por separado, puede hacer lo siguiente. Primero, coloque el resultado del comando anterior en una variable usando la $( )sintaxis (es decir DIMENSIONS=$(xdpyinfo ...). Luego, use sednuevamente para obtener los dos: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')y HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
mneri

xdpyinfoimprime un mensaje de error si no puede acceder a la información, por lo que la redirección de error a /dev/null. Por esta razón es posible que desee agregar una redirección de error: xdpyinfo 2> /dev/null. Por lo tanto, la piple completo es el siguiente: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Esto hará que tu script sea más sólido.
mneri

29

xdpyinfo | grep dimensionsle dará la resolución total, si tiene varios monitores será la suma de todos ellos. xrandr --currentle dará la resolución para cada monitor.

Utilizo este fragmento para encontrar la resolución máxima posible para rDesktop sin ir a pantalla completa:

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

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

Salida:

Xaxis = 1280
Yaxis = 1024

Decoración de ventanas menos (más o menos):

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

Salida:

MaxRes = 1275x999

¿Cuál es la resolución máxima para rDesktop sin pasar a pantalla completa?

Comando final:

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

Funciona bien hasta ahora, pero no he probado a fondo sin embargo.

Otro ejemplo es para screencast con avconv:

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

dice>xdpyinfo: Unable to open display "".
A Kra

¿Cómo descubre los modos disponibles para cambiar?
CMCDragonkai

Si no necesita restar la decoración de la ventana (etc.), puede hacerlo en una sola línea rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w

No es la suma de varios monitores. Son las dimensiones de un cuadro delimitador que contiene todos los monitores.
Dennis Williamson

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1si desea especificar una pantalla (con una configuración de varios monitores) ( SCREENestá indexada en 1)
SapuSeven

5

Podrías usar el xrandr -qcomando. A partir de eso, puede crear un script de shell si es necesario.

Para obtener más información sobre el comando, ingrese aquí o escriba man xrandr


2
#############################################
## Lo uso con un programa de grabación de video.
# tamaño de la ventana - opción de raíz - información sobre la ventana raíz de la pantalla
echo $ (raíz xwininfo | grep 'geometría' | awk '{print $ 2;}')
# salida (s): 1024x768 + 0 + 0
# altura x ancho + x + y posiciones.
######################
## Manual de referencia ##
hombre xwininfo

Solía xwininfo -root|sed '/Height/!d;s/.* //'por altura y xwininfo -root|sed '/Width/!d;s/.* //'por ancho.
postre

1

xdpyinfolo hará, con un poco de análisis. Da mucha información de la que luego tendrás que cavar el número de pantalla y las dimensiones de


1

Dos posibles alternativas producidas combinando las respuestas de @ user31752 y @ eliezer-e-vargas

Una expresión regular más simple:

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

o usando corte:

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

El uso de grep '*' | uniq@ eliezer-e-vargas obtiene una línea diferente (ej. "1440x900 59.90 * + 59.89") de salida xrandr, mientras que el grep 'conectado' obtiene uno simple (ej. "LVDS1 conectado 1440x900 + 0 + 0 ..... ").

El uso de expresiones regulares por @ user31752 es bueno, por lo que la línea que estoy usando necesita una expresión regular más simple, o puede sustituirse con el comando de corte más simple.

Ejemplo de salida 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)

¿Hay alguna razón para que alguien use estos comandos en lugar de los de la respuesta de Eliezer E. Vargas ?
Scott,

Por favor, editar esa información en su respuesta.
Scott,

0

Como en la respuesta aceptada pero menos complicada:

xdpyinfo | grep dimensions

Ejemplo de salida:

dimensions:    1366x768 pixels (361x203 millimeters)

0

Leer los datos de la pantalla del monitor

El estándar vesa proporciona un método para leer la resolución de la pantalla del monitor.

Datos de identificación de pantalla extendida (EDID ): este estándar define los formatos de datos para transportar información de configuración, lo que permite un uso óptimo de las pantallas.

Un monitor generalmente admite múltiples resoluciones y tasas de actualización. Por supuesto, alguien preferirá el máximo (físico).

Para leer los datos de este monitor, pruebe una de estas soluciones:

  • edid-decode

    Si no está instalado, escriba

    sudo apt install edid-decode
    

    Luego lee el edidarchivo

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

    Instalar con

    sudo apt install read-edid 
    

    Luego lea a través de i2c los datos del monitor de pantalla y analícelo

    sudo get-edid | parse-edid
    
  • Hexdump los datos edid

    En caso de que las herramientas edid no estén instaladas, puede volcar el edidarchivo hexadecimal, por ejemplo:

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

    Para cifrar este archivo hexadecimal, eche un vistazo a wiki o descargue las especificaciones edid .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.