diff options
authorMatías Fonzo <>2020-02-07 15:53:56 -0300
committerTDE Gitea <>2020-02-10 19:13:05 +0000
commitb5f293f9437b4af567248d6cfc269fe8a0216391 (patch)
parentc7474d81e9149da23b9fd95bea74dc33171feb3f (diff)
starttde: Enhance startup script location
It was originally resolved by following the symbolic links to determine the location of the startup script. Mostly adjusted for Debian distributions and derivatives that have support for "alternatives". This doesn't work for distributions that install TDE under a self-contained directory (distros like Dragora, Guix or simply users that use Graft or GNU Stow tools). Also projects like GSRC... This code has been improved to cover these cases, also minimizing the compatibility impact for the readlink command (non-standard) by eliminating the use of options for greater compatibility, as some systems do not have the -e or -f options, as they may also have different behavior (between systems). Signed-off-by: Matías Fonzo <>
1 files changed, 23 insertions, 5 deletions
diff --git a/starttde b/starttde
index 846b856..899bdfa 100755
--- a/starttde
+++ b/starttde
@@ -87,11 +87,28 @@ echo "[starttde] This script is $0" 1>&2
# To determine that location use the following method rather than presuming
# the existence of $TDEDIR. That environment variable might not be
# defined or defined to point to KDE4 binaries.
-BIN_DIR="`dirname \`readlink -f $0\``"
-if [ -x $BIN_DIR/tde-config ]; then
- TDE_VERSION=$($BIN_DIR/tde-config --version | while IFS=: read a b; do [ "${a#TDE}" != "$a" ] && echo $b; done)
+# Let's check if this script is called from the Debian alternatives
+# See:
+if [ "$(readlink -- "$0")" = "/etc/alternatives/x-session-manager" ]
+ # Check if it is not a dangling symlink
+ if [ -L "/etc/alternatives/x-session-manager" ] && \
+ [ -e "/etc/alternatives/x-session-manager" ]
+ then
+ # Determine location by reading the alternative symlink
+ BIN_DIR="$(readlink -- "/etc/alternatives/x-session-manager")"
+ BIN_DIR="$(dirname -- "$BIN_DIR")"
+ fi
+# Assign a default value if 'BIN_DIR' is unset or null
+BIN_DIR="${BIN_DIR:=$(dirname -- "$0")}"
+if [ -x ${BIN_DIR}/tde-config ]; then
+ TDE_VERSION="$( ${BIN_DIR}/tde-config --version | sed -n 's|^TDE: ||p' )"
+ TDEDIR="${BIN_DIR%/bin}"
echo "[starttde] TDE version is $TDE_VERSION" 1>&2
- export TDEDIR=${BIN_DIR%/bin}
echo "[starttde] TDE base directory is $TDEDIR" 1>&2
echo "[starttde] Unable to determine the TDE bin directory, where this script should be installed."
@@ -99,7 +116,8 @@ else
echo "[starttde] Exiting."
exit 1
-unset BIN_DIR
+export TDEDIR
# When the X server dies we get a HUP signal from xinit. We must ignore it
# because we still need to do some cleanup.