#!/bin/bash ### Configuration: ORIENTATION=("normal" "left" "inverted" "right") REDEFINE_KEYSYMS="yes" RUNFILE="/var/spool/rotate-screen/rotation" DEVICE="Serial Wacom Tablet stylus" ### rotate_normal () { /usr/bin/xrandr --orientation normal /usr/bin/xsetwacom set "$DEVICE" rotate NONE } keysyms_normal () { /usr/bin/xmodmap -e "keycode 10 = 1 exclam Down" /usr/bin/xmodmap -e "keycode 11 = 2 quotedbl Up" /usr/bin/xmodmap -e "keycode 12 = 3 sterling Left" /usr/bin/xmodmap -e "keycode 13 = 4 dollar Right" } rotate_right () { /usr/bin/xrandr --orientation right /usr/bin/xsetwacom set "$DEVICE" rotate CW } keysyms_right () { /usr/bin/xmodmap -e "keycode 10 = 1 exclam Right" /usr/bin/xmodmap -e "keycode 11 = 2 quotedbl Left" /usr/bin/xmodmap -e "keycode 12 = 3 sterling Down" /usr/bin/xmodmap -e "keycode 13 = 4 dollar Up" } rotate_left () { /usr/bin/xrandr --orientation left /usr/bin/xsetwacom set "$DEVICE" rotate CCW } keysyms_left () { /usr/bin/xmodmap -e "keycode 10 = 1 exclam Left" /usr/bin/xmodmap -e "keycode 11 = 2 quotedbl Right" /usr/bin/xmodmap -e "keycode 12 = 3 sterling Up" /usr/bin/xmodmap -e "keycode 13 = 4 dollar Down" } rotate_inverted () { /usr/bin/xrandr --orientation inverted /usr/bin/xsetwacom set "$DEVICE" rotate HALF } keysyms_inverted () { /usr/bin/xmodmap -e "keycode 10 = 1 exclam Up" /usr/bin/xmodmap -e "keycode 11 = 2 quotedbl Down" /usr/bin/xmodmap -e "keycode 12 = 3 sterling Right" /usr/bin/xmodmap -e "keycode 13 = 4 dollar Left" } # get current orientation if [ -f "$RUNFILE" ]; then read CURR_ORIENTATION DUMMY1 DUMMY2 < "$RUNFILE" fi if [ ! -z "$CURR_ORIENTATION" ]; then CURR_ORIENTATION=`xrandr --query --verbose | grep " connected" | cut -d\ -f5` fi # setup variables so we can determine next orientation NUM=${#ORIENTATION[*]} for (( i=0 ; i<4 ; i++ )); do eval ORIENTATION_${ORIENTATION[$i]}=$i done # make sure system Xmodmap is loaded to set up buttons # (it must at least map super_R to Mode_switch) /usr/bin/xmodmap /etc/X11/Xmodmap # get orientation from command line parameter if any if [ -n "$1" ]; then ORIENTATION="$1" # otherwise, cycle to next orientation else N="ORIENTATION_$CURR_ORIENTATION" (( N = (${!N} + 1) % $NUM )) ORIENTATION="${ORIENTATION[$N]}" fi # rotate and redefine keysyms "rotate_$ORIENTATION" [[ -n "$REDEFINE_KEYSYMS" ]] && "keysyms_$ORIENTATION" # record orientation in spool file [ -n "$DISPLAY" ] || DISPLAY=:0.0 # for some reason, it's sometimes empty echo "$ORIENTATION $DISPLAY $XAUTHORITY" > "$RUNFILE"