From 2c0b7b5d53cddb7f6fe6b613cd61d080b5b9449f Mon Sep 17 00:00:00 2001 From: "Josh.5" Date: Sun, 2 Oct 2022 11:37:43 +0000 Subject: [PATCH] Fix desktop and udev launch scripts These services were not responding to a SIGTERM We need to catch the SIGTERM from the parent script and kill the child process --- overlay/etc/supervisor.d/dbus.ini | 1 - overlay/etc/supervisor.d/desktop.ini | 2 +- overlay/usr/bin/start-desktop.sh | 28 +++++++++++++++++++----- overlay/usr/bin/start-udev.sh | 32 ++++++++++++++++++++++------ 4 files changed, 49 insertions(+), 14 deletions(-) mode change 100644 => 100755 overlay/usr/bin/start-desktop.sh mode change 100644 => 100755 overlay/usr/bin/start-udev.sh diff --git a/overlay/etc/supervisor.d/dbus.ini b/overlay/etc/supervisor.d/dbus.ini index 5534342..53e069e 100644 --- a/overlay/etc/supervisor.d/dbus.ini +++ b/overlay/etc/supervisor.d/dbus.ini @@ -7,7 +7,6 @@ directory=/ user=%(ENV_USER)s command=dbus-daemon --config-file=/usr/share/dbus-1/system.conf --nofork --nopidfile environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s" -autorestart=true stopsignal=INT stdout_logfile=/var/log/supervisor/dbus.log stdout_logfile_maxbytes=10MB diff --git a/overlay/etc/supervisor.d/desktop.ini b/overlay/etc/supervisor.d/desktop.ini index 9f0489b..c67ffe2 100644 --- a/overlay/etc/supervisor.d/desktop.ini +++ b/overlay/etc/supervisor.d/desktop.ini @@ -6,7 +6,7 @@ autorestart=true user=%(ENV_USER)s directory=/home/%(ENV_USER)s command=/usr/bin/start-desktop.sh -environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s" +environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s",XDG_RUNTIME_DIR="%(ENV_XDG_RUNTIME_DIR)s" stopsignal=INT stdout_logfile=/home/%(ENV_USER)s/.cache/log/desktop.log stdout_logfile_maxbytes=10MB diff --git a/overlay/usr/bin/start-desktop.sh b/overlay/usr/bin/start-desktop.sh old mode 100644 new mode 100755 index 7426d66..5a6c0ce --- a/overlay/usr/bin/start-desktop.sh +++ b/overlay/usr/bin/start-desktop.sh @@ -12,7 +12,15 @@ # I made this wrapper script so that I could easily try a range of desktop environments # -XDG_RUNTIME_DIR=/run/user/$(id -u ${USER}) +# CATCH TERM SIGNAL: +_term() { + kill -TERM "$desktop_pid" 2>/dev/null +} +trap _term SIGTERM + + +# CONFIGURE: +XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-:/tmp/.X11-unix/run} #XAUTHORITY=${XDG_RUNTIME_DIR:-/home/${USER}/.xauthority} XDG_DATA_DIRS="${XDG_DATA_DIRS}:/var/lib/flatpak/exports/share:/home/${USER}/.local/share/flatpak/exports/share" export $(dbus-launch) @@ -21,13 +29,23 @@ export $(dbus-launch) mkdir -p /etc/alternatives ln -sf /usr/share/backgrounds/steam.jpg /etc/alternatives/desktop-background + +# EXECUTE PROCESS: # Run the desktop environment in order of priority if [[ -e /usr/bin/cinnamon-session ]]; then - /usr/bin/cinnamon-session --display=${DISPLAY} + /usr/bin/cinnamon-session --display=${DISPLAY} & + desktop_pid=$! elif [[ -e /usr/bin/mate-session ]]; then - /usr/bin/mate-session + /usr/bin/mate-session & + desktop_pid=$! elif [[ -e /usr/bin/startplasma-x11 ]]; then - /usr/bin/startplasma-x11 + /usr/bin/startplasma-x11 & + desktop_pid=$! elif [[ -e /usr/bin/startxfce4 ]]; then - /usr/bin/startxfce4 + /usr/bin/startxfce4 & + desktop_pid=$! fi + + +# WAIT FOR CHILD PROCESS: +wait "$desktop_pid" diff --git a/overlay/usr/bin/start-udev.sh b/overlay/usr/bin/start-udev.sh old mode 100644 new mode 100755 index 84bdd95..77c931a --- a/overlay/usr/bin/start-udev.sh +++ b/overlay/usr/bin/start-udev.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash ### -# File: start-xorg.sh +# File: start-udev.sh # Project: bin # File Created: Tuesday, 12th January 2022 8:46:47 am # Author: Josh.5 (jsunnex@gmail.com) @@ -9,15 +9,33 @@ # Modified By: Josh.5 (jsunnex@gmail.com) ### +# CATCH TERM SIGNAL: +_term() { + kill -TERM "$monitor_pid" 2>/dev/null + kill -TERM "$trigger_pid" 2>/dev/null + kill -TERM "$udevd_pid" 2>/dev/null +} +trap _term SIGTERM + + +# EXECUTE PROCESS: # Start udev # Source: https://github.com/balena-io-playground/balena-base-images/ -if command -v udevd &> /dev/null; then - unshare --net udevd --daemon &> /dev/null +if command -v udevd &>/dev/null; then + unshare --net udevd --daemon &>/dev/null + udevd_pid=$! else - unshare --net /lib/systemd/systemd-udevd --daemon &> /dev/null + unshare --net /lib/systemd/systemd-udevd --daemon &>/dev/null + udevd_pid=$! fi -udevadm trigger &> /dev/null +udevadm trigger &>/dev/null +trigger_pid=$! +# Monitor kernel uevents +udevadm monitor & +monitor_pid=$! -# Monitry kernel uevents -udevadm monitor +# WAIT FOR CHILD PROCESS: +wait "$monitor_pid" +wait "$trigger_pid" +wait "$udevd_pid"