Comment connaître ma résolution d'écran à partir d'un script shell?

48

Comment connaître ma résolution d'écran à partir d'un script shell?

dave4420
la source

Réponses:

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

La commande xdpyinfoaffiche diverses informations sur votre serveur X. Il écrit beaucoup de choses sur la sortie standard mais nous n’avons besoin que de la ligne commençant par le mot dimensions, nous l’utilisons donc grep. Enfin, nous utilisons sedpour nettoyer le résultat.

Communauté
la source
Si vous avez besoin des dimensions des axes x et y séparément, vous pouvez procéder comme suit. Tout d’abord, placez le résultat de la commande ci-dessus dans une variable utilisant la $( )syntaxe (ie DIMENSIONS=$(xdpyinfo ...). Puis utilisez à sednouveau pour obtenir les deux: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')et HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
Mneri
xdpyinfoimprime un message d'erreur s'il ne peut pas accéder aux informations, donc erreur de redirection vers /dev/null. Pour cette raison , vous pouvez ajouter une redirection d'erreur: xdpyinfo 2> /dev/null. Ainsi, la pleine Piple ressemble à ceci: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Cela rendra votre script plus solide.
Mneri
29

xdpyinfo | grep dimensionsvous donnera la résolution totale, si vous avez plusieurs écrans, ce sera la somme de tous. xrandr --currentvous donnera la résolution pour chaque moniteur.

J'utilise cet extrait pour trouver la résolution maximale possible pour rDesktop sans passer en plein écran:

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

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

Sortie:

Xaxis = 1280
Yaxis = 1024

Minus décoration de fenêtres (plus ou moins):

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

Sortie:

MaxRes = 1275x999

Quelle est la résolution maximale pour rDesktop sans passer en plein écran.

Fin de commande:

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

Cela fonctionne bien jusqu'à présent, mais je n'ai pas encore fait de tests approfondis.

Un autre exemple concerne le screencast avec avconv:

avconv -f x11grab -r 15 -s `xrandr --current | grep  '*' | uniq | awk '{print $1}'` -i :0.0 -c:v libx264 ./output.mp4
Eliezer E. Vargas
la source
il dit>xdpyinfo: Unable to open display "".
À Kra
Comment trouvez-vous les modes disponibles pour changer?
CMCDragonkai
Si vous n'avez pas besoin de soustraire pour la décoration de la fenêtre (etc.), vous pouvez le faire en une couche rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
24 heures
Ce n'est pas la somme pour plusieurs moniteurs. Ce sont les dimensions d'un cadre de sélection contenant tous les moniteurs.
Dennis Williamson
xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1si vous souhaitez spécifier un écran (avec une configuration multi-moniteur) ( SCREENindex 1)
SapuSeven
5

Vous pouvez utiliser la xrandr -qcommande. À partir de là, vous pouvez créer un script shell si nécessaire.

Pour plus d'informations sur la commande, cliquez ici ou tapez man xrandr

ricbax
la source
2
##############################################
## J'utilise ceci avec un programme d'enregistrement vidéo.
# taille de la fenêtre - option root - informations sur la fenêtre racine de l'écran
echo $ (xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
# sortie (s): 1024x768 + 0 + 0
# hauteur x largeur + x + y positions.
########################
## Manuel de référence ##
homme xwininfo
JimmyLandStudios
la source
J'ai utilisé xwininfo -root|sed '/Height/!d;s/.* //'pour la hauteur et la xwininfo -root|sed '/Width/!d;s/.* //'largeur.
Dessert
1

xdpyinfole fera, avec un peu d'analyse. Il donne beaucoup d'informations que vous devrez ensuite creuser le numéro d'écran, et les dimensions de

Rich Homolka
la source
1

Deux alternatives possibles produites combinant les réponses de @ user31752 et @ eliezer-e-vargas

Une regex plus simple:

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

ou en utilisant cut:

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

L’utilisation de grep '*' | uniqfrom @ eliezer-e-vargas permet d’obtenir une ligne différente (ex. "1440x900 59.90 * + 59.89") de la sortie xrandr, tandis que le grep 'connecté' en obtient une simple (ex. "LVDS1 connecté 1440x900 + 0 + 0 ..... ").

L'utilisation de regex par @ user31752 est agréable; la ligne que j'utilise nécessite donc une regex plus simple, ou peut être remplacée par la commande de coupe plus simple.

Exemple de sortie 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)
Campisano
la source
Y a-t-il une raison pour que quelqu'un utilise ces commandes au lieu de celles de la réponse d'Eliezer E. Vargas ?
Scott
Veuillez modifier cette information dans votre réponse.
Scott
0

Comme dans la réponse acceptée mais moins compliquée:

xdpyinfo | grep dimensions

Exemple de sortie:

dimensions:    1366x768 pixels (361x203 millimeters)
Billal Begueradj
la source
0

Lecture des données d'écran du moniteur

La norme vesa fournit une méthode permettant de lire la résolution de l'écran du moniteur.

Données d'identification des affichages étendus (EDID ): Cette norme définit les formats de données pour transporter les informations de configuration, permettant une utilisation optimale des affichages.

Un moniteur prend généralement en charge plusieurs résolutions et actualisations. Bien sûr, quelqu'un préférera le maximum (physique).

Pour lire ces données de moniteur, essayez l’une des solutions suivantes:

  • edid-decode

    S'il n'est pas installé, tapez

    sudo apt install edid-decode
    

    Puis lisez le edidfichier

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

    Installer avec

    sudo apt install read-edid 
    

    Lisez ensuite les données du moniteur à l’écran via i2c et analysez-les.

    sudo get-edid | parse-edid
    
  • Hexdump les données edid

    Si edid-tools n'est pas installé, vous pouvez vider le edidfichier hexadécimal, par exemple:

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

    Pour chiffrer ce fichier hexadécimal, jetez un œil à wiki ou téléchargez les spécifications edid .

abu_bua
la source