Since you didn't specify the OS, I feel free to assume it's GNU/Linux.
In that case, there is
xrandr command, with the
Have fun! (:
xrandr man page (check out the other options, like
Specifies a transformation matrix to apply on the output. Automatically a bilinear filter is selected. The mathematical form corresponds to:
a b c
d e f
g h i
The transformation is based on homogeneous coordinates. The matrix multiplied by the coordinate vector of a pixel of the output gives the transformed coordinate vector of a pixel in the graphic buffer. More precisely, the vector (x y) of the output pixel is extended to 3 values (x y w), with 1 as the w coordinate and multiplied against the matrix. The final device coordinates of the pixel are then calculated with the so-called homogenic division by the transformed w coordinate. In other words, the device coordinates (x'y') of the transformed pixel are:
x' = (ax + by + c) / w' and
y' = (dx + ey + f) / w' ,
with w' = (gx + hy + i) .
e corresponds to the scaling on the X and Y axes,
f corresponds to the translation on those axes, and
i are respectively 0, 0 and 1. The matrix can also be used to express more complex transformations such as keystone correction, or rotation. For a rotation of an angle T, this formula can be used:
cos T -sin T 0
sin T cos T 0
0 0 1
As a special argument, instead of passing a matrix, one can pass the string
none, in which case the default values are used (a unit matrix without filter).