PDA

Visualizza la versione completa : Startx o.... xstart???


wolf64
27-09-2003, 17:50
Dunque, nella mia Slack, per facilitarmi la selezione dei window manager (che d'ora in avanti chiamerò "wm") con startx, ho creato un piccolo script di nome xstart.
Questo è basato sul creare diversi file ".xinitrc" nella home con però il nome del wm, ad esempio: per KDE ".xinitrckde", per Gnome ".xinitrcgnome", ecc.

Prima di tutto ho fatto una copia di backup di .xinitrc con un "cp .xinitr .xinitrc.save", non si sa mai ;), poi ho semplicemente creato questi ".xinitrc" personalizzati con "cp .xinitrc .xinitrckde" ad esempio.

Nella sezione "# Start the wm:" di ogniuno di questi file ho lasciato solo il wm che corrisponde al nome.
Lo script, in pratica, si occupa di leggere l'argomento datogli e, nel caso corrisponda a uno dei wm configurati all'interno, crea il link ".xinitrc" al rispettivo file, così se deve caricare KDE basta dare "xstart kde" e crea un link ".xinitrc -> .xinitrckde", se si digita "xstart gnome" crea un link ".xinitrc -> .xinitrcgnome".
Per visualizzare quali wm può caricare basta dargli l'opzione "-q" e "--help" spiega brevemente il funzionamento.
Se non si danno argomenti è come dare startx, carica l'ultimo wm usato.

Così non devo rieditare .xinitrc tutte le volte che voglio cambiare wm e non devo dipendere da applicazioni grafiche come Kdm o similari.
Magari esiste una via ancora più semplice, magari c'è già qualcosa di simile in Linux, nel caso fatemelo sapere. ;)

Di seguito riporto lo script "xstart":




#!/bin/sh

#
# Alternativa a "startx", permette di selezionare un window manager come argomento
# o quello di default in "~/.xinitrc"
#

WM=$1

if [ "$WM" = "kde" ] ; then
`ln -sf ~/.xinitrckde ~/.xinitrc`
elif [ "$WM" = "gnome" ] ; then
`ln -sf ~/.xinitrcgnome ~/.xinitrc`
elif [ "$WM" = "fluxbox" ] ; then
`ln -sf ~/.xinitrcfluxbox ~/.xinitrc`

#
# L'opzione "-q" stampa i window manager che si possono selezionare
#
elif [ "$1" = "-q" ] ; then
echo
echo "I window manager selezionabili sono:"
echo
echo " kde"
echo " gnome"
echo " fluxbox"
echo
echo "per selezionarli digitare uno di essi come argomento"
echo
exit 0

#
# L'opzione "--help" stampa un piccolo aiuto
#
elif [ "$1" = "--help" ] ; then
echo
echo "xstart è un comando che va a sostituire startx."
echo "Più che sostituire sarebbe meglio dire integrare"
echo "in quanto alla fine viene comunque eseguito startx."
echo
echo "Le opzioni possibili sono:"
echo
echo " --help stampa questo scritto"
echo
echo " -q elenca i window manager"
echo " disponibili."
echo
echo "L'uso è semplice, per avviare un window manager"
echo "basta dare il suo nome come argomento, se"
echo "viene dato il comando xstart senza argomenti"
echo "verrà caricato l'ultimo window manager usato."
echo
exit 0
fi


#
# And now... startx!!!
#

`startx`



Lo ho poi copiato da root in /usr/bin dandogli un "chmod 755 /usr/bin/xstart".
Come si nota i commenti sono in italiano a parte il "And now... startx!!!" su cui ho voluto fare il figo! :quipy: :stordita:

:ciauz:

wolf64
27-09-2003, 18:31
PS: il primo commento non è corretto in quanto ".xinitrc" viene sovrascritto dal link simbolico, lo avevo scritto in quel modo e non lo ho modificato.

gianiaz
27-09-2003, 19:25
faccio così anche io per scegliere se usare XFREE con il twin view della nvidia oppure senza.
In quel caso cambio il file XF86Config-4.

Anche io chiedo se c'è una soluzione migliore.
(va bene anche così, però solo perchè uso un solo utente)

Ciao :ciauz:

velenux
27-09-2003, 19:49
Bel lavoro wolf!

Solo una cosa (magari può velocizzare l'operazione per qualcuno): (se non sbaglio) gli script che hai personalizzato per avviare i differenti wm esistono già in Slackware se i rispettivi wm vengono installati con i pacchetti .tgz ufficiali (grazie allo script doinst.sh presente nel pacchetto).



#!/bin/sh

WM=$1

if [ "$WM" = "kde" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.kde ~/.xinitrc`
elif [ "$WM" = "gnome" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.gnome ~/.xinitrc`
elif [ "$WM" = "fluxbox" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.fluxbox ~/.xinitrc`


Magari non era importante....comunque....lo script è ben fatto. Credo comunque che sia possibile avviare differenti wm passando parametri al comando startx.....che qualcuno ce li dica!!


Ciao wolf

kio002
27-09-2003, 19:51
invece di andarti a incasinarti la vita con gli script puoi più semplicemente usare il comando xwmconfig specifico per la slack

wolf64
27-09-2003, 20:15
Originariamente inviato da velenux
Bel lavoro wolf!

Solo una cosa (magari può velocizzare l'operazione per qualcuno): (se non sbaglio) gli script che hai personalizzato per avviare i differenti wm esistono già in Slackware se i rispettivi wm vengono installati con i pacchetti .tgz ufficiali (grazie allo script doinst.sh presente nel pacchetto).



#!/bin/sh

WM=$1

if [ "$WM" = "kde" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.kde ~/.xinitrc`
elif [ "$WM" = "gnome" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.gnome ~/.xinitrc`
elif [ "$WM" = "fluxbox" ] ; then
`ln -sf /etc/X11/xinit/xinitrc.fluxbox ~/.xinitrc`


Magari non era importante....comunque....lo script è ben fatto. Credo comunque che sia possibile avviare differenti wm passando parametri al comando startx.....che qualcuno ce li dica!!


Ciao wolf


Ottimo Velenux ;), non ci avevo pensato, questo in effetti semplifica molto le cose!
Anzi, si può anche configurare l'installazione o un sistema di verifica dei wm esistenti con relativo aggiornamento, mi hai dato un ottimo input ;)

wolf64
27-09-2003, 20:26
Originariamente inviato da kio002
invece di andarti a incasinarti la vita con gli script puoi più semplicemente usare il comando xwmconfig specifico per la slack

Hai ragione anche tu Kio, però col mio script che, sulla base di quanto mi ha detto Velenux migliorerò, la cosa è più immediata, in più questo potrebbe essere riutilizzabile anche per altre distro dove un utente volesse velocizzare l'avvio del wm senza passare da interfacce grafiche.
E poi... è comunque un piccolo esercizio di shell scripting che non va mai male! ;) :gren:


Ciao Gianiaz :ciauz:

FreeManX
27-09-2003, 21:52
uhmm provato mai: xwmconfig (non ricordo se si scrive cosi) serve a selezionare le interfacce grafiche :D

Ops mi sono accorto dopo che era stato gia segnalto.. maledetto vizio di non leggete tutti i post!


Aho wolf se ti vuoi divertire e non lo conosci gia, il comando dialog (o xdialog per interfaccia x) e praticamente quello su cui sono basati tutti i tools di slack pkgtool e roba varia, quelle interfaccine grafiche,

buyebye

velenux
27-09-2003, 23:49
Ho realizzato una variante dello script. Piuttosto che copiare nella ~ tanti script quanti sono i wm da avviare, è possibile mantenerne uno solo privato dell'ultima istruzione relativa al wm....e lasciare al sistema l'onere di inserire l'istruzione giusta in corrispondenza ad ogni wm sfruttando il redirezionamento su file >>.
La prima parte dello script funziona perfettamente....ma le ultime due istruzioni relative alla sostituzione dello script .xinitrc (ora con wm indicato) con lo script .xinitrc "pulito" non vanno. Alla chiusura di X i comandi non trovano i rispettivi file....mmmmmmmmmmm....sicuramente ci saranno orrori di sintassi: fix me please!!


#!/bin/sh

# Dopo aver copiato lo script .xinitrc senza l'ultima istruzione
# (quella sotto il commento Start the window manager) in una directory a scelta
# (es ~/script/) e dopo aver cancellato l'ultima riga nell'attuale .xinitrc
# in base alla scelta fatta viene aggiunta l'ultima istruzione ad .xinitrc


WM=$1

if [ "$WM" = "kde" ] ; then
`echo "startkde" >> ~/.xinitrc`
elif [ "$WM" = "gnome" ] ; then
`echo "exec gnome-session" >> ~/.xinitrc`
elif [ "$WM" = "wmaker" ] ; then
`echo "exec /usr/bin/wmaker" >> ~/.xinitrc`

fi


'startx'

# Ora bisogna rimuovere lo script .xinitrc perchè configurato su un dato wm
# e sostituirlo con lo script in precedenza "privato" dell'ultima istruzione
# copiato nella dir scelta (es ~/script/)

'rm ~/.xinitrc'
'cp ~/script/.xinitrc ~/'


PS: Non uccidetemi per eventuali bestialità....FIX ME!

:ciauz: :ciauz:

velenux
27-09-2003, 23:51
Un salutone a wolf64 :ciauz:

Hai ragione....un pò d'esercizio di shell scripting non fà mai male!!

Hack your brain

Loading