Content:

.  Index
.  FAQ
.  Slack Packages
.  Slack Install
. 
Slack Config
.  Slack Tutorial


.  Slack Security
.  Distribuzioni
.  Compilazione
. 
Kernel Linux
.  Downloads
.  Links
. 
Contact

.  Script

.  Shell Scripting


The Slack-it Linux Project

.  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

 

This site is maintained by velenux
(c) 2003 The Slack-it Linux Project