Pagina 1 di 1

Selettore WM commandline con timeout

Inviato: 6 dicembre 2012, 16:54
da psychoweb
Ciao a tutti,

Avendo da tempo abbandonato il login grafico (per puro gusto estetico) ho avuto bisogno di uno script che mi permettesse di scegliere il window manager da far partire al login, con tanto di timeout.

Prendendo spunto dalla pagina wiki https://wiki.archlinux.org/index.php/Start_X_at_Login ho scritto qualche riga di bash, da mettere nel file .bash_profile:

Codice: Seleziona tutto

XINIT_TIMEOUT=3
XINIT_GREETER="\n\t\t\t\t\tChoose which window manager to start (type the corresponding number)\n\n\t\t\t\t\t\t1) openbox\n\t\t\t\t\t\t2) compiz\n\t\t\t\t\t\t3) awesome\n\t\t\t\t\t\t4) gala\n\n"

if [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] ; then
    clear
    echo -e "$XINIT_GREETER"
    echo "('0' to abort)"
    echo -n "Starting X server in "
    (for ((i=$XINIT_TIMEOUT;i>=1;i--)) ; do 
        echo -n "$i..."
        sleep 1
    done
    echo "0" ; sleep 1 ) &
    LOOP_PID=$!
    read -N 1 -t $(($XINIT_TIMEOUT +1)) -s XINIT_CHOICE
    kill $LOOP_PID && wait $LOOP_PID 2>/dev/null
    if [[ $XINIT_CHOICE != '' && $XINIT_CHOICE -eq 0 ]] ; then
        echo "Aborted."
    else
        exec xinit $XINIT_CHOICE >/dev/null 2>&1
    fi 
fi

[[ -f ~/.bashrc ]] && . ~/.bashrc 
Il file .xinitrc va mappato con i relativi numeri ovviamente, esempio:

Codice: Seleziona tutto

case $1 in
  compiz|2)
    exec fusion-icon -f
  ;;
  awesome|3)
    exec awesome
  ;;
  gala|4)
    exec gala
  ;;
  openbox|1|*)
    exec openbox-session
  ;;
esac 
Screenshot (simulato da terminale grafico ai fini della screenshot :) ) :
http://i.imgur.com/vWCiB.png

Il "trick" in questo caso è l'illusione del multithreading ottenuta sincronizzando il timeout del "read" con quello del conto alla rovescia.

Spero possa essere utile a qualcun altro oltre a me (e eventualmente aggiungere alla wiki questa possibilità)

Ciao,
psychoweb

Re: Selettore WM commandline con timeout

Inviato: 7 dicembre 2012, 10:29
da ambro
Bravo! Bel lavoro.
Potrebbe essermi utile nel mio mediacenter: di solito avvio openbox e sopra xbmc.
Con questo script potrei avviare direttamente xbmc di default e avviarlo in abbinata a openbox solo quando serve...
Proverò :D