summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Golubev <fatzer2@gmail.com>2025-10-24 09:04:54 +0300
committerAlexander Golubev <fatzer2@gmail.com>2026-01-09 18:10:43 +0300
commit9a49f2e27e9cfbd424feb5bdaeefc1837cc596fe (patch)
tree8ce9c0d86c36060b754bf3ea037d6f51d49f3d4c
parente6c30469e4c7a09517a493ede0e4fcb3a00372f6 (diff)
downloadtdebase-feat/tdm-xsession.tar.gz
tdebase-feat/tdm-xsession.zip
tdm: a more robust Xsession scriptfeat/tdm-xsession
- source *xprofile and /etc/X11/xinit/xinitrc.d/* files - provide a fallback for running session if Xsession does not present - import Xresources via xrdb For reference see also: - older Xsession version used in gentoo: https://mirror.git.trinitydesktop.org/gitea/TDE/tde-packaging-gentoo/src/branch/master/trinity-base/tdm/files/tdm-14.0.8-xsession.script - Xsession version from sddm (ultimately derived from kdm3 one as well): https://github.com/sddm/sddm/blob/662a409aabec39bdbff2a13fa008e6a7a873dca1/data/scripts/Xsession Closes: https://mirror.git.trinitydesktop.org/gitea/TDE/tdebase/issues/668 Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
-rw-r--r--tdm/kfrontend/gentdmconf.c54
1 files changed, 50 insertions, 4 deletions
diff --git a/tdm/kfrontend/gentdmconf.c b/tdm/kfrontend/gentdmconf.c
index 0576eef56..e34f69b1a 100644
--- a/tdm/kfrontend/gentdmconf.c
+++ b/tdm/kfrontend/gentdmconf.c
@@ -632,8 +632,6 @@ static const char def_session1[] =
"#! /bin/sh\n"
"# Xsession - run as user\n"
"\n"
-"session=$1\n"
-"\n"
"# Note that the respective logout scripts are not sourced.\n"
"case $SHELL in\n"
" */bash)\n"
@@ -675,8 +673,56 @@ static const char def_session2[] =
" [ -f $HOME/.profile ] && . $HOME/.profile\n"
" ;;\n"
"esac\n"
-"# invoke global X session script\n"
-". /etc/X11/Xsession\n";
+"\n"
+"# source system & user xprofiles\n"
+"[ -f /etc/xprofile ] && . /etc/xprofile\n"
+"[ -f $HOME/.xprofile ] && . $HOME/.xprofile\n"
+"\n"
+"# run system xinitrc shell scripts\n"
+"if [ -d /etc/X11/xinit/xinitrc.d ]; then\n"
+" for i in /etc/X11/xinit/xinitrc.d/* ; do\n"
+" [ -x \"$i\" ] && . \"$i\"\n"
+" done\n"
+"fi\n"
+"\n"
+"# if the system Xsession startup script is present use it\n"
+"if [ -x /etc/X11/Xsession ]; then\n"
+" exec /etc/X11/Xsession \"$@\"\n"
+"else # otherwice fallback to running the session manually\n"
+" # apply Xresources configs\n"
+" if type xrdb >/dev/null 2>&1; then\n"
+" if [ -d /etc/X11/Xresources ]; then\n"
+" for i in /etc/X11/Xresources/*; do\n"
+" [ -f \"$i\" ] && xrdb -merge \"$i\"\n"
+" done\n"
+" elif [ -f /etc/X11/Xresources ]; then\n"
+" xrdb -merge /etc/X11/Xresources\n"
+" fi\n"
+" [ -f $HOME/.Xresources ] && xrdb -merge $HOME/.Xresources\n"
+" fi\n"
+" \n"
+" session=$1\n"
+"\n"
+" case \"$session\" in\n"
+" \"\")\n"
+" exec xmessage -center -buttons OK:0 -default OK \"Sorry, \\\"$DESKTOP_SESSION\\\" is not a valid session.\"\n"
+" ;;\n"
+" failsafe)\n"
+" exec xterm -geometry 80x24-0-0\n"
+" ;;\n"
+" custom)\n"
+" exec ${SHELL:-/bin/sh} $HOME/.xsession\n"
+" ;;\n"
+" default)\n"
+" exec " TDE_BINDIR "/starttde\n"
+" ;;\n"
+" *)\n"
+" eval exec \"$session\"\n"
+" ;;\n"
+" esac\n"
+"fi\n"
+"\n"
+"exec xmessage -center -buttons OK:0 -default OK \"Sorry, cannot execute $session. Check $DESKTOP_SESSION.desktop.\"\n";
static const char def_background[] =
"[Desktop0]\n"