diff options
Diffstat (limited to 'bin/setup_screens')
-rwxr-xr-x | bin/setup_screens | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/bin/setup_screens b/bin/setup_screens deleted file mode 100755 index 7cd0b17..0000000 --- a/bin/setup_screens +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env bash -# Script to setup screens on login and lid-switch-action -# Uses autorandr to determine which screens are connected and which to setup. -# -# Per default a configuration named "default" will be used, if the computer is -# a laptop and not docked. -# A configuration named "docked-closed" will be used during login, when the lid -# is closed and docked. -# A configuration named "docked-all" will be used during login, when the lid -# is open and docked. - -set -e -u - -lid_state="" -fingerprint="" -action="" -x_user="" -display="" -current_user="" -path="" - -# get DISPLAY number -get_display() -{ - display=$(pgrep -a Xorg|cut -d':' -f2| cut -d' ' -f1) -} - -# get current user running X -get_x_user() -{ - x_user="$(loginctl list-sessions --no-legend| grep "seat"| awk '{print $3}')" -} - -# get current user running this script -get_current_user() -{ - current_user="$(whoami)" -} - -# get full path to this script -get_path() -{ - path="$0" -} - -# Get current lid state ("open" or "closed") -function get_lid_state() -{ - if [ -r "/proc/acpi/button/lid/LID/state" ]; then - lid_state="$(awk '{print $2}' /proc/acpi/button/lid/LID/state)" - fi -} - -# Get current docking state ("true" or "false") -function is_docked() -{ - if command -v busctl > /dev/null; then - busctl introspect org.freedesktop.login1 /org/freedesktop/login1| grep -E '^.Docked'| awk '{print $4}' - else - echo false - fi -} - -# Get the md5sum of the current autorandr fingerprint -function get_setup_fingerprint() -{ - fingerprint="$(autorandr --fingerprint| md5sum| cut -d ' ' -f 1)" -} - -# Get the md5sum of a autorandr configuration -function get_configuration_fingerprint() -{ - local fingerprint="" - if [ -r "$HOME/.config/autorandr/$1/setup" ]; then - fingerprint="$(md5sum "$HOME/.config/autorandr/$1/setup"| cut -d ' ' -f 1)" - fi - echo "$fingerprint" -} - -function set_configuration() -{ - local state=0 - # if the computer is docked - if is_docked ; then - # if there's a lid-switch action - if [ -n "$action" ]; then - case "$action" in - "open") - if [ "$(get_configuration_fingerprint 'docked-all')" == "$fingerprint" ]; then - echo "Loading docked-all." - state=1 - autorandr -l docked-all - fi - ;; - "close") - if [ "$(get_configuration_fingerprint 'docked-closed')" == "$fingerprint" ]; then - echo "Loading docked-closed." - state=1 - autorandr -l docked-closed - fi - ;; - esac - else - # check the lid state - case "$lid_state" in - "open") - if [[ $(get_configuration_fingerprint "docked-all") == "$fingerprint" ]]; then - echo "Loading docked-all." - state=1 - autorandr -l docked-all - fi - ;; - "closed") - if [[ $(get_configuration_fingerprint "docked-closed") == "$fingerprint" ]]; then - echo "Loading docked-closed." - state=1 - autorandr -l docked-closed - fi - ;; - *) - echo "Your computer is docked but has no lid?!" - exit 1 - ;; - esac - fi - # else if not docked - else - if [ "$action" = "open" ]; then - if [[ $(get_configuration_fingerprint "external") == "$fingerprint" ]]; then - echo "Loading external." - state=1 - autorandr -l external - fi - fi - fi - # if the screen still has not been setup, try using default - if [ $state -ne 1 ]; then - if [[ $(get_configuration_fingerprint "default") == "$fingerprint" ]]; then - echo "Loading default." - autorandr -l default - fi - fi -} - -# check if autorandr is installed -if [ ! -x "/usr/bin/autorandr" ]; then - echo "Autorandr is not installed." - exit 1 -fi - -# get (lid-switch) action from parameter ("open" or "close") -if [ "$#" -eq 1 ]; then - action="$1" -fi - -logger "Calling 'setup_screens'" -get_x_user -get_display -get_current_user -get_path - -# Export Xorg DISPLAY and XAUTHORITY -export DISPLAY=":$display" -export XAUTHORITY="/home/$x_user/.Xauthority" - -# if the script caller is the current X user or root (and lightdm is the current X user) -if [ "$current_user" == "$x_user" ]; then - get_lid_state - get_setup_fingerprint - set_configuration -elif [ "$current_user" == "root" ]; then - logger "Running $path as user $x_user now." - runuser -l "$x_user" -c "$path" -else - echo "$current_user is not currently running X and is not allowed to let the current X user run this script." - exit 1 -fi - -exit 0 |