commit 6dfc6d8d245083704b6824620b93c50eca69055b
parent 9c7182d9ec1dac8021f28652a131c05dc825e219
Author: Jan Pobrislo <ccx@te2000.cz>
Date: Sun, 16 Mar 2025 20:26:26 +0000
changes from carbon: bin/handle-nsx11-message
Diffstat:
1 file changed, 82 insertions(+), 8 deletions(-)
diff --git a/bin/handle-nsx11-message b/bin/handle-nsx11-message
@@ -126,19 +126,85 @@ abduco-run() {
if ! s6-sudo $x_container_tmpfs/run/exec/exec urxvt \
-name abduco:${session//./-}:${container//./-} \
-title "[$session@$container] abduco" \
- -e abduco -a /.inbox/${socket#/run/containers/}
+ -e abduco -a /run/inbox/${socket#/run/containers/}
then
- nag -m "Failed to spawn terminal for abduco session: /.inbox/${socket#/run/containers/}"
+ nag -m "Failed to spawn terminal for abduco session: /run/inbox/${socket#/run/containers/}"
fi
}
typeset -f -t abduco-run
+abduco-xpra-run() {
+ local display container session cmd rest out
+ local -a socket
+ display=${1%%/*}
+ rest=${1#*/}
+
+ container=${rest%%/*}
+ rest=${rest#*/}
+
+ session=${rest%%/*}
+ if [[ $rest == */* ]]; then
+ cmd=${rest#*/}
+ fi
+
+ if [[ $container == */* ]]; then
+ nag -m "Invalid container name: contains slashes"
+ return 1
+ fi
+
+ if [[ $session == */* ]]; then
+ nag -m "Invalid session name: contains slashes"
+ return 1
+ fi
+
+ if ! ensure-container-started $container; then
+ nag -m "Failed to start container ${(qqq)container}"
+ return 1
+ fi
+
+ socket=( /run/containers/$container/run/abduco/$USER/$session@*(=N) )
+ if (( $#socket == 0 )); then
+ if [[ -n $cmd ]]; then
+ if out=$( 2>&1 s6-sudo /run/containers/$container/run/exec/exec execlineb -c "env TERM=rxvt-unicode-256color abduco -n ${(qqq)session} $cmd" ); then
+ socket=( /run/containers/$container/run/abduco/$USER/$session@*(=N) )
+ if (( $#socket == 0 )); then
+ nag -m "Session spawned but no socket found."
+ return 1
+ fi
+ else
+ nag -m "Error spawning session (exit $?): ${(qqq)out}"
+ return 1
+ fi
+ else
+ nag -m "Session ${(qqq)session} does not exist in ${(qqq)container} and no command provided."
+ return 1
+ fi
+ fi
+ if (( $#socket > 1 )); then
+ nag -m "More than one socket found for session ${(qqq)session} in ${(qqq)container}: ${socket:t}"
+ return 1
+ fi
+ if ! link-to-container-inbox $container xsession.$X.$USER ${socket#/run/containers/${container}}; then
+ nag -m "Failed to link abduco socket."
+ return 1
+ fi
+ if ! s6-sudo $x_container_tmpfs/run/exec/exec env DISPLAY=$display urxvt \
+ -fn 'xft:Terminus:pixelsize=16,xft:Unifont:pixelsize=16' \
+ -name abduco:${session//./-}:${container//./-} \
+ -title "[$session@$container] abduco" \
+ -e abduco -a /run/inbox/${socket#/run/containers/}
+ then
+ nag -m "Failed to spawn terminal for abduco session: /run/inbox/${socket#/run/containers/}"
+ fi
+}
+typeset -f -t abduco-xpra-run
+
x11-run() {
if ! [[ $1 == */*/*/* ]]; then
nag -m "Got malformed x11 command: ${(qqq)1}"
return 1
fi
- local container display cookie cmd rest out
+ local container display cookie cmd rest out cmd_ret
container=${1%%/*}
rest=${1#*/}
@@ -178,12 +244,13 @@ x11-run() {
return 1
fi
- if out=$( 2>&1 env EXEC_PATH=/run/containers/$container/run/exec/x11 execlineb -c "importas -i -u EXEC_PATH EXEC_PATH s6-sudo \$EXEC_PATH ${(qqq)display} ${(qqq)cookie} $cmd" ); then
- return 0
- else
- nag -m "Error spawning session (exit $?): ${(qqq)out}"
+ out=$( 2>&1 env EXEC_PATH=/run/containers/$container/run/exec/x11 execlineb -c "importas -i -u EXEC_PATH EXEC_PATH s6-sudo \$EXEC_PATH ${(qqq)display} ${(qqq)cookie} $cmd" | tail -n 5 )
+ cmd_ret=$pipestatus[1]
+ if (($cmd_ret)); then
+ nag -m "Error spawning session (exit $cmd_ret): ${(qqq)out}"
return 1
fi
+ return 0
}
typeset -f -t x11-run
@@ -291,7 +358,7 @@ pass-input() {
local wid=$1
local entry=$2
pass show -- $entry | \
- awk -v wid=$wid 'NR == 1 { printf("type --window %s %s\n", wid, $0) }' | \
+ awk -v wid=$wid 'NR == 1 { printf("type --window \"%s\" \"%s\"\n", wid, $0) }' | \
s6-sudo $x_container_tmpfs/run/exec/exec xdotool -
# s6-sudo $x_container_tmpfs/run/exec/exec forstdin IN importas -i IN IN i3-nagbar -f fixed -t warning -m '$IN'
}
@@ -332,6 +399,10 @@ case $data in
(abduco/*/*)
abduco-run "${data#*/}"
;;
+
+ (abduco-xpra/*/*/*)
+ abduco-xpra-run "${data#*/}"
+ ;;
(x11/*)
x11-run "${data#*/}"
@@ -369,6 +440,9 @@ case $data in
pass-input $wid $entry
;;
+ (amixer/*)
+ local amixer_args="${data#amixer/}"
+ execlineb -c "amixer $amixer_args"
(*)
nag -t warning -m "Powerbox got message: ${(qqq)plumb_data}"
;;