Come posso scoprire la mia risoluzione dello schermo da uno script di shell?


Risposte:


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

Il comando xdpyinfovisualizza varie informazioni sul tuo server X. Scrive molte cose sull'output standard ma abbiamo solo bisogno della linea che inizia con la parola dimensions, quindi usiamo grep. Finalmente usiamo sedper pulire il risultato.


Se hai bisogno delle quote degli assi xey separatamente, puoi fare quanto segue. Innanzitutto, inserisci il risultato del comando sopra in una variabile usando la $( )sintassi (es DIMENSIONS=$(xdpyinfo ....). Quindi utilizzare sednuovamente per ottenere i due: WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')e HEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//').
lunedì

xdpyinfostampa un messaggio di errore se non può accedere alle informazioni, quindi reindirizzamento dell'errore a /dev/null. Per questo motivo si consiglia di aggiungere un reindirizzamento errore: xdpyinfo 2> /dev/null. Così, il piple piena assomiglia a questo: xdpyinfo 2> /dev/null | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'. Questo renderà il tuo script più solido.
lunedì

29

xdpyinfo | grep dimensionsti darà la risoluzione totale, se hai più monitor sarà la somma di tutti. xrandr --currentti darà la risoluzione per ogni monitor.

Uso questo frammento per trovare la massima risoluzione possibile per rDesktop senza passare a schermo intero:

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

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

Produzione:

Xaxis = 1280
Yaxis = 1024

Minus decorazioni per finestre (più o meno):

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

Produzione:

MaxRes = 1275x999

Qual è la risoluzione massima per rDesktop senza passare a schermo intero.

Comando di fine:

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

Finora funziona bene, ma non ho ancora testato a fondo.

Un altro esempio è per 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 il

Come scopri le modalità disponibili per passare a?
CMCDragonkai

Se non è necessario sottrarre per la decorazione della finestra (ecc.), È possibile farlo in una sola riga rdesktop [other_args] -g $(xrandr --current | grep '*' | uniq | awk '{print $1}').
c24w,

Non è la somma per più monitor. Sono le dimensioni di un rettangolo di selezione che contiene tutti i monitor.
Dennis Williamson,

xrandr --current | grep '*' | awk -v line="$SCREEN" 'NR==line{print $1}' | cut -d 'x' -f1se si desidera specificare una schermata (con un'impostazione multi-monitor) ( SCREENè 1-indicizzata)
SapuSeven

5

Puoi usare il xrandr -qcomando. Da ciò è possibile creare uno script di shell, se necessario.

Per maggiori informazioni sul comando vai qui o digita man xrandr


2
#############################################
## Lo uso con un programma di registrazione video.
# dimensione finestra - opzione root - informazioni sulla finestra principale dello schermo
echo $ (xwininfo -root | grep 'geometry' | awk '{print $ 2;}')
# output (s): 1024x768 + 0 + 0
# altezza x larghezza + x + posizioni y.
######################
## Manuale di riferimento ##
man xwininfo

Ho usato xwininfo -root|sed '/Height/!d;s/.* //'per altezza e xwininfo -root|sed '/Width/!d;s/.* //'larghezza.
dessert

1

xdpyinfolo farà, con qualche analisi. Fornisce molte informazioni da cui dovrai quindi scavare il numero dello schermo e le dimensioni da


1

Due possibili alternative prodotte combinando le risposte di @ user31752 e @ eliezer-e-vargas

Una regex più semplice:

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

o usando il taglio:

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

L'uso di grep '*' | uniqda @ eliezer-e-vargas ottiene una linea diversa (es. "1440x900 59,90 * + 59,89") dell'uscita xrandr, mentre il grep "connesso" ne ottiene uno semplice (es. "LVDS1 collegato 1440x900 + 0 + 0 ..... ").

L'uso di regex da parte di @utente31752 è piacevole, quindi la linea che sto usando ha bisogno di una regex più semplice, o può essere sostituita con il comando di taglio più semplice.

Esempio di output 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)

C'è qualche motivo per qualcuno di usare questi comandi invece di quelli nella risposta di Eliezer E. Vargas ?
Scott,

Si prega di modificare le informazioni in vostra risposta.
Scott,

0

Come nella risposta accettata ma meno complicata:

xdpyinfo | grep dimensions

Esempio di output:

dimensions:    1366x768 pixels (361x203 millimeters)

0

Lettura dei dati dello schermo monitor

Lo standard vesa fornisce un metodo per leggere la risoluzione dello schermo del monitor.

Dati di identificazione display esteso (EDID ): questo standard definisce i formati di dati per trasportare le informazioni di configurazione, consentendo un uso ottimale dei display.

Un monitor in genere supporta più risoluzioni e frequenze di aggiornamento. Naturalmente qualcuno preferirà il massimo (fisico).

Per leggere questi dati del monitor, provare una di queste soluzioni:

  • edid-decodifica

    Se non installato, digitare

    sudo apt install edid-decode
    

    Quindi leggi il edidfile

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

    Installa con

    sudo apt install read-edid 
    

    Quindi leggere tramite i2c i dati del monitor dello schermo e analizzarli

    sudo get-edid | parse-edid
    
  • Esaddump dei dati edid

    Nel caso in cui edid-tools non sia installato, è possibile scaricare il edidfile esadecimale, ad esempio:

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

    Per crittografare questo file esadecimale, dai un'occhiata al wiki o scarica le specifiche di edid .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.