Auto rotate screen on Dell 13 7000 with 15.04 (Gnome)

5,699

Solution 1

This software was reported to work on many 2-in-1 devices. But you have to run the latest kernel and gnome.

Solution 2

Edit: I know this doesn't answer your question directly since we have different computers and you are interested in Gnome, but I wanted to post this somewhere to help others.

The following worked for me for Ubuntu 16.10 (Unity) on a Spectre x360 (Kaby Lake). I suspect a similar treatment should work for other laptops.

As in @Yalokly's answer, install iio-sensor-proxy:

sudo apt-get install iio-sensor-proxy

This can be a can of worms to get working. You know it's working if when you run monitor-sensor stuff happens when you rotate your device. Here is the repo where you might find some troubleshooting info. I had some trouble getting it going. Updating my kernel from 4.8 to 4.10 worked for me. Search for a tutorial online. Like many others, I have the bug where sensor monitoring only works after the computer has been suspended-resumed at least once.

Unity does not do auto-rotation and tablet mode stuff on its own. I combined scripts from here and here so that:

  1. Screen rotates automatically
  2. Keyboard and trackpad only work when laptop is normally oriented; disabled in the other three orientations
  3. Unity launcher is placed at the bottom for portrait orientations, and left for landscape orientations
  4. The onboard program is started in the three 'tablet' orientations and killed for the 'laptop' orientation (extra: I found it helpful to enable auto-popup in text mode in the onboard preferences)

Here is the script:

#!/bin/sh
# IH: this script is taken from a combo of:
# https://linuxappfinder.com/blog/auto_screen_rotation_in_ubuntu
# https://askubuntu.com/questions/757900/hp-spectre-x360-disable-touchpad-in-tablet-mode-ubuntu-15-10

# Auto rotate screen based on device orientation

# Receives input from monitor-sensor (part of iio-sensor-proxy package)
# Screen orientation and launcher location is set based upon accelerometer position
# Launcher will be on the left in a landscape orientation and on the bottom in a portrait orientation
# This script should be added to startup applications for the user

# Clear sensor.log so it doesn't get too long over time
> sensor.log

# Launch monitor-sensor and store the output in a variable that can be parsed by the rest of the script
monitor-sensor >> sensor.log 2>&1 &

# Parse output or monitor sensor to get the new orientation whenever the log file is updated
# Possibles are: normal, bottom-up, right-up, left-up
# Light data will be ignored
while inotifywait -e modify sensor.log; do
# Read the last line that was added to the file and get the orientation
ORIENTATION=$(tail -n 1 sensor.log | grep 'orientation' | grep -oE '[^ ]+$')

# Set the actions to be taken for each possible orientation
case "$ORIENTATION" in
normal)
    xrandr --output eDP-1 --rotate normal
    gsettings set com.canonical.Unity.Launcher launcher-position Left 
    xinput set-int-prop 12 "Device Enabled" 8 1 #Enable Keyboard
    xinput set-int-prop 13 "Device Enabled" 8 1 #Enable Pad
    killall onboard
    ;;
bottom-up)
    xrandr --output eDP-1 --rotate inverted
    gsettings set com.canonical.Unity.Launcher launcher-position Left 
    xinput set-int-prop 12 "Device Enabled" 8 0 #Disable Keyboard
    xinput set-int-prop 13 "Device Enabled" 8 0 #Disable Pad
    onboard &
    ;;
right-up)
    xrandr --output eDP-1 --rotate right
    gsettings set com.canonical.Unity.Launcher launcher-position Bottom
    xinput set-int-prop 12 "Device Enabled" 8 0 #Disable Keyboard
    xinput set-int-prop 13 "Device Enabled" 8 0 #Disable Pad
    onboard &
    ;;
left-up)
    xrandr --output eDP-1 --rotate left
    gsettings set com.canonical.Unity.Launcher launcher-position Bottom
    xinput set-int-prop 12 "Device Enabled" 8 0 #Disable Keyboard
    xinput set-int-prop 13 "Device Enabled" 8 0 #Disable Pad
    onboard &
    ;;
esac
done

Note: My screen is called eDP-1, yours may be called something different. Run xrandr to find out the name, and change the four instances in the above script.

Save this somewhere as auto-rotate.sh, make it executable (chmod a+x auto-rotate.sh), and add it to Startup Applications.

Share:
5,699

Related videos on Youtube

Dean
Author by

Dean

Hey, I have been in IT and development for a few years. Began as a sys-admin for Microsoft based networks and later became a web-developer. Currently I am more interested in Linux and development, and I study EE. I like the outdoors and enjoy hiking :)

Updated on September 18, 2022

Comments

  • Dean
    Dean over 1 year

    Gnome seems very suited for touch enabled devices, is there a way to auto rotate the screen when I flip the laptop/tablet?

  • Dean
    Dean over 8 years
    I'll check it out