mirror of
https://github.com/Snigdha-OS/snigdhaos-kernel-switcher.git
synced 2025-09-20 12:54:56 +02:00
🚀 feat(_shell): add executer
This commit is contained in:
96
usr/bin/snigdhaos-kernel-switcher
Normal file
96
usr/bin/snigdhaos-kernel-switcher
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
# this script should not be run as root
|
||||
# the polkit agent running on the desktop environment should prompt for root password
|
||||
|
||||
echo "---------------------------------------------------------------------------"
|
||||
echo "[INFO]: Checking session"
|
||||
test $(whoami) == "root" && echo "[ERROR]: Do not run this script as root." && exit 1
|
||||
test -z $DISPLAY && echo "[ERROR]: DISPLAY variable is not set." && exit 1
|
||||
|
||||
# check session is either one of X11, Wayland or TTY
|
||||
SESSION=$(loginctl show-session $(loginctl|grep $(whoami) | awk '{print $1}') -p Type | awk -F= '{print $2}' | grep "x11\|wayland\|tty")
|
||||
test -z "$SESSION" && echo "[ERROR]: Failed to verify session for user, SESSION = $SESSION" && exit 1
|
||||
|
||||
XAUTHORITY=$(xauth info | awk -F"Authority file:" '{print $2}' | tr -d ' ')
|
||||
test -z "$XAUTHORITY" && echo "[ERROR]: XAUTHORIY file is not set" && exit 1
|
||||
test -s "$XAUTHORITY" || touch "$XAUTHORITY"
|
||||
|
||||
XAUTH_HONORED=$(xauth info | awk -F"Changes honored:" '{print $2}' | tr -d ' ')
|
||||
test $XAUTH_HONORED = "yes" || echo "[ERROR]: Xauth changes honored = no, restart X server" || exit 1
|
||||
|
||||
# GTK_A11Y=none - fixes the dbus-launch errors with GTK4
|
||||
|
||||
echo "[INFO]: XAUTHORITY = $XAUTHORITY"
|
||||
echo "[INFO]: DBUS_SESSION_BUS_ADDRESS = $DBUS_SESSION_BUS_ADDRESS"
|
||||
echo "[INFO]: DESKTOP SESSION = $DESKTOP_SESSION"
|
||||
|
||||
function start_in_wayland() {
|
||||
echo "[INFO]: Starting in Wayland session"
|
||||
xauth gen $DISPLAY &> /dev/null
|
||||
|
||||
case "$DESKTOP_SESSION" in
|
||||
plasma | gnome)
|
||||
pkexec env DISPLAY=$DISPLAY WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" XAUTHORITY=$XAUTHORITY DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS GDK_BACKEND=x11 GTK_A11Y=none '/usr/share/archlinux-kernel-manager/archlinux-kernel-manager.py'
|
||||
;;
|
||||
*)
|
||||
pkexec env DISPLAY=$DISPLAY WAYLAND_DISPLAY="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" XAUTHORITY=$XAUTHORITY DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS GTK_A11Y=none '/usr/share/archlinux-kernel-manager/archlinux-kernel-manager.py'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
function start_in_x11() {
|
||||
echo "[INFO]: Starting in X11 session"
|
||||
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS GTK_A11Y=none '/usr/share/archlinux-kernel-manager/archlinux-kernel-manager.py'
|
||||
}
|
||||
|
||||
function start_in_tty() {
|
||||
echo "[INFO]: Starting in TTY session"
|
||||
pkexec '/usr/share/archlinux-kernel-manager/archlinux-kernel-manager.py'
|
||||
}
|
||||
|
||||
case "$SESSION" in
|
||||
"wayland")
|
||||
# Wayland session, generate Xauth session cookie for $DISPLAY
|
||||
echo "[INFO]: Display = $DISPLAY"
|
||||
echo "[INFO]: Session = $SESSION"
|
||||
start_in_wayland
|
||||
;;
|
||||
"x11")
|
||||
# X11 session, don't do anything here
|
||||
echo "[INFO]: Display = $DISPLAY"
|
||||
echo "[INFO]: Session = $SESSION"
|
||||
|
||||
# just show msg on whether the Xauth session cookie is setup
|
||||
start_in_x11
|
||||
;;
|
||||
"tty")
|
||||
# TTY session, as user may not use a display manager
|
||||
echo "[INFO]: Display = $DISPLAY"
|
||||
echo "[INFO]: Session = $SESSION"
|
||||
|
||||
start_in_tty
|
||||
;;
|
||||
*)
|
||||
# anything here is an unknown session, fallback to XDG_SESSION_TYPE
|
||||
echo "[INFO]: Display = $DISPLAY"
|
||||
echo "[WARN]: Session could not be verified, using XDG_SESSION_TYPE"
|
||||
|
||||
case "$XDG_SESSION_TYPE" in
|
||||
"wayland")
|
||||
start_in_wayland
|
||||
;;
|
||||
"tty")
|
||||
start_in_tty
|
||||
;;
|
||||
"x11")
|
||||
start_in_x11
|
||||
;;
|
||||
*)
|
||||
echo "[ERROR]: $XDG_SESSION_TYPE is empty, cannot continue"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
echo "---------------------------------------------------------------------------"
|
Reference in New Issue
Block a user