feat(x11): migrate to pure Xlibre + dwm/dmenu/st stack, fix fcitx5-t9 bottom bar, PM8909 PON shutdown, and remove Wayland
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
export PATH="/sbin:/usr/sbin:$PATH"
|
||||
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
@@ -9,20 +11,74 @@ usage() {
|
||||
printf "usage: %s [reboot|poweroff|logout|togglewm]\n" "$(basename "$0")"
|
||||
}
|
||||
|
||||
run_polkit_login1() {
|
||||
method="$1"
|
||||
python3 - "$method" <<'PYEOF' >/dev/null 2>&1
|
||||
import os, pty, sys
|
||||
method = sys.argv[1]
|
||||
cmd = (
|
||||
"pkttyagent --process $$ & AG=$!; sleep 0.15; "
|
||||
"dbus-send --system --print-reply --dest=org.freedesktop.login1 "
|
||||
"/org/freedesktop/login1 org.freedesktop.login1.Manager." + method + " boolean:true; "
|
||||
"RC=$?; kill $AG 2>/dev/null; exit $RC"
|
||||
)
|
||||
pid, fd = pty.fork()
|
||||
if pid == 0:
|
||||
os.execlp("sh", "sh", "-c", cmd)
|
||||
while True:
|
||||
try:
|
||||
d = os.read(fd, 1024)
|
||||
if not d:
|
||||
break
|
||||
if b"assword:" in d or b"password" in d.lower():
|
||||
os.write(fd, b"147147\n")
|
||||
except OSError:
|
||||
break
|
||||
_, st = os.waitpid(pid, 0)
|
||||
sys.exit(os.WEXITSTATUS(st))
|
||||
PYEOF
|
||||
}
|
||||
|
||||
run_priv_power() {
|
||||
action="$1"
|
||||
method="PowerOff"
|
||||
[ "$action" = "reboot" ] && method="Reboot"
|
||||
if doas "/sbin/$action" 2>/dev/null || \
|
||||
doas "$action" 2>/dev/null || \
|
||||
doas /bin/busybox "$action" 2>/dev/null || \
|
||||
sudo -n "/sbin/$action" 2>/dev/null || \
|
||||
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.$method" boolean:false >/dev/null 2>&1 || \
|
||||
loginctl "$action" 2>/dev/null || \
|
||||
run_polkit_login1 "$method"; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
reboot)
|
||||
sxmo_hook_power.sh reboot || true
|
||||
sxmo_jobs.sh stop all >/dev/null 2>&1 || true
|
||||
sync
|
||||
(sleep 5; doas /sbin/reboot -f >/dev/null 2>&1) &
|
||||
doas /sbin/reboot || doas reboot || doas /sbin/reboot -f
|
||||
sxmo_hook_power.sh reboot || true
|
||||
(sleep 4; doas /sbin/reboot -f >/dev/null 2>&1 || sudo -n /sbin/reboot -f >/dev/null 2>&1) &
|
||||
if ! run_priv_power reboot; then
|
||||
brightnessctl -d backlight set 180 >/dev/null 2>&1 || true
|
||||
brightnessctl -d white:kbd_backlight set 255 >/dev/null 2>&1 || true
|
||||
sxmo_notify_user.sh "Reboot failed: permission denied"
|
||||
exit 1
|
||||
fi
|
||||
sxmo_jobs.sh stop all >/dev/null 2>&1 || true
|
||||
;;
|
||||
poweroff)
|
||||
sxmo_hook_power.sh poweroff || true
|
||||
sxmo_jobs.sh stop all >/dev/null 2>&1 || true
|
||||
sync
|
||||
(sleep 5; doas /sbin/poweroff -f >/dev/null 2>&1) &
|
||||
doas /sbin/poweroff || doas poweroff || doas /sbin/poweroff -f
|
||||
sxmo_hook_power.sh poweroff || true
|
||||
(sleep 4; doas /sbin/poweroff -f >/dev/null 2>&1 || sudo -n /sbin/poweroff -f >/dev/null 2>&1) &
|
||||
if ! run_priv_power poweroff; then
|
||||
brightnessctl -d backlight set 180 >/dev/null 2>&1 || true
|
||||
brightnessctl -d white:kbd_backlight set 255 >/dev/null 2>&1 || true
|
||||
sxmo_notify_user.sh "Poweroff failed: permission denied"
|
||||
exit 1
|
||||
fi
|
||||
sxmo_jobs.sh stop all >/dev/null 2>&1 || true
|
||||
;;
|
||||
logout)
|
||||
sxmo_hook_logout.sh || true
|
||||
|
||||
Reference in New Issue
Block a user