diff options
| author | Alexander Golubev <fatzer2@gmail.com> | 2025-10-24 09:04:54 +0300 |
|---|---|---|
| committer | Alexander Golubev <fatzer2@gmail.com> | 2025-10-24 09:04:54 +0300 |
| commit | a6a97ca9b3c318229aff0a298cdb6905d6f00158 (patch) | |
| tree | 8266c200aa6635ae77c80bec1e9c2ca62d9d07d8 | |
| parent | f16cd594575b198df8451431951960677dd81b66 (diff) | |
| download | tdebase-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.c | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/tdm/kfrontend/gentdmconf.c b/tdm/kfrontend/gentdmconf.c index 0576eef56..e4f907693 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 " KDE_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" |
