Script
|
Sezione dedicata a
script per la shell
|
1-
SlackPackager (versione testuale) --by
Simone Bianchini (Velenux)
2-
SlackPackager v.0.2 (versione grafica)
--by Simone Bianchini (Velenux)
3- XStart
--by Luigi A. Bassetti (Wolf64)
1) SlackPackager-
script per la creazione di pacchetti Slackware .tgz
Copiare lo script, salvarlo come slackpackager.sh,
attribuirgli i permessi di esecuzione con:
chmod +x slackpackager.sh
Lanciarlo dalla directory dove si trovano i sorgenti da
compilare con:
#./slackpackager.sh
code:
#!/bin/bash
#
# SlackPackager
#
# Copyright (c) 2003, Simone Bianchini, http://web.tiscali.it/gnu.linux.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
#
# Un ringraziamento particolare a Luigi A. Bassetti...per avermi
spronato!
#
# SlackPackager permette di creare in modo del tutto automatico
paccheti .tgz per Slackware
# a partire dai sorgenti in formato [nome pacchetto]-[versione].tar.gz
o tar.bz2
# Lo script richiede all'utente solo l'inserimento del nome pacchetto,
della versione, del
# formato dei tarball e dell'architettura su cui intende compilare i
sorgenti per ottenere una
# compilazione ottimizzata attraverso l'uso delle CFLAGS di
ottimizzazione del compilatore.
# Gli eseguibili ottenuti vengono infine "strippati" ovvero snelliti
per ottenere applicazioni
# più leggere. Lo script deve essere lanciato nella directory dove si
trovano i sorgenti che
# si intende utilizzare e provvederà al termine di tutte le operazioni
a spostare il pacchetto
# nella directory di lavoro stessa. Provvederà anche ad eliminare tutto
ciò che di
# superfluo lo script e la compilazione hanno prodotto. -- Have fun!!
#
#
# Bisogna essere root
if [ "`/usr/bin/id -u`" != 0 ] ; then
echo "Bisogna essere root per avviare questo script"
exit 1
fi
echo "Benvenuto in SlackPackager: potrai creare un pacchetto Slackware
a partire dai sorgenti"
echo "dell'applicazione con ottimizzazioni nella compilazione per
architetture i386 e i486"
sleep 1
echo
echo
POS=`pwd`
if [ "$TMP" = "" ] ; then
TMP=/tmp
fi
PKG=$TMP/package
echo -e "Puoi creare un pacchetto .tgz scegliendo tra questi tarball
dei sorgenti:\n"
sleep 1
ls *tar.gz *tar.bz2
sleep 1
echo
echo "Inserisci il nome del programma come visualizzato nel tarball
scelto"
echo -e "escludendo la versione indicata:\n"
read NOME
echo -e "Inserisci la versione del programma:\n"
read VERSIONE
echo "Inserisci l'architettura di riferimento - i386 o i486 - per
ottenere"
echo -e "un'ottimizzazione della compilazione per il tuo sistema\n"
read ARCHITETTURA
echo -e "Inserisci il formato del tarball dei sorgenti tar.gz o
tar.bz2:\n"
read FORMATO
NAME=$NOME
VERSION=$VERSIONE
ARCH=$ARCHITETTURA
BUILD=1
FORMAT=$FORMATO
if [ ! -d $TMP ] ; then
mkdir -p $TMP
fi
if [ ! -d $PKG ] ; then
mkdir -p $PKG
fi
echo "Devi scegliere il "PATH" per l'installazione. Leggi a proposito i
file"
echo "README e INSTALL nei sorgenti dell'applicazione. Puoi mantenere i"
echo -e "percorsi di default o modificarli. Scegliete da questa
lista:\n"
lista="/usr /usr/local"
select scelta in $lista
do
if [ $scelta = /usr ] ; then
echo "Hai scelto come percorso "/usr" secondo lo standard Slackware"
mkdir -p $PKG/usr
PERCORSO=$PKG/usr
mkdir -p $PERCORSO/bin
mkdir -p $PERCORSO/etc
mkdir -p $PERCORSO/share
mkdir -p $PERCORSO/lib
mkdir -p $PERCORSO/doc/$NAME-$VERSION
mkdir -p $PERCORSO/man
mkdir -p $PERCORSO/sbin
echo
echo "Ora verranno compilati i sorgenti - L'operazione richiederà del
tempo :-)"
sleep 2
if [ $FORMAT = tar.gz ] ; then
tar xvzf $POS/$NAME-$VERSION.$FORMAT
elif [ $FORMAT = tar.bz2 ] ; then
tar xvfj $POS/$NAME-$VERSION.$FORMAT
fi
cd $NAME-$VERSION
CFLAGS="-O2 -march=$ARCH -mcpu=i686" ./configure --prefix=/usr
make
make prefix=$PERCORSO install
make clean
cp -a AUTHORS INSTALL README ChangeLog $PERCORSO/doc/$NAME-$VERSION
strip $PERCORSO/bin/*
chown -R root.bin $PERCORSO/bin
chmod 644 $PERCORSO/doc/$NAME-$VERSION/*
chown -R root.root $PERCORSO/doc/$NAME-$VERSION
chown -R root.root $PERCORSO/share
mkdir -p $PKG/install
echo
echo "+++ Inserisci una descrizione del pacchetto +++"
echo
echo "HOW TO EDIT THIS FILE"
echo "The "handy ruler" below makes it easier to edit a package
description. Line"
echo "up the first '|' above the ':' following the base package name,
and the '|'"
echo "on the right side marks the last column you can put a character
in. You must"
echo "make exactly 11 lines for the formatting to be correct. It's also"
echo "customary to leave one space after the ':'."
echo
echo
echo "Inserisci una descrizione del pacchetto rispettando la
formattazione"
echo -e "definita dall' Handy Ruler e inserendo un max di 11 righe:\n"
echo -e "+++ Digita exit + invio per concludere la descrizione +++\n"
echo
echo
"|-----handy-ruler------------------------------------------------------|"
read DESC
echo "$NAME: $DESC" > $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
while [ "$DESC1" != "exit" ]
do
read DESC1
echo "$NAME: $DESC1" >> $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
done
if [ -e $POS/slack-desc ] ; then
cat $POS/slack-desc > $PKG/install/slack-desc
fi
if [ -e $POS/doinst.sh ] ; then
cat $POS/doinst.sh > $PKG/install/doinst.sh
fi
cd $PKG
makepkg -l y -c n $TMP/$NAME-$VERSION-$ARCH-$BUILD.tgz
echo
echo "++ Il pacchetto $NAME-$VERSION-$ARCH-$BUILD.tgz è stato
correttamente creato ++"
sleep 1
echo "++++ Happy Slacking...and have fun ++++"
elif [ $scelta = /usr/local ] ; then
echo "Hai scelto /usr/local come percorso"
mkdir -p $PKG/usr/local
PERCORSO=$PKG/usr/local
mkdir -p $PERCORSO/bin
mkdir -p $PERCORSO/etc
mkdir -p $PERCORSO/share
mkdir -p $PERCORSO/lib
mkdir -p $PERCORSO/doc/$NAME-$VERSION
mkdir -p $PERCORSO/man
mkdir -p $PERCORSO/sbin
echo "Ora verranno compilati i sorgenti - L'operazione richiederà del
tempo :-)"
sleep 2
if [ $FORMAT = tar.gz ] ; then
tar xvzf $POS/$NAME-$VERSION.$FORMAT
elif [ $FORMAT = tar.bz2 ] ; then
tar xvf --bizip2 $POS/$NAME-$VERSION.$FORMAT
fi
cd $NAME-$VERSION
CFLAGS="-O2 -march=$ARCH -mcpu=i686" ./configure --prefix=/usr/local
make
make prefix=$PERCORSO install
make clean
cp -a AUTHORS INSTALL README BUGS ChangeLog $PERCORSO/doc/$NAME-$VERSION
strip $PERCORSO/bin/*
chown -R root.bin $PERCORSO/bin
chmod 644 $PERCORSO/doc/$NAME-$VERSION/*
chown -R root.root $PERCORSO/doc/$NAME-$VERSION
chown -R root.root $PERCORSO/share
echo
echo "+++ Inserisci una descrizione del pacchetto +++"
echo
echo "HOW TO EDIT THIS FILE"
echo "The "handy ruler" below makes it easier to edit a package
description. Line"
echo "up the first '|' above the ':' following the base package name,
and the '|'"
echo "on the right side marks the last column you can put a character
in. You must"
echo "make exactly 11 lines for the formatting to be correct. It's also"
echo "customary to leave one space after the ':'."
echo
echo
echo "Inserisci una descrizione del pacchetto rispettando la
formattazione"
echo -e "definita dall' Handy Ruler e inserendo un max di 11 righe:\n"
echo -e "+++ Digita exit + invio per concludere la descrizione +++\n"
echo
echo
"|-----handy-ruler------------------------------------------------------|"
read DESC
echo "$NAME: $DESC" > $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
while [ "$DESC1" != "exit" ]
do
read DESC1
echo "$NAME: $DESC1" >> $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
done
if [ -e $POS/slack-desc ] ; then
mkdir -p $PKG/install
cat $POS/slack-desc > $PKG/install/slack-desc
fi
if [ -e $POS/doinst.sh ] ; then
cat $POS/doinst.sh > $PKG/install/doinst.sh
fi
cd $PKG
makepkg -l y -c n $TMP/$NAME-$VERSION-$ARCH-$BUILD.tgz
echo
echo " ++ Il pacchetto $NAME-$VERSION-$ARCH-$BUILD.tgz è stato
correttamente creato ++"
echo " ++++ e verrà spostato nella directory attuale ++++"
echo
sleep 1
echo "++++ Happy Slacking...and have fun ++++"
echo
echo
fi
break
done
mv $TMP/$NAME-$VERSION-$ARCH-$BUILD.tgz $POS
rm -rf $PKG
rm -rf $POS/slack-desc
rm -rf $POS/$NAME-$VERSION
exit 0
/code
2) SlackPackager
v.0.2 - script per la
creazione di pacchetti Slackware .tgz
code:
#!/bin/sh
#
# SlackPackager v. 0.2
#
# Copyright (c) 2003, Simone Bianchini, http://web.tiscali.it/gnu.linux.
#
# This program is free software; you can redistribute it
and/or modify
# it under the terms of the GNU General Public License as
published by
# the Free Software Foundation; either version 2 of the
License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be
useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty
of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
#
# Un ringraziamento particolare a Luigi A. Bassetti...per
avermi spronato!
#
# SlackPackager permette di creare in modo del tutto
automatico paccheti .tgz per Slackware
# a partire dai sorgenti in formato [nome
pacchetto]-[versione].tar.gz o tar.bz2
# Lo script richiede all'utente solo l'inserimento del nome
pacchetto, della versione, del
# formato dei tarball e dell'architettura su cui intende
compilare i sorgenti per ottenere una
# compilazione ottimizzata attraverso l'uso delle CFLAGS di
ottimizzazione del compilatore.
# Gli eseguibili ottenuti vengono infine "strippati" ovvero
snelliti per ottenere applicazioni
# più leggere. Lo script deve essere lanciato nella directory
dove si trovano i sorgenti che
# si intende utilizzare e provvederà al termine di tutte le
operazioni a spostare il pacchetto
# nella directory di lavoro stessa. Provvederà anche ad
eliminare tutto ciò che di
# superfluo lo script e la compilazione hanno prodotto. --
Have fun!!
#
# Questa versione ha una GUI costruita sul tool "dialog"
presente in Slackware.
#
# Bisogna essere root
if [ "${UID}" != 0 ] ; then
dialog --title "SlackPackager" --msgbox "Bisogna essere root
per avviare questo script" 10 35
exit 1
fi
dialog --title "SlackPackager" --msgbox "
=====================================================
+++++ Slack-Packager v. 0.2 --velenux coded +++++
=====================================================
Copyright (c) 2003, Simone Bianchini,
http://web.tiscali.it/gnu.linux.
Potrai creare pacchetti Slackware (.tgz) a partire dai
sorgenti dell'applicazione con ottimizzazioni nella compilazione per
architetture i386 e i486" 20 60
POS=`pwd`
if [ "$TMP" = "" ] ; then
TMP=/tmp;
fi
mkdir -p $TMP/package
PKG=$TMP/package
dialog --title "SlackPackager v.0.2" --msgbox "
++++=============================================++++
Puoi creare un pacchetto .tgz scegliendo tra questi
tarball dei sorgenti:
=====================================================
`ls *tar.gz *tar.bz2`" 20 60
dialog --title "SlackPackager v.0.2" --inputbox "
++++=============================================++++
Inserisci il NOME del programma come visualizzato
nel tarball scelto escludendo la versione indicata:
=====================================================
`ls *tar.gz *tar.bz2`" 20 60 2> /tmp/nome
dialog --title "SlackPackager v.0.2" --inputbox "
++++=============================================++++
Inserisci la VERSIONE del programma:
=====================================================
`ls *tar.gz *tar.bz2`" 20 60 2> /tmp/versione
dialog --title "SlackPackager v.0.2" --inputbox "
++++=============================================++++
Inserisci l'ARCHITETTURA di riferimento:
i386 o i486
=====================================================" 20 60
2> /tmp/architettura
dialog --title "SlackPackager v.0.2" --inputbox "
++++=============================================++++
Inserisci il FORMATO del tarball dei sorgenti:
tar.gz o tar.bz2
=====================================================" 20 60
2> /tmp/formato
NAME=`cat /tmp/nome`
VERSION=`cat /tmp/versione`
ARCH=`cat /tmp/architettura`
BUILD=1
FORMAT=`cat /tmp/formato`
dialog --title "SlackPackager v.0.2" --inputbox "
++++=============================================++++
Devi scegliere il PATH per l'installazione tra:
/usr e /usr/local
=====================================================" 20 60
2> /tmp/scelta
SCELTA=`cat /tmp/scelta`
dialog --title "SlackPackager v.0.2" --infobox "
++++=============================================++++
La compilazione è in corso...attendere
Have fun!! :-P
===================================================" 10 60 ;
sleep 4
mkdir $PKG/$SCELTA
PERCORSO=$PKG/$SCELTA
mkdir -p $PERCORSO/doc/$NAME-$VERSION
if [ $FORMAT = tar.gz ] ; then
tar xvzf $POS/$NAME-$VERSION.$FORMAT;
elif [ $FORMAT = tar.bz2 ] ; then
tar xvfj $POS/$NAME-$VERSION.$FORMAT;
fi
cd $NAME-$VERSION
CFLAGS="-O2 -march=$ARCH -mcpu=i686" ./configure
--prefix=/usr
make && make prefix=$PERCORSO install && make
clean
cp -a AUTHORS INSTALL README ChangeLog
$PERCORSO/doc/$NAME-$VERSION
strip $PERCORSO/bin/*
chown -R root.bin $PERCORSO/bin
chmod 644 $PERCORSO/doc/$NAME-$VERSION/*
chown -R root.root $PERCORSO/doc/$NAME-$VERSION
chown -R root.root $PERCORSO/share
mkdir -p $PKG/install
dialog --title "SlackPackager v.0.2" --msgbox "
++++=============================================++++
Inserisci una descrizione del pacchetto
=====================================================
The Handy Ruler below makes it easier to edit a package
description. Line up the first '|' above the ':' following the base
package name, and the '|' on the right side marks the last column you
can put a character in. You must make exactly 11 lines for the
formatting to be correct. It's also customary to leave one space after
the ':'." 20 60
dialog --title "SlackPackager v.0.2" --inputbox "Inserisci
una descrizione del pacchetto rispettando la formattazione definita
dall'Handy Ruler e inserendo un max di 11 righe:
|-----handy-ruler------------------------------------------------------|"
20 85 2> /tmp/desc
DESC=`cat /tmp/desc`
echo "$NAME: $DESC" > $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
dialog --title "SlackPackager" --inputbox "Continua con
un'altra riga di descrizione rispettando sempre la formattazione
definita dall'Handy Ruler:
|-----handy-ruler------------------------------------------------------|"
20 85 2> /tmp/desc1
DESC1=`cat /tmp/desc1`
echo "$NAME: $DESC1" >> $POS/slack-desc
echo "$NAME: " >> $POS/slack-desc
if [ -e $POS/slack-desc ] ; then
cat $POS/slack-desc > $PKG/install/slack-desc;
fi
if [ -e $POS/doinst.sh ] ; then
cat $POS/doinst.sh > $PKG/install/doinst.sh;
fi
cd $PKG
makepkg -l y -c n $TMP/$NAME-$VERSION-$ARCH-$BUILD.tgz
dialog --title "SlackPackager v.0.2" --infobox "
++++=============================================++++
Il Pacchetto $NAME-$VERSION-$ARCH-$BUILD.tgz
è stato correttamente creato
The Slack-it Linux project
http://web.tiscali.it/gnu.linux
--velenux :-P
=====================================================" 20 60
; sleep 3
mv $TMP/$NAME-$VERSION-$ARCH-$BUILD.tgz $POS
rm -rf $PKG
rm -rf $POS/slack-desc
rm -rf $POS/$NAME-$VERSION
cd $TMP
rm -rf architettura desc desc1 formato nome scelta versione
exit 0
/code
3) XStart - Script che consente di
scegliere il window manager all'avvio del server grafico
code:
#!/bin/sh
#
# xstart
#
# Copyright (c) 2003, Luigi A. Bassetti.
#
# This program is free software; you can redistribute it and/or
modify
# it under the terms of the GNU General Public License as
published by
# the Free Software Foundation; either version 2 of the License,
or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
#
#
# Alternativa a "startx", permette di selezionare un window manager
# come argomento del comando (esempio "xstart kde").
# Nota 1: alcuni avvertimenti di particolare importanza li ho
# scritti in maiuscolo.
# Nota 2: per i più pignoli ;-), ho usato il termine "funzione"
# per definire alcuni blocchi di codice, so che per la precisione
# avrei dovuto usare termini come "costrutto" o similari, però
# ho preferito rendere più snella la lettura dei commenti senza
# voler insistere su "precisi tecnicismi" ;-)
#
# Vorrei ringraziare l'amico Velenux del forum Linux di
# "html.it" per gli ottimi suggerimenti che mi ha dato
# nella realizzazione dei link che permettono il caricamento
# dei vari window manager con la Slackware, mentre per la
# funzione di apertura dei window manager in console virtuali
# diverse contemporaneamente ringrazio l'amico Gianluca del
# mio LUG (LinuxVar, il LUG di Varese, http://www.linuxvar.it/)
# che mi ha dato l'input.
#
#
############ INIZIO DELLE VARIABILI GLOBALI ###############
#
# Il percorso degli "xinitrc" corrispondenti ai vari window
# manager
#
XINITRC_PATH=/etc/X11/xinit/xinitrc.
#
# La seguente costante contiene il nome del file "~/.xinitrc"
# salvato
#
MYXINITRC_SAVE=~/.xstart_save.xinitrc
#
# Il file "xinitrc" nella home
#
MYXINITRC=~/.xinitrc
#
# La seguente variabile conta quanti window manager sono aperti
# nel sistema, la stessa sarà usata da più funzioni più avanti.
#
wm_counter=$((`ps --user root | grep X | grep -v grep | wc -l`))
#
# Variabile che verifica se si è in una console "tty"
#
mytty=`tty | grep tty`
#
# NOTA: ci sarà una o più variabili anche più avanti, ho cercato
# di raggrupparle il più possibile qua per un discorso di ordine,
# però ci potrebbero essere dei casi dove risulta una scelta
# migliore scriverle in posizioni che non compromettano
# l'efficienza o la velocità del programma.
#
################# FINE DELLE VARIABILI GLOBALI #################
#
# Valuta se il sistema è configurato in modo da poter funzionare
# con questo programma.
# Ho scritto xstart basandomi su Slackware 9.x
#
ls $XINITRC_PATH* > /dev/null 2>&1
if [ "$?" != 0 ] ; then
echo
echo "Attenzione! Questo sistema non è adatto per l'uso"
echo -n "di questo programma! Invio per uscire..."
read
echo
exit 1
fi
#
# Viene salvato il file "~/.xinitrc"
#
if [ "$1" = "--myxinitrc-save" ] ; then
if [ -f "$MYXINITRC_SAVE" ] ; then
echo
echo "Attenzione: \"$MYXINITRC_SAVE\" è già stato"
echo -n "creato, invio per uscire..."
read
echo
exit 1
else
echo
echo "Salvo il file \"$MYXINITRC\" nel file"
echo -n "\"$MYXINITRC_SAVE\"..."
`mv $MYXINITRC $MYXINITRC_SAVE`
# Viene creato un link simbolico "~/.xinitrc" al file
# salvato in quanto potrebbe succedere di usare "startx"
# dopo avere eseguito questa opzione ma prima di avere
# eseguito una prima volta xstart, poi serve sopratutto
# per il fatto che lo stesso programma deve trovare un
# link simbolico di nome "~/xinitrc" per funzionare.
`ln -s $MYXINITRC_SAVE $MYXINITRC`
`sleep 2`
echo " fatto"
`sleep 1`
echo
echo "Attenzione: per ripristinare il file \"$MYXINITRC\""
echo "originale eseguire l'opzione \"--myxinitrc-restore\""
echo -n "o farlo manualmente, invio per uscire..."
read
echo
exit 0
fi
fi
#
# Controlla che il file "~/.xinitrc" sia un link simbolico
# e non un file, in quest'ultimo caso chiede di eseguire
# l'opzione "--myxinitrc-save" per salvare il file originale
# ed esce dal programma.
#
if [ ! -h "$MYXINITRC" ] && [ "$1" != "--help" ] ; then
echo
echo "ATTENZIONE: ESEGUIRE L'OPZIONE \"--myxinitrc-save\""
echo "PER SALVARE IL FILE \"$MYXINITRC\" ORIGINALE, INVIO"
echo -n "PER USCIRE..."
read
echo
exit 1
fi
#
# L'opzione "-q" stampa i window manager che si possono selezionare
#
if [ "$1" = "-q" ] ; then
echo
echo "I window manager selezionabili sono:"
echo
exec ls $XINITRC_PATH* | sort | cut -d'.' -f2
echo
echo "per selezionarne uno digitare il nome"
echo "come argomento (esempio \"xstart kde\")."
echo
exit 0
#
# Opzione per controllare quanti window manager sono aperti e
# quanti se ne possono aprire ancora.
#
elif [ "$1" = "--display-counter" ] ; then
echo
echo "Window Manager aperti: $wm_counter"
wm_remaining=$((6 - $wm_counter))
if [ "$wm_remaining" -eq 0 ] ; then
echo
echo "Non si possono più aprire altri window manager."
echo
exit 1
elif [ "$wm_remaining" -gt 0 ] && [ "$wm_remaining" -le 6 ] ;
then
echo
echo "Window Manager che si possono ancora aprire: $wm_remaining"
echo
exit 0
else
echo
echo "Risultano $wm_reamining window manager aperti."
echo "Attenzione, il massimo dovrebbe essere 6, se"
echo "sono stati aperti tutti con questo programma"
echo "per favore segnalere la cosa a
luigi.b@aliceposta.it."
echo "Grazie :-)"
fi
#
# L'opzione "--myxinitrc-restore" ripristina il file
# precedentemente salvato dal programma.
# Vedi anche le note sopra.
#
elif [ "$1" = "--myxinitrc-restore" ] ; then
echo
echo -n "Sto ripristinando il file..."
`mv $MYXINITRC_SAVE $MYXINITRC`
`sleep 2`
echo " fatto!"
`sleep 1`
echo
exit 0
#
# L'opzione "--help" stampa un aiuto
#
elif [ "$1" = "--help" ] ; then
echo
echo -e "\n\n\033[1mxstart\033[0m è un comando che va a
sostituire startx.
Più che sostituire sarebbe meglio dire integrare
in quanto alla fine viene comunque eseguito startx.
Le opzioni possibili sono:
--help
stampa questo scritto
-q
elenca i window manager
disponibili.
--myxinitrc-save crea una copia di backup del
file \"~/.xinitrc\" nel file
\"~/.xstart_save.xinitrc\".
si può ripristinare con
l'opzione \"--myxinitrc-restore\"
--myxinitrc-restore ripristina il file \"~/.xinitrc\"
originale.
Se si vuole farlo manualmente
bisogna rinominare il file
\"~/.xstart_save.xinitrc\"
precedentemente salvato dal
programma sovrascrivendo il
link simbolico creato da
xstart.
--display-counter Visualizza il numero dei window
manager aperti e il numero di
quanti se ne possono ancora aprire.
L'uso è semplice, per avviare un window manager
basta dare il suo nome come argomento (esempio:
\"xstart kde\"), se viene dato il comando xstart
senza argomenti verrà caricato l'ultimo window
manager usato.
Anche la gestione dei window manager multipli è
molto semplice, basta accedere ad una console
virtuale non utilizzata con X e usare
normalmente il programma.
L'unica accortezza nel caso che si decida di
lanciare il programma in background, ovvero
con l'opzione \"&\", è di usare un'altra
console vistuale, in caso contrario il sistema
restituirà un errore.
Con l'opzione \"--display-counter\" si visualizza
da qualsiasi posizione il numero di window manager
aperti.
Per qualsiasi problema inviare una mail a
luigi.b@aliceposta.it
(\"q\" per uscire)
Buon divertimento... :-)" | less -r
echo
exit 0
#
# Crea il link simbolico allo "/etc/X11/xinit/xinitrc"
# corrispondente al window manager selezionato.
#
elif [ -e "$XINITRC_PATH$1" ] ; then
`ln -sf $XINITRC_PATH$1 ~/.xinitrc`
#
# Se il window manager indicato non esiste non verrà
# creato nessun link, verrà chiesto se si desidera
# avviare l'ultimo window manager usato, in caso
# contrario verrà stampato un messaggio di aiuto
# e verrà restituito il prompt dei comandi
#
elif [ ! -z "$1" ] ; then
echo
echo "ATTENZIONE: \"$1\" non è un window manager presente"
echo "nel sistema e non è un'opzione valida, digitate \"yes\""
echo "e invio per avviare l'ultimo window manager usato,"
echo "invio per visualizzare un messaggio di aiuto e"
echo -n "tornare al prompt..."
read option
if [ "$option" != "yes" ] ; then
echo
echo "Usate l'opzione \"-q\" per visualizzare"
echo "i window manager disponibili o l'opzione"
echo "\"--help\" per visualizzare le opzioni"
echo "disponibili."
echo
exit 1
fi
fi
#
# Controlla di essere in una console virtuale "tty", in
# caso contrario stampa un messaggio di errore ed esce.
#
if [ -z "$mytty" ] ; then
echo
echo "Attenzione: non si può avviare un window"
echo -n "manager da questa console, invio per uscire..."
read
echo
exit 1
fi
#
# Controlla se ci sono più di 6 window manager aperti, questo
# perchè è il massimo gestibile in modo semplice con i tasti
# Fx, comunque 6... direi che bastano!!! ;-)
# Potrebbe considerarsi una funzione poco utile visto che
# comunque ogni window manager si può aprire da una console
# virtuale e queste al massimo sono 6, però ho preferito
# scriverla per una questione di sicurezza, non... si sa mai!!!
#
if [ "$wm_counter" -gt 6 ] ; then
echo
echo "Attenzione: non si possono aprire più di 6 window manager."
echo -n "Invio per uscire......"
read
echo exit 1
fi
#
# Variabile contenente i numeri dei display aperti. Ho deciso di
# scriverla qua in quanto rallenta leggermente l'esecuzione del
# programma e a volte si ha solo bisogno di usare xstart per una
# opzione.
#
DISPLAY_OPENED=`ps --user root l | grep 'X :' | grep -v grep | cut -d:
-f3 | cut -c1 | sort`
#
# Funzione per determinare il primo display disponibile (su 6).
#
for display in "0" "1" "2" "3" "4" "5" ; do
for counter in 1 2 3 4 5 6 ; do
# Divide i numeri dei display uno a uno
display_test=`echo $DISPLAY_OPENED | tr -d " " | cut -c$counter`
# Se "display" trova una corrispondenza con "display_test"
# allora il numero contenuto in display corrisponde a un
# numero di display occupato, assegna una stringa nulla
# a "display" (che sevirà anche al ciclo esterno) ed esce
# dal ciclo.
if [ "$display" = "$display_test" ] ; then
display=""
break
fi
done
# Se "display" non contiene una stringa nulla allora non c'è
# una corrispondenza con il relativo display aperto, questo
# vuol dire che si può aprire questo display.
if [ ! -z "$display" ] ; then
break
fi
done
#
# Funzioni per avvertire che c'è già uno o più window manager aperto,
# visualizzare quanti ne sono aperti e opzione per continuare o uscire.
#
if [ "$wm_counter" -ge 1 ] ; then
if [ "$wm_counter" -eq 1 ] ; then
echo
echo "Attenzione: c'è già un window manager aperto, se si vuole"
echo "continuare premere invio, altrimenti digitare 1 e invio"
echo "per uscire."
else
echo
echo "Attenzione: ci sono già $wm_counter window manager aperti, se si"
echo "vuole continuare premere invio, altrimenti digitare 1 e invio"
echo "per uscire."
fi
echo "Nel caso si continui, per accedere a questo window manager"
echo "da un'altro window manager o una console usare la combinazione"
echo "di tasti Ctrl+Alt+Fx in cui x è un tasto compreso tra \"F7\" e"
echo -n "\"F12\"............"
read option
if [ "$option" -eq 1 ] ; then
echo
exit 1
fi
`startx -- :$display`
exit 0
else
`startx`
exit 0
fi
/code