mrrl-logincaps

MRRL version of logincaps
git clone https://ccx.te2000.cz/git/mrrl-logincaps
Log | Files | Refs

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:
Mbin/zshaskpass_lock | 20++++++++++++++------
Msbin/logincaps | 12++++++++++++
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