commit 44d2b8589715aee16ab375b1a59521f3febfba87
parent ee458af46a0fb927f024f576dd8f1a5fbd71a8a2
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Sat, 16 Jan 2021 02:14:54 +0100
Allow stopping X server, loop waiting for plumber fifo
Diffstat:
2 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/bin/zshaskpass_lock b/bin/zshaskpass_lock
@@ -93,11 +93,16 @@ lock() {
setup-plumber-listener() {
local temp_r # keep plumb_r in temp variable and set it at the end to indicate success
+ local wait_loop=10
[[ -n $plumb_r ]] && return 0
- if [[ ! -p $plumber_fifo ]]; then
- mkfifo $plumber_fifo || return $?
- fi
+ while [[ ! -p $plumber_fifo ]]; do
+ if (( wait_loop-- <= 0 )); then
+ return 1
+ fi
+ sleep .5
+ #mkfifo $plumber_fifo || return $?
+ done
: >$plumber_fifo &! # background disowned task to keep the fifo's writing side open until it's opened below
sysopen -o cloexec -u temp_r -r $plumber_fifo || return $?
@@ -119,9 +124,12 @@ cmd() {
logincap ${1#c };;
(x)
logincap X\ $X || break
- run s6-svc -wu -o $x_container_service
- run s6-svstat $x_container_service
- setup-plumber-listener
+ if run s6-svc -wU -T 8000 -o $x_container_service; then
+ run s6-svstat $x_container_service
+ setup-plumber-listener
+ else
+ logincap stopX\ $X
+ fi
;;
(off|poweroff)
logincap o;;
diff --git a/sbin/logincaps b/sbin/logincaps
@@ -35,6 +35,14 @@ typeset -f -t initialize
# }
# typeset -f -t cleanup
+stop_x() {
+ (($+X)) || return 1
+ [[ $X == $1 ]] || return 2
+ shift
+ s6-svc -wD -T 8000 -t /run/service/X$X &&
+ chown root:root /run/Xauthority.$X
+}
+
run_x() {
(($+X)) || return 1
[[ $X == $1 ]] || return 2
@@ -138,6 +146,10 @@ main() {
cap_cmd run_x "${(Q@)${(z)${line#X }}}"
;;
+ (stopX [5678]*)
+ cap_cmd stop_x
+ ;;
+
(*) printf 'ECMD\n';;
esac
done