Wie finde ich meine Bildschirmauflösung aus einem Shell-Skript heraus?

48

Wie finde ich meine Bildschirmauflösung aus einem Shell-Skript heraus?

dave4420
quelle

Antworten:

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

Der Befehl xdpyinfozeigt verschiedene Informationen zu Ihrem X-Server an. Es schreibt viele Dinge in die Standardausgabe, aber wir brauchen nur die Zeile, die mit dem Wort beginnt dimensions, also verwenden wir grep. Schließlich verwenden wir, sedum das Ergebnis zu reinigen.

Gemeinschaft
quelle
Wenn Sie die X- und Y-Achsenbemaßung separat benötigen, können Sie Folgendes tun. Setzen Sie zuerst das Ergebnis des obigen Befehls mithilfe der $( )Syntax (dh DIMENSIONS=$(xdpyinfo ...) in eine Variable . Verwenden Sie dann sederneut, um die beiden zu erhalten: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')und HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
Mneri
xdpyinfoGibt eine Fehlermeldung aus, wenn kein Zugriff auf Informationen möglich ist. Fehlerumleitung an /dev/null. Aus diesem Grund können Sie einen Fehler Umleitung hinzuzufügen: xdpyinfo 2> /dev/null. So sieht die volle piple wie folgt aus : xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Dadurch wird Ihr Skript stabiler.
Mneri
29

xdpyinfo | grep dimensionsgibt Ihnen die Gesamtauflösung, wenn Sie mehrere Monitore haben, ist es die Summe von allen. xrandr --currentgibt Ihnen die Auflösung für jeden Monitor.

Ich verwende dieses Snippet, um die maximal mögliche Auflösung für rDesktop zu finden, ohne in den Vollbildmodus zu wechseln:

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

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

Ausgabe:

Xaxis = 1280
Yaxis = 1024

Minus Fensterdekoration (mehr oder weniger):

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

Ausgabe:

MaxRes = 1275x999

Welches ist die maximale Auflösung für rDesktop ohne Vollbild.

Befehl beenden:

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

Bisher funktioniert es einwandfrei, aber ich habe es nicht gründlich getestet.

Ein weiteres Beispiel ist für einen Screencast mit 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
quelle
es heißt>xdpyinfo: Unable to open display "".
Kra
Wie finden Sie heraus, in welche Modi Sie wechseln können?
CMCDragonkai
Wenn Sie für die Fensterdekoration (usw.) nicht abziehen müssen, können Sie dies in einem Einzeiler tun rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w
Dies ist nicht die Summe für mehrere Monitore. Es sind die Abmessungen eines Begrenzungsrahmens, der alle Monitore enthält.
Dennis Williamson
xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1Wenn Sie einen Bildschirm angeben möchten (mit einem Multi-Monitor-Setup) ( SCREENist 1-indiziert)
SapuSeven
5

Sie könnten den xrandr -qBefehl verwenden. Daraus können Sie bei Bedarf ein Shell-Skript erstellen.

Weitere Informationen zum Befehl finden Sie hier oder geben Sie man xrandr ein

Ricbax
quelle
2
#############################################
## Ich benutze dies mit einem Videoaufzeichnungsprogramm.
# Fenstergröße - Root-Option - Informationen zum Root-Fenster des Bildschirms
echo $ (xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
# Ausgabe (n): 1024 x 768 + 0 + 0
# Höhe x Breite + x + y Positionen.
######################
## Reference Manual ##
Mann xwininfo
JimmyLandStudios
quelle
Ich habe xwininfo -root|sed '/Height/!d;s/.* //'für die Höhe und xwininfo -root|sed '/Width/!d;s/.* //'für die Breite verwendet.
Dessert
1

xdpyinfowerde es tun, mit etwas Analyse. Es gibt viele Informationen, von denen Sie dann die Bildschirmnummer und die Abmessungen abgraben müssen

Reiche Homolka
quelle
1

Zwei mögliche Alternativen ergaben sich aus der Kombination der Antworten von @ user31752 und @ eliezer-e-vargas

Ein einfacher regulärer Ausdruck:

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

oder mit cut:

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

Bei Verwendung grep '*' | uniqvon @ eliezer-e-vargas wird eine andere Zeile (z. B. "1440x900 59.90 * + 59.89") der xrandr-Ausgabe ausgegeben, während bei Verwendung von grep "connected" eine einfache Zeile (z. B. "LVDS1 connected 1440x900 + 0 + 0") ausgegeben wird ..... ").

Die Verwendung von Regex durch @ user31752 ist nett, daher benötigt die von mir verwendete Zeile einen einfacheren Regex oder kann durch den einfacheren Befehl cut ersetzt werden.

Beispiel für eine xrandr-Ausgabe

$ 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
quelle
Gibt es einen Grund für jemanden, diese Befehle anstelle der in der Antwort von Eliezer E. Vargas angegebenen zu verwenden ?
Scott
Bitte bearbeiten Sie diese Informationen in Ihre Antwort.
Scott
0

Wie in der akzeptierten Antwort, aber weniger kompliziert:

xdpyinfo | grep dimensions

Ausgabebeispiel:

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

Bildschirmdaten lesen

Der vesa-Standard bietet eine Methode zum Lesen der Bildschirmauflösung.

Extended Display Identification Data (EDID ): Dieser Standard definiert Datenformate für Konfigurationsinformationen, um eine optimale Nutzung der Anzeigen zu ermöglichen.

Ein Monitor unterstützt normalerweise mehrere Auflösungen und Aktualisierungen. Natürlich wird jemand das Maximum (physisch) bevorzugen.

Versuchen Sie eine der folgenden Lösungen, um diese Monitordaten zu lesen:

  • edid-decode

    Wenn nicht installiert, geben Sie ein

    sudo apt install edid-decode
    

    Dann lies die edidDatei

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

    Installieren Sie mit

    sudo apt install read-edid 
    

    Dann über i2c die Bildschirmmonitordaten lesen und analysieren

    sudo get-edid | parse-edid
    
  • Verhexen Sie die Edid-Daten

    Falls edid-tools nicht installiert sind, können Sie die edidHex-Datei sichern , zB:

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

    Um diese Hex-Datei zu verschlüsseln, schauen Sie sich das Wiki an oder laden Sie die Edid-Spezifikationen herunter .

abu_bua
quelle