From 45e32adc61737d9b2c9822686a60548d3f4664f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geoffrey=20=E2=80=9CFrogeye=E2=80=9D=20Preud=27homme?= Date: Fri, 11 Jun 2021 21:38:47 +0200 Subject: [PATCH] Revamped xsession Now supports Junest and should be better integrated with DM --- config/xinitrc | 2 - xsession | 119 +++++++++++++++++++++++++++++++------------------ 2 files changed, 76 insertions(+), 45 deletions(-) diff --git a/config/xinitrc b/config/xinitrc index 3a18a90..44fda3d 100755 --- a/config/xinitrc +++ b/config/xinitrc @@ -4,8 +4,6 @@ # # Executed by xinit (startx) -echo ~/.xinitrc - if [ -d /etc/X11/xinit/xinitrc.d ]; then for f in /etc/X11/xinit/xinitrc.d/*; do [ -x "$f" ] && . "$f" diff --git a/xsession b/xsession index a6fe57f..a728d42 100755 --- a/xsession +++ b/xsession @@ -3,58 +3,91 @@ # # ~/.xsession # -# Might be sourced by DM when on custom -# TODO Test that on a DM I guess? +# Sourced by display managers # +# Load Xresources [ -f ~/.config/Xresources/main ] && xrdb -I"$HOME" ~/.config/Xresources/main + +# Disable the bell xset b off -found=0 -tryDM() { - if [ $found -eq 0 ]; then - parameters='' - case $1 in - awesome ) executable=awesome;; - bspwm ) executable=bspwm;; - catwm ) executable=catwm;; - cinnamon ) executable=cinnamon-session;; - dwm ) executable=dwm;; - enlightenment ) executable=enlightenment_start;; - ede ) executable=startede;; - fluxbox ) executable=startfluxbox;; - gnome ) executable=gnome-session;; - gnome-classic ) executable=gnome-session; parameters="--session=gnome-classic";; - i3|i3wm ) executable=i3;; - icewm ) executable=icewm-session;; - jwm ) executable=jwm;; - kde ) executable=startkde;; - mate ) executable=mate-session;; - monster|monsterwm ) executable=monsterwm;; - notion ) executable=notion;; - openbox ) executable=openbox-session;; - plasma ) executable=startplasma-x11;; - unity ) executable=unity;; - xfce|xfce4 ) executable=startxfce4;; - xmonad ) executable=xmonad;; - *) executable=$1;; - esac - if command -v "$executable" - then - found=1 - exec "$executable" $parameters - fi +# Folders to search for desktop environments (DE) in +sessions_dirs="/usr/share/xsessions" + +# If we have locally installed DE try them before system ones +sessions_dir_local="$HOME/.local/share/xsessions" +if [ -d "$sessions_dir_local" ] +then + sessions_dirs="$sessions_dir_local $sessions_dirs" +fi + +# If we have junest installed DE try them before all others +sessions_dir_junest="$HOME/.local/share/xsessions" +if [ -d "$sessions_dir_junest" ] +then + sessions_dirs="$sessions_dir_junest $sessions_dirs" +fi + +startSession() { + session_dir="$1" + session_name="$2" + + session_file="${session_dir}/${session_name}.desktop" + executable="$(grep ^Exec= "$session_file" | cut -d'=' -f2)" + # TODO Does this work with parameters? + # gnome-classic might need some + + # If this is a Junest DE, we need to wrap it + if [ "$sessions_dir" = "$sessions_dir_junest" ] + then + # Some DMs enforce that to you, + # which shows warning on Junest + unset LD_PRELOAD + + # The intended way: + # exec ~/.local/bin/junest "$executable" $parameters + # Too restricted to the outside (e.g. Yubikey isn't accessible) + + # The custom way + exec ~/.local/bin/junest --backend-args "--dev-bind /run /run" "$executable" $parameters + + # The fallback wrappers way + # export PATH="$PATH:~/.junest/usr/bin_wrappers" + # exec "$executable" $parameters + # Should work but doesn't, I forgot why + + # The "I do what I want" way + #exec bwrap --bind $HOME/.junest / --bind $HOME $HOME --bind /tmp /tmp --proc /proc --dev-bind /dev /dev --dev-bind /run /run "$executable" $parameters + # Even Alacritty doesn't work here + fi + + exec "$executable" $parameters +} + +trySession() { # session_name + session_name="$1" + for sessions_dir in $sessions_dirs + do + session_file="$sessions_dir/${session_name}.desktop" + if [ -f "$session_file" ] + then + startSession "$sessions_dir" "$session_name" + fi + done } if [ -n "$1" ] then - tryDM "$1" + trySession "$1" fi -tryDM i3 -tryDM xfce4 -tryDM mate -tryDM plasma -tryDM gnome -tryDM kde +trySession i3 +trySession xfce4 +trySession mate +trySession plasma +trySession gnome +trySession kde +# If we found nothing by then, +# I guess it's up to the DM to default to something