Revamped xsession
Now supports Junest and should be better integrated with DM
This commit is contained in:
parent
46abb5f07a
commit
45e32adc61
|
@ -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"
|
||||
|
|
115
xsession
115
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"
|
||||
# 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
|
||||
found=1
|
||||
# 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
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue