화면 회전을 반전시키도록 설정할 수 있습니다.
xrandr -o inverted
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1
그리고 정상으로 돌아갑니다:
xrandr -o normal
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
여기에서 방법을 찾았습니다.https://wiki.ubuntu.com/X/InputCooperativeTransformation
그래서 나는 (오른쪽으로 90°) 다음과 같을 것이라고 추측합니다:
# ⎡ 0 -1 1 ⎤
# ⎜ 1 0 0 ⎥
# ⎣ 0 0 1 ⎦
right='0 -1 1 1 0 0 0 0 1'
그런데 왼쪽과 오른쪽의 "좌표 변환 행렬"은 무엇입니까?
답변1
문제를 보면 표준 좌표변환 행렬이다.
그래서:
⎡x_out⎤ ⎡ a b c ⎤ ⎡ x_in ⎤
⎜y_out⎥ = ⎜ d e f ⎥ * ⎜ y_in ⎥
⎣z_out⎦ ⎣ 0 0 1 ⎦ ⎣ z_in ⎦
그리고 z_out
== z_in
1.
즉
x_out = a * x_in + b * y_in + c
y_out = d * x_in + e * y_in + f
당신이 준 오른쪽 회전 예제 행렬
⎡ 0 -1 1 ⎤
⎜ 1 0 0 ⎥
⎣ 0 0 1 ⎦
그러므로 의미한다
x_out = 1 - y_in
y_out = x_in
왼쪽 회전의 경우 반대가 적용됩니다. 즉:
x_out = y_in
y_out = 1 - x_in
행렬을 제공합니다
⎡ 0 1 0 ⎤
⎜ -1 0 1 ⎥
⎣ 0 0 1 ⎦
답변2
최종 누락 행렬은 다음과 같습니다.
left='0 1 0 -1 0 1 0 0 1'
호출될 때마다 회전하는 스크립트를 작성했습니다.
답변3
그래서 저는 노트북의 터치스크린에서 터치패드로의 모든 전환을 수행했습니다. 터치패드가 물리적으로 사용자 앞쪽, 사용자 키보드와 eDP1 사이에 있다고 가정합니다. x-디스플레이를 어떤 방향으로 회전시키든 마우스 커서는 트랙패드에 있는 손가락과 함께 움직입니다. 나는 오래 전에 이것을 했고 논리를 잊어버렸습니다. 이제 xrandr -x
x에 미러를 사용하고 y 변환에 미러를 추가했지만 xrandr -y
트랙패드의 매트릭스 좌표를 찾을 수 없어 화면의 커서 움직임이 트랙패드의 손가락 움직임과 동일합니다.
function rotate_left (){
xrandr --output "$connected" --rotate left
xinput set-prop "$touch" "Evdev Axis Inversion" 0, 1
xinput set-prop "$touch" "Evdev Axes Swap" 1
xinput set-prop "$pad" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
xinput set-prop "$touch" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
echo "left" >/etc/rotate
echo "icon:$camino/icons/left.png" >>"$track"/ayp
}; export -f rotate_left
function rotate_right (){
xrandr --output "$connected" --rotate right
xinput set-prop "$touch" "Evdev Axis Inversion" 0, 1
xinput set-prop "$touch" "Evdev Axes Swap" 1
xinput set-prop "$pad" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
xinput set-prop "$touch" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
echo "right" >/etc/rotate
echo "icon:$camino/icons/right.png" >>"$track"/ayp
}; export -f rotate_right
function rotate_inverted (){
xrandr --output "$connected" --rotate inverted
xinput set-prop "$touch" "Evdev Axis Inversion" 1, 1
xinput set-prop "$touch" "Evdev Axes Swap" 0
xinput set-prop "$pad" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
echo "inverted" >/etc/rotate
echo "icon:$camino/icons/inverted.png" >>"$track"/ayp
}; export -f rotate_inverted
function rotate_normal (){
xrandr --output "$connected" --rotate normal
xinput set-prop "$touch" "Evdev Axis Inversion" 1, 1
xinput set-prop "$touch" "Evdev Axes Swap" 1
xinput set-prop "$pad" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
xinput set-prop "$touch" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
echo "normal" >/etc/rotate
echo "icon:$camino/icons/normal.png" >>"$track"/ayp
}; export -f rotate_normal
function rotate_flipx {
xrandr -x
xinput set-prop "$touch" "Evdev Axis Inversion" 0,0
xinput set-prop "$touch" "Evdev Axes Swap" 0
xinput set-prop "$pad" "$TRANSFORM" 3 1 1 -1 1 1
xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
};export -f rotate_flipx
function rotate_flipy {
xrandr -y
xinput set-prop "$touch" "Evdev Axis Inversion" 0, 0
xinput set-prop "$touch" "Evdev Axes Swap" 0
xinput set-prop "$pad" "$TRANSFORM" 3 1 1 -1 1 1
xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
};export -f rotate_flipy
function rotate_flip_normal {
xrandr -o normal
xinput set-prop "$touch" "Evdev Axis Inversion" 0, 0
xinput set-prop "$touch" "Evdev Axes Swap" 0
xinput set-prop "$pad" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
xinput set-prop "$touch" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
};export rotate_flip_normal