aboutsummaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/setup_screens66
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