Может ли кто-нибудь объяснить, как работает xrandr --scale?

Может ли кто-нибудь объяснить, как работает xrandr --scale?

Из документов:

              Changes the dimensions of the output picture.  If the y value is
              omitted,  the  x value will be used for both dimensions.  Values
              larger than 1 lead to a compressed screen (screen dimension big‐
              ger than the dimension of the output mode), and values less than
              1 lead to a zoom in on the output.  This option  is  actually  a
              shortcut version of the --transform option.

Давай попробуем:

Когда я печатаю, --xrandr --output eDP 1.2x1.2экран становится меньше примерно на 20% (это проверено)

Когда я печатаю, --xrandr --output eDP 0.8x0.8экран становится просто огромным, гораздо больше, чем на 20% (это фальсифицирует документы)

Когда я печатаю, --xrandr --output eDP 1x1он становится еще больше! Он увеличивается. Эти преобразования применяются относительно, как мне кажется... но если это так, то 1x1 должен сохранять его полностью статичным?

Когда я печатаю, --xrandr --output eDP 1.5x1.5он снова становится меньше.но он все еще больше, чем--scale 1.2x1.2, еще одно доказательство относительного масштабирования.

Когда я печатаю, --xrandr --output eDP 1.5x1.5ничего не происходит. Подождите-ка, это значит, что эти преобразования не применяются относительно?

Когда я печатаю, --xrandr --output eDP 2x2текст по сути возвращается к своему исходному размеру... который не имеет масштаба 2x! (исходный размер 1920x1080 при масштабе 1x).

Так же как --scaleи сокращение от --transform, которое описывается как:

       --transform a,b,c,d,e,f,g,h,i
              Specifies a transformation matrix to apply on the output.  A bi‐
              linear filter is selected automatically unless the --filter  pa‐
              rameter  is  also  specified.  The mathematical form corresponds
              to:
                     a b c
                     d e f
                     g h i
              The transformation is based on homogeneous coordinates. The  ma‐
              trix  multiplied by the coordinate vector of a pixel of the out‐
              put 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  coordi‐
              nate and multiplied against the matrix. The final device coordi‐
              nates of the pixel are then calculated with  the  so-called  ho‐
              mogenic  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)  .
              Typically,  a  and  e  corresponds to the scaling on the X and Y
              axes, c and f corresponds to the translation on those axes,  and
              g,  h, 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).

Итак, если я напишу `xrandr --output eDP --scale 1.5x1.5, это создаст матрицу преобразования следующим образом:

M = 
  1.5  0    0
  0    1.5  0
  0    0    1

где я использую * для обозначения скалярного произведения, а (x,y) — некоторые координаты

Таким образом, это будет равно:

w' = (0x + 0y + 1) = 1
x' = (1.5x + 0y + 1) / w' = 1.5x
y' = (0x + 1.5y + 1) / w' = 1.5y

Насколько я знаю, это влечет за собой линейное и относительное преобразование из последних координат x,y! Но подождите,если согласно документам, значения шкалы > 1 должныкомпрессвыходы, похоже, что это на самом деле расширяет выходы, поскольку (x,y) умножается на 1,5.

Я использую два монитора, если это что-то значит, я даже не вникаю в то, как это влияет на экранное пространство другого монитора.

решение1

Я пытаюсь вам помочь - вчера я читал документацию, и мне было трудно ее понять.
Я нарисовал вот эту картину ниже.

x'=x cos T + y -sin T + c  | a b c
y'=x sin T + y  cos T + f  | d e f   | g=0, h=0, i=1

x и y в пикселях режима вывода на ваш монитор
x' и y' в пикселях изображения на экране в графическом буфере

xrandr

У меня есть один монитор: например, угол 10 градусов, масштаб 1,2 -> cos 10 x 1,2 = 1,1818, sin 10 x 1,2 = 0,2084

xrandr --output "DVI-D-0" --transform 1.1818,-0.2084,0,0.2084,1.1818,0,0,0,1

вывод вызова xrandr после этогоxrandr

Screen 0: minimum 8 x 8, current 2270 x 1677, maximum 32767 x 32767
DVI-D-0 connected primary 2176x930+0+0 (normal left inverted right x axis y axis) 531mm x 299mm
   1920x1080     60.00*+
   1680x1050     59.95  
   1600x1200     60.00  
   1440x900      59.89  
   1280x1024     75.02    60.02  
   1280x960      60.00  
   1152x864      75.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32    56.25  
   640x480       75.00    72.81    59.94  
HDMI-0 disconnected (normal left inverted right x axis y axis)
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)

Изображение в графическом буфере должно быть 2176x930
(2176 x cos 10 + 930 x sin 10) / 1,2 = 1920

но я не уверен насчет экрана (желтого) на картине!

Расстояние между верхним пикселем изображения в буфере и нижним экраном монитора составит:
2176 x sin 10 + 1080 x 1,2=1674,
но это включая пустой монитор, но если изображение выходит за пределы монитора, я бы поспорил, что картина правильная.

Вы можете вернуться к старым настройкам с помощью:
xrandr --output "DVI-D-0" --transform 1,0,0,0,1,0,0,0,1

сохраняйте все открытые файлы. Дважды у меня происходил сбой, из-за плохого входного сигнала монитор падал, и его приходилось перезагружать!

Связанный контент