문서에서:
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
기본적으로 원래 크기로 돌아갑니다. 2배 크기가 아닙니다! (원본 크기는 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'(그래픽 버퍼에 있는 화면 이미지의 픽셀 단위)
모니터가 있습니다. 예를 들어 각도 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
열려 있는 모든 파일을 저장하세요. 두 번 충돌이 발생했고 오타로 인해 모니터에 신호가 없어 다시 시작해야 했습니다!