我找到了一个脚本来将我的屏幕和触摸板向左旋转并恢复正常:
#!/bin/sh
# Find the line in "xrandr -q --verbose" output that contains current screen orientation and "strip" out current orientation.
rotation="$(xrandr -q --verbose | grep 'connected' | egrep -o '\) (normal|left|inverted|right) \(' | egrep -o '(normal|left|inverted|right)')"
# Using current screen orientation proceed to rotate screen and input tools.
case "$rotation" in
normal)
# -rotate to the left
xrandr -o left
xinput set-prop --type=int --format=8 "ELAN Touchscreen" "Evdev Axes Swap" 1
xinput set-prop --type=int --format=8 "ELAN Touchscreen" "Evdev Axis Inversion" 1 0
xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 1 0
;;
left)
# -rotate to normal
xrandr -o normal
xinput set-prop --type=int --format=8 "ELAN Touchscreen" "Evdev Axes Swap" 0
xinput set-prop --type=int --format=8 "ELAN Touchscreen" "Evdev Axis Inversion" 0 0
xinput set-prop --type=int --format=8 4 "Evdev Axis Inversion" 0 0
;;
esac
工作正常。但是,如果屏幕旋转,手写笔不起作用。我通过更改笔的坐标变换矩阵找到了一个潜在的解决方案:
xinput set-prop 'ELAN Touchscreen Pen Pen (0)' "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1
这工作正常,意味着如果屏幕方向正常并且我运行此命令
xinput list-props 'ELAN Touchscreen Pen Pen (0)' | grep "Coordinate Transformation Matrix"
导致
Coordinate Transformation Matrix (144): 0.000000, 1.000000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000
但是每次我在脚本中使用它或者如果我在屏幕以纵向模式定向时运行它时都会重置它,这意味着如果我运行
xinput list-props 'ELAN Touchscreen Pen Pen (0)' | grep "Coordinate Transformation Matrix"
在我运行脚本或以“左”方向运行后,我得到
Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
并且手写笔在此更改方向下无法正常工作(左上等)
似乎在屏幕旋转时笔的坐标变换矩阵有一个“重置”,这会覆盖命令。所以我在执行这些命令之间添加了一个睡眠时间,现在它工作正常。2 秒没有影响,因为在屏幕最终旋转之前需要这个时间
新脚本: