Risposte:
xdpyinfo | grep dimensions | sed -r 's/^[^0-9]*([0-9]+x[0-9]+).*$/\1/'
Il comando xdpyinfo
visualizza 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 sed
per pulire il risultato.
xdpyinfo
stampa 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.
xdpyinfo | grep dimensions
ti darà la risoluzione totale, se hai più monitor sarà la somma di tutti. xrandr --current
ti 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
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 si desidera specificare una schermata (con un'impostazione multi-monitor) ( SCREEN
è 1-indicizzata)
############################################# ## 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
xwininfo -root|sed '/Height/!d;s/.* //'
per altezza e xwininfo -root|sed '/Width/!d;s/.* //'
larghezza.
xdpyinfo
lo farà, con qualche analisi. Fornisce molte informazioni da cui dovrai quindi scavare il numero dello schermo e le dimensioni da
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 '*' | uniq
da @ 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)
Come nella risposta accettata ma meno complicata:
xdpyinfo | grep dimensions
Esempio di output:
dimensions: 1366x768 pixels (361x203 millimeters)
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 edid
file
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 edid
file 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 .
$( )
sintassi (esDIMENSIONS=$(xdpyinfo ...
.). Quindi utilizzaresed
nuovamente per ottenere i due:WIDTH=$(echo $DIMENSIONS | sed -r 's/x.*//')
eHEIGHT=$(echo $DIMENSIONS | sed -r 's/.*x//')
.