次のようにして画面の回転を反転させることができます。
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
ここでHowToを見つけました:https://wiki.ubuntu.com/X/InputCoordinateTransformation
したがって、(右に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 ディスプレイをどの方向に回転しても、マウス カーソルはトラックパッド上の指に合わせて動きます。これはかなり前にやったことなので、ロジックを忘れてしまいました。現在、とを使用して、X のミラー変換と Y のミラー変換を追加しましたxrandr -x
が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