From d155edcbcbffcc1f53ed1ec0d7cb2b33831aded8 Mon Sep 17 00:00:00 2001 From: Debian Live user Date: Sat, 29 Apr 2023 16:27:38 -0400 Subject: firestartx: working w/ new code --- src/firestartx | 72 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/src/firestartx b/src/firestartx index 636fc84..1129f9d 100755 --- a/src/firestartx +++ b/src/firestartx @@ -1,5 +1,10 @@ #!/bin/bash +if [ $# = 0 ] +then + set -- firestart +fi + get_new_display() { for ((n=1; n<99; ++n)) @@ -15,44 +20,53 @@ get_new_display() get_new_display || exit -if [ $# = 0 ] -then - set -- firestart -fi +dpi=$(xrdb -query | sed -n -e 's/^Xft.dpi:[ \t]*//p') -# TITLE=$* # lol, startx doesn't support arguments with spaces -TITLE=$1 -TITLE= # blank title documents the screen grab keys in the title +launch_xserver() +{ + "$@" -- "$(which Xephyr)" "$NEW_DISPLAY" \ + -resizeable \ + -p 0 \ + -terminate \ + ${dpi:+ -dpi "$dpi"} +} if [ "$1" != firestart ] then - USE_XINIT=y -fi - -if [ "$USE_XINIT" ] -then - set -x case "$1" in - /*) ;; - *) f1=$(which "$1") || exit - shift - set -- "$f1" "$@" - ;; + */*) + [ -x "$1" ] || exit + ;; + *) + f1=$(command -v "$1") || exit + shift + set -- "$f1" "$@" + ;; esac - xinit "$@" -- $(which Xephyr) "$NEW_DISPLAY" -resizeable -p 0 -terminate ${TITLE:+ -title "$TITLE"} + launch_xserver xinit "$@" else - set -x - dpi=$(xrdb -query | sed -n -e 's/^Xft.dpi:[ \t]*//p') - startx -- "$(which Xephyr)" "$NEW_DISPLAY" \ - -resizeable \ - -p 0 \ - -terminate \ - ${TITLE:+ -title "$TITLE"} \ - ${dpi:+ -dpi "$dpi"} \ - & - if [ $# -gt 0 ] + XSESSION_IS_FIRESTARTX= + if grep -qF XSESSION_IS_FIRESTARTX ~/.xsession then + # Our xsession will launch firestartx along with i3, etc. + XSESSION_IS_FIRESTARTX=y launch_xserver startx ~/.xsession & + else + # We need to wait for xrdb to be run, or else firefox will + # disastrously start without the Xft.dpi setting. But we + # cannot poll on the setting forever since it might not exist + # in every configuration. + launch_xserver startx & + enable -f /usr/lib/bash/sleep >/dev/null 2>&1 || true + set -x + tries=0 + while [ $tries -lt 40 ] && + ! xrdb -display "$NEW_DISPLAY" -query | grep -q '^Xft.dpi:' + do + sleep 0.05 + tries=$((tries + 1)) + done DISPLAY=$NEW_DISPLAY "$@" & fi + wait fi -- cgit v1.2.3