diff options
-rwxr-xr-x | bin/setup_screens | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/bin/setup_screens b/bin/setup_screens index 1a84bba..7cd0b17 100755 --- a/bin/setup_screens +++ b/bin/setup_screens @@ -2,23 +2,29 @@ # 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 "internal" will be used, if the computer is +# 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-open" will be used during login, when the lid +# A configuration named "docked-all" will be used during login, when the lid # is open and docked. set -e -u lid_state="" -docking_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() { @@ -41,15 +47,17 @@ get_path() function get_lid_state() { if [ -r "/proc/acpi/button/lid/LID/state" ]; then - lid_state="$(cat /proc/acpi/button/lid/LID/state|awk '{print $2}')" + lid_state="$(awk '{print $2}' /proc/acpi/button/lid/LID/state)" fi } # Get current docking state ("true" or "false") -function get_docking_state() +function is_docked() { - if [ -x "/usr/bin/busctl" ]; then - docking_state="$(busctl introspect org.freedesktop.login1 /org/freedesktop/login1|grep "\.Docked"|awk '{print $4}')" + 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 } @@ -63,8 +71,8 @@ function get_setup_fingerprint() 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)" + if [ -r "$HOME/.config/autorandr/$1/setup" ]; then + fingerprint="$(md5sum "$HOME/.config/autorandr/$1/setup"| cut -d ' ' -f 1)" fi echo "$fingerprint" } @@ -73,19 +81,19 @@ function set_configuration() { local state=0 # if the computer is docked - if [ "$docking_state" = "true" ]; then + if is_docked ; then # if there's a lid-switch action if [ -n "$action" ]; then case "$action" in "open") - if [ $(get_configuration_fingerprint "docked-open") == "$fingerprint" ]; then - echo "Loading docked-open." + if [ "$(get_configuration_fingerprint 'docked-all')" == "$fingerprint" ]; then + echo "Loading docked-all." state=1 - autorandr -l docked-open + autorandr -l docked-all fi ;; "close") - if [ $(get_configuration_fingerprint "docked-closed") == "$fingerprint" ]; then + if [ "$(get_configuration_fingerprint 'docked-closed')" == "$fingerprint" ]; then echo "Loading docked-closed." state=1 autorandr -l docked-closed @@ -96,10 +104,10 @@ function set_configuration() # check the lid state case "$lid_state" in "open") - if [[ $(get_configuration_fingerprint "docked-open") == "$fingerprint" ]]; then - echo "Loading docked-open." + if [[ $(get_configuration_fingerprint "docked-all") == "$fingerprint" ]]; then + echo "Loading docked-all." state=1 - autorandr -l docked-open + autorandr -l docked-all fi ;; "closed") @@ -125,11 +133,11 @@ function set_configuration() fi fi fi - # if the screen still has not been setup, try using internal + # if the screen still has not been setup, try using default if [ $state -ne 1 ]; then - if [[ $(get_configuration_fingerprint "internal") == "$fingerprint" ]]; then - echo "Loading internal." - autorandr -l internal + if [[ $(get_configuration_fingerprint "default") == "$fingerprint" ]]; then + echo "Loading default." + autorandr -l default fi fi } @@ -147,27 +155,25 @@ fi logger "Calling 'setup_screens'" get_x_user +get_display get_current_user get_path # Export Xorg DISPLAY and XAUTHORITY -export DISPLAY=$(ls /tmp/.X*|grep "lock"|cut -d '.' -f2| cut -d '-' -f1|sed -e 's/X/:/') -export XAUTHORITY="$(eval echo ~$x_user/.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" ] || [ $current_user = "root" -a $x_user = "lightdm" ]; then +if [ "$current_user" == "$x_user" ]; then get_lid_state - get_docking_state get_setup_fingerprint set_configuration -else - if [ $current_user = "root" ]; then +elif [ "$current_user" == "root" ]; then logger "Running $path as user $x_user now." - runuser -l $x_user -c $path - else + 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 fi exit 0 |