-
-
Save kalinchernev/35cbccdffbf0f827ae38 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# This script rotates the screen and touchscreen input 90 degrees each time it is called, | |
# also disables the touchpad, and enables the virtual keyboard accordingly | |
# by Ruben Barkow: https://gist.github.com/rubo77/daa262e0229f6e398766 | |
#### configuration | |
# find your Touchscreen and Touchpad device with `xinput` | |
TouchscreenDevice='Wacom ISDv4 E6 Finger touch' | |
TouchpadDevice='SynPS/2 Synaptics TouchPad' | |
Stylus='Wacom ISDv4 E6 Pen stylus' | |
if [ "$1" = "--help" ] || [ "$1" = "-h" ] ; then | |
echo 'Usage: rotate-screen.sh [OPTION]' | |
echo | |
echo 'This script rotates the screen and touchscreen input 90 degrees each time it is called,' | |
echo 'also disables the touchpad, and enables the virtual keyboard accordingly' | |
echo | |
echo Usage: | |
echo ' -h --help display this help' | |
echo ' -j (just horizontal) rotates the screen and touchscreen input only 180 degrees' | |
echo ' -n always rotates the screen back to normal' | |
exit 0 | |
fi | |
touchpadEnabled=$(xinput --list-props "$TouchpadDevice" | awk '/Device Enabled/{print $NF}') | |
screenMatrix=$(xinput --list-props "$TouchscreenDevice" | awk '/Coordinate Transformation Matrix/{print $5$6$7$8$9$10$11$12$NF}') | |
# Matrix for rotation | |
# ⎡ 1 0 0 ⎤ | |
# ⎜ 0 1 0 ⎥ | |
# ⎣ 0 0 1 ⎦ | |
normal='1 0 0 0 1 0 0 0 1' | |
normal_float='1.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,1.000000' | |
#⎡ -1 0 1 ⎤ | |
#⎜ 0 -1 1 ⎥ | |
#⎣ 0 0 1 ⎦ | |
inverted='-1 0 1 0 -1 1 0 0 1' | |
inverted_float='-1.000000,0.000000,1.000000,0.000000,-1.000000,1.000000,0.000000,0.000000,1.000000' | |
# 90° to the left | |
# ⎡ 0 -1 1 ⎤ | |
# ⎜ 1 0 0 ⎥ | |
# ⎣ 0 0 1 ⎦ | |
left='0 -1 1 1 0 0 0 0 1' | |
left_float='0.000000,-1.000000,1.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000' | |
# 90° to the right | |
#⎡ 0 1 0 ⎤ | |
#⎜ -1 0 1 ⎥ | |
#⎣ 0 0 1 ⎦ | |
right='0 1 0 -1 0 1 0 0 1' | |
if [ $screenMatrix == $normal_float ] && [ "$1" != "-n" ] | |
then | |
echo "Upside down" | |
xrandr -o inverted | |
xinput set-prop "$TouchscreenDevice" 'Coordinate Transformation Matrix' $inverted | |
xinput set-prop "$Stylus" 'Coordinate Transformation Matrix' $inverted | |
xinput disable "$TouchpadDevice" | |
# Remove hashtag below if you want pop-up the virtual keyboard | |
gsettings set org.onboard.keyboard input-event-source XInput | |
gsettings set org.onboard.keyboard touch-input none | |
xsetwacom --set "Wacom ISDv4 E6 Finger touch" Gesture on | |
killall onboard; ./onboard | |
onboard & | |
elif [ $screenMatrix == $inverted_float ] && [ "$1" != "-j" ] && [ "$1" != "-n" ] | |
then | |
echo "90° to the left" | |
xrandr -o left | |
xinput set-prop "$TouchscreenDevice" 'Coordinate Transformation Matrix' $left | |
xinput set-prop "$Stylus" 'Coordinate Transformation Matrix' $left | |
xinput disable "$TouchpadDevice" | |
elif [ $screenMatrix == $left_float ] && [ "$1" != "-j" ] && [ "$1" != "-n" ] | |
then | |
echo "90° to the right" | |
xrandr -o right | |
xinput set-prop "$TouchscreenDevice" 'Coordinate Transformation Matrix' $right | |
xinput set-prop "$Stylus" 'Coordinate Transformation Matrix' $right | |
xinput disable "$TouchpadDevice" | |
else | |
echo "Back to normal" | |
xrandr -o normal | |
xinput set-prop "$TouchscreenDevice" 'Coordinate Transformation Matrix' $normal | |
xinput set-prop "$Stylus" 'Coordinate Transformation Matrix' $normal | |
xinput enable "$TouchpadDevice" | |
fi |
Possible you want to add:
TouchscreenPenEraserDevice='Wacom ISDv4 E6 Pen eraser'
With:
xinput set-prop "$TouchscreenPenEraserDevice" 'Coordinate Transformation Matrix' $inverted
...$left ...$right ...$normal
in the if, elif and else blocks.
Feel free to fork ;)
Hi I did ur rotate screen script on my lenovo x220. Now my screen is upside down. How do I remove your script?
To remove the script, remove the rotate-screen.sh
file you executed.
I did that and screen still upside down
Im trying to get it back like i never executed the script cuz my screen is stuck upside down and the touch is working weird probably due to the script
How do i put everything back to normal as if i never did the script?
it for some reason stays like that even after reboot or shut down
I was able to go in to system settings display and change the screen to normal now its correct, but im worried about the other changes?
Changes are applied on the list of devices and the corresponding cases which include my devices.
By devices I mean the finger touch for example
TouchscreenDevice='Wacom ISDv4 E6 Finger touch'
It could be different in your case. This script in my case is x220t.
The onboard settings you're asking about are related to this thread https://bugs.launchpad.net/ubuntu/+source/onboard/+bug/1297692
Basically, there are issues on making finger touch working on when by default the stylus is the one listened two, that's why I play turn on/off finger and onboard