Retrieving screen width and height

For discussions about programming, and for programming questions and advice


Moderator: Forum moderators

Post Reply
User avatar
MochiMoppel
Posts: 1128
Joined: Mon Jun 15, 2020 6:25 am
Location: Japan
Has thanked: 18 times
Been thanked: 365 times

Retrieving screen width and height

Post by MochiMoppel »

Many scripts require to calculate the dimension of the current screen in pixels. Not a big deal and normally done with the help of the xwininfo command. Still some methods are less brilliant than others, some are lengthy, some hard to read and some are slow.

Over the years I have built a collection of the good, the bad and the ugly. Running the following script will "play" them all. They all work here but might not work in all systems. To reduce the various effects caused by CPU load etc. on the execution time of each snippet I send them through a cycle of 5 iterations. More iterations - in theory - should result in more reliable figures but in reality it's impossible to clearly determine the winner. Doesn't matter anyway. All examples, maybe with the exception of those using xrandr, result in acceptable speeds. What's more important is portability, readability and lastly personal preferences. If you know a good alternative, feel free to add it to the list.

Code: Select all

#! /bin/bash
### CALCULATING SCREEN DIMENSION USING XWININFO, XPROP, XDPYINFO OR XRANDR



CYCLES=5
write_it () { echo -e "Line $1 $2:	SCREEN_W=$SCREEN_W SCREEN_H=$SCREEN_H Time:" ;}

function use_bash_1 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	ARRAY=($(xwininfo -root))
	SCREEN_W=${ARRAY[27]}
	SCREEN_H=${ARRAY[29]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	WININFO=$(xwininfo -root)
	ARRAY=(${WININFO#*Width:})	# May be a bit safer to cut wininfo header. Don't know if root window can have a name)
	SCREEN_W=${ARRAY[0]}
	SCREEN_H=${ARRAY[2]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_3 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	read SCREEN_W SCREEN_H <<< $(A=($(xwininfo -root)); echo ${A[27]} ${A[29]})
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_4 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	set -- $(xwininfo -root)
	SCREEN_W=${28}
	SCREEN_H=${30}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_5 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	[[ $(xwininfo -root) =~ Width:\ *([0-9]*).*Height:\ *([0-9]*) ]]
	SCREEN_W=${BASH_REMATCH[1]}
	SCREEN_H=${BASH_REMATCH[2]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_6 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=$(xwininfo -root) 
	SCREEN_W=${XWININFO#*Width: }
	SCREEN_W=${SCREEN_W%%$'\n'*}
	SCREEN_H=${XWININFO#*Height: }
	SCREEN_H=${SCREEN_H%%$'\n'*}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_bash_7 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=$(xwininfo -root)
	GEOMETRY=${XWININFO#*-geometry }		# Last line contains geometry. Ex: -geometry 1200x1600+0+0 ; Strip until first value
	GEOMETRY_ARRAY=(${GEOMETRY//[+x]/ })	# Replace 'x' and '+' with space. Read result into array representing W H X Y
	SCREEN_W=${GEOMETRY_ARRAY[0]}
	SCREEN_H=${GEOMETRY_ARRAY[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_sed_0 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	read SCREEN_W SCREEN_H <<< $(xwininfo -root | sed -n '/Width/,/Height/ s/[^0-9]*//p')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_sed_1 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=($(xwininfo -root | sed -nr '/Width|Height/ s/[^0-9]*//p'))	#match Height or Width
	SCREEN_W=${XWININFO[0]}
	SCREEN_H=${XWININFO[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_sed_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=($(xwininfo -root | sed -nr 's/^.*Width:|Height: ([0-9]*).*$/\1/p'))
	SCREEN_W=${XWININFO[0]}
	SCREEN_H=${XWININFO[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_1 {
	LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=($(xwininfo -root | awk '/Width|Height/ { print $NF }'))
	SCREEN_W=${XWININFO[0]}
	SCREEN_H=${XWININFO[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
	# Alternatives for awk '/Width|Height/ {print $NF}; IMO less readable and maybe less reliable since they assume fixed xwininfo format
	# awk 'NR>=8&&NR<=9 {print $NF}'		# print lines >=8 AND <=9
	# awk 'NR==8,NR==9 {print $NF}'		# print lines from 8 to 9 (inclusive)
	# awk 'NR==8||NR==9 {print $NF}'		# print lines 8 and 9
}
function use_awk_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	read SCREEN_W SCREEN_H <<< $(xwininfo -root | awk '/Width|Height/ {print $NF}')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_3 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=($(xwininfo -root | awk -F"[ x+-]+" '/-geometry/ { print $3,$4 }'))
	SCREEN_W=${XWININFO[0]}
	SCREEN_H=${XWININFO[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_4 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	SCREEN_W=$(xwininfo -root|awk '$1=="Width:" {print $2}')
	SCREEN_H=$(xwininfo -root|awk '$1=="Height:"{print $2}')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_5 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=$(xwininfo -root)
	SCREEN_W=$(awk '$1=="Width:" {print $2}' <<< "$XWININFO")
	SCREEN_H=$(awk '$1=="Height:"{print $2}' <<< "$XWININFO")
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_6 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=$(xwininfo -root)
	SCREEN_W=$(awk '/Width:/  {print $NF}' <<< "$XWININFO")
	SCREEN_H=$(awk '/Height:/ {print $NF}' <<< "$XWININFO")
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_awk_7 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do	# 'echo' instead of '<<<' seems to be faster
	XWININFO=$(xwininfo -root)
	SCREEN_W=$(echo -n "$XWININFO" | awk '/Width:/  {print $NF}')
	SCREEN_H=$(echo -n "$XWININFO" | awk '/Height:/ {print $NF}')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_1 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do # calling xwininfo twice
	SCREEN_W=$(xwininfo -root|grep -oP '(?<=Width: )[0-9]*')
	SCREEN_H=$(xwininfo -root|grep -oP '(?<=Height: )[0-9]*')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do # calling xwininfo only once takes longer than calling it twice...
	XWININFO=$(xwininfo -root)
	SCREEN_W=$(echo $XWININFO |grep -oP '(?<=Width: )[0-9]*')
	SCREEN_H=$(echo $XWININFO |grep -oP '(?<=Height: )[0-9]*')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_3 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XWININFO=$(xwininfo  -root)
	SCREEN_W=$(echo $XWININFO|grep -o 'Width:.*$' |cut -d " " -f2)
	SCREEN_H=$(echo $XWININFO|grep -o 'Height:.*$'|cut -d " " -f2)
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_4 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	SCREEN_W=$(xwininfo -root|grep -o 'Width:.*$' |cut -d " " -f2)
	SCREEN_H=$(xwininfo -root|grep -o 'Height:.*$'|cut -d " " -f2)
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_5 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do # found in yaf-splash
	XWININFO="`xwininfo -root | grep -o ' \\-geometry .*' | cut -f 3 -d ' '`" # Funny double \\ works only with ` syntax. No backslash is needed here anyway
	SCREEN_W=`echo -n "$XWININFO" | cut -f 1 -d 'x'`
	SCREEN_H=`echo -n "$XWININFO" | cut -f 1 -d '+' | cut -f 2 -d 'x'`
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_grep_6 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do # found in /usr/local/pup_event/frontend_startup
	XWININFO="$(xwininfo -root | grep -o '\-geometry .*' | tr -s ' ' | cut -f 2 -d ' ' | cut -f 1 -d '+')"
	SCREEN_W="$(echo -n "$XWININFO" | cut -f 1 -d 'x')"
	SCREEN_H="$(echo -n "$XWININFO" | cut -f 2 -d 'x')"
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_1 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	set -- $(xprop -root _NET_DESKTOP_GEOMETRY)
	SCREEN_W=${3/,}
	SCREEN_H=${4}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	set --  $(xprop -root -f _NET_DESKTOP_GEOMETRY 0i " \$0 \$1" _NET_DESKTOP_GEOMETRY)
	SCREEN_W=${2}
	SCREEN_H=${3}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_3 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XPROP=$(xprop -root _NET_DESKTOP_GEOMETRY)
	SCREEN_W=${XPROP%,*}
	SCREEN_W=${SCREEN_W##* }
	SCREEN_H=${XPROP##* }
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_4 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	[[ $(xprop -root _NET_DESKTOP_GEOMETRY) =~ [^0-9]*([0-9]*)[^0-9]*([0-9]*) ]]
	SCREEN_W=${BASH_REMATCH[1]}
	SCREEN_H=${BASH_REMATCH[2]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_5 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	read x x SCREEN_W SCREEN_H <<< $(xprop -root _NET_DESKTOP_GEOMETRY)
	SCREEN_W=${SCREEN_W/,}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xprop_6 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	read x SCREEN_W SCREEN_H <<< $(xprop -root -f _NET_DESKTOP_GEOMETRY 0i " \$0 \$1" _NET_DESKTOP_GEOMETRY)
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xdpyinfo { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XDPY=($(xdpyinfo | awk -F"[ x]+" '/dimensions:/ { print $3,$4 }'))
	SCREEN_W=${XDPY[0]}
	SCREEN_H=${XDPY[1]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_1 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XRANDR=$(xrandr)
	SCREEN_W=${XRANDR#*current }
	SCREEN_W=${SCREEN_W%% *}
	SCREEN_H=${XRANDR%%, maximum*}
	SCREEN_H=${SCREEN_H##* }
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_2 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XRANDR=$(xrandr)
	SCREEN_W=$(grep -oP '(?<=current )[0-9]*' <<< "$XRANDR") #Positive lookbehind. Matches consecutive numbers, preceded by 'current '  WITHOUT RETURNING 'current ' AS PART OF THE MATCH.
	SCREEN_H=$(grep -oP '[0-9]*(?=, maximum)' <<< "$XRANDR") #Positive lookahead.  Matches consecutive numbers, followed by ', maximum'  WITHOUT RETURNING ', maximum' AS PART OF THE MATCH.
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_3 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XRANDR=$(xrandr)
	SCREEN_W=$(echo "$XRANDR" | grep -wo -m1 'current [0-9]* x [0-9]*' | tr -cd '[0-9]x' | cut -f1 -d 'x')
	SCREEN_H=$(echo "$XRANDR" | grep -wo -m1 'current [0-9]* x [0-9]*' | tr -cd '[0-9]x' | cut -f2 -d 'x')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_4 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do # found in # http://www.murga-linux.com/puppy/viewtopic.php?p=972316#972316
	XRANDR=$(xrandr | cut -f8,9,10 -d' ' | cut -f1 -d',' | head -1 | sed 's/ //g')
	SCREEN_W=$(echo $XRANDR | cut -f1 -d'x')
	SCREEN_H=$(echo $XRANDR | cut -f2 -d'x')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_5 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	SCREEN_W=$(xrandr | grep -oP '(?<=current )[0-9]*')
	SCREEN_H=$(xrandr | grep -oP '[0-9]*(?=, maximum)')
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_6 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	[[ $(xrandr) =~ .*current\ ([0-9]*)[^0-9]*([0-9]*) ]]
	SCREEN_W=${BASH_REMATCH[1]}
	SCREEN_H=${BASH_REMATCH[2]}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}
function use_xrandr_7 { LN=$((LINENO+1)) ; ( time ( for ((c=1;c<=$CYCLES;c++)); do
	XRANDR=($(xrandr))
	SCREEN_W=${XRANDR[7]}
	SCREEN_H=${XRANDR[9]/,}
done; write_it $LN $FUNCNAME ) 2>&1 ) | head -n -2 | tr -s '\n' ' ' ;echo
}


use_bash_1
use_bash_2
use_bash_3
use_bash_4
use_bash_5
use_bash_6
use_bash_7
use_sed_0
use_sed_1
use_sed_2
use_awk_1
use_awk_2
use_awk_3
use_awk_4
use_awk_5
use_awk_6
use_awk_7
use_grep_1
use_grep_2
use_grep_3
use_grep_4
use_grep_5
use_grep_6
use_xprop_1
use_xprop_2
use_xprop_3
use_xprop_4
use_xprop_5
use_xprop_6
use_xdpyinfo
use_xrandr_1
use_xrandr_2
use_xrandr_3
use_xrandr_4
use_xrandr_5
use_xrandr_6
use_xrandr_7

Here a sample output of all 37 snippets on my slow netbook:
Line 10 use_bash_1:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.035s
Line 16 use_bash_2:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.038s
Line 23 use_bash_3:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.048s
Line 27 use_bash_4:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.037s
Line 33 use_bash_5:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.044s
Line 39 use_bash_6:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.044s
Line 47 use_bash_7:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.070s
Line 55 use_sed_0:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.052s
Line 59 use_sed_1:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.050s
Line 65 use_sed_2:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.053s
Line 72 use_awk_1:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.047s
Line 82 use_awk_2:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.054s
Line 86 use_awk_3:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.055s
Line 92 use_awk_4:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.096s
Line 97 use_awk_5:      SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.116s
Line 103 use_awk_6:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.105s
Line 109 use_awk_7:     SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.105s
Line 115 use_grep_1:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.092s
Line 120 use_grep_2:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.108s
Line 126 use_grep_3:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.123s
Line 132 use_grep_4:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.124s
Line 137 use_grep_5:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.144s
Line 143 use_grep_6:    SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.154s
Line 149 use_xprop_1:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.055s
Line 155 use_xprop_2:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.039s
Line 161 use_xprop_3:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.049s
Line 168 use_xprop_4:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.043s
Line 174 use_xprop_5:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.048s
Line 179 use_xprop_6:   SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.041s
Line 183 use_xdpyinfo:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.071s
Line 189 use_xrandr_1:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.281s
Line 197 use_xrandr_2:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.350s
Line 203 use_xrandr_3:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.437s
Line 209 use_xrandr_4:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.370s
Line 215 use_xrandr_5:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.584s
Line 220 use_xrandr_6:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.282s
Line 226 use_xrandr_7:  SCREEN_W=1200 SCREEN_H=1600 Time: real 0m0.291s

Post Reply

Return to “Programming”