Oggi voglio spiegarvi come impostare uno script che passi da un desktop pieno di applicazioni e con il compositing attivato a un desktop dall’aspetto minimale, utile per limitare il consumo di risorse in previsione di usi impegnativi della macchina, quali videogaming, ma anche registrazione/produzione audio e altri compiti che non richiedano un aspetto curato del desktop, ma solo praticità;
Come potete vedere dall’immagine corre una differenza abissale tra i due screenshot, nonostante siano bastate una decina di righe richiamabili da terminale o addirittura da scorciatoie della tastiera!
Non preoccupatevi, non occorrono approfondite conoscenze di programmazione: vedremo passo dopo passo quali comandi faranno al caso vostro e verranno spiegati in modo più chiaro possibile;
Voglio specificare che non darò nulla per scontato, onde agevolare gli utenti più digiuni di linguaggio bash; Capisco che gli utenti un pò più preparati in materia potranno trovare l’articolo prolisso ma potranno subito saltare ai comandi principali e suggerire modifiche o miglioramenti commentando l’articolo.
La prima cosa da fare è aprire un editor di testo: gedit, kate, leafpad sono i più comuni;
Salvate in file con un nome chiaro e riconoscibile come:
minimal-desktop.sh
questo vi aiuterà da adesso in poi perchè l’editor colora in modo diverso la sintassi dello script, ad esempio in gedit:
- in blu scuro vedrete i commenti;
- in marrone i comandi;
- in viola scuro le variabili;
- in rosa le parti virgolettate;
Scrivete alla prima riga senza spazi ne ritorni a capo, ovvero a partire da riga 1 e colonna 1:
#!/bin/bash
questo suggerirà allo script quale interprete utilizzare;
Fatto questo potete inserire qualche riga di commento per indicare cosa fa lo script; So benissimo che si tratta di un lavoro apparentemente superfluo ma se vorrete condividere lo script o consultarlo in futuro i commenti vi aiuteranno;
Potete inserirli anteponendo un # al testo, cosi che l’inteprete ignorerà la riga o porzione di riga subito dopo l’hash:
# script di prova sudo apt-get update # verifica la presenza di aggiornamenti
in questo modo sarà sempre chiaro a chi legge cosa fa lo script, mentre di fatto bash leggerà solo il comando che tutti conoscono.
Da adesso iniziano i comandi veri e propri, che ovviamente variano da sistema a sistema; Come esempio prenderemo un desktop che utilizzi:
- Conky
- Screenlets
- Cairo-dock
che l’utente avrà bisogno di terminare;
N.B. Per programmi diversi da questi la procedura sarà molto simile, ma cambieranno ovviamente i nomi.
Per uccidere questi processi esistono due comandi:
killall nome-processo kill pid-del-processo
Nel caso di conky e cairo dock basterà quindi eseguire:
killall cairo-dock; killall conky;
Sarà prudente fare prima una prova eseguendo i singoli i comandi in un terminale, qualora venissero chiuse queste applicazioni potete inserirli nello script.
Adesso parliamo delle screenlets, che richiedono una procedura diversa ma ugualmente efficace, che si rende necessaria perchè il comando:
killall screenlets
restituirà come output:
screenlets: nessun processo trovato
dobbiamo quindi identificare tutti i pid delle screenlets in esecuzione, ma sebbene per conky possa bastare:
pidof conky
per screenlets la formula è:
ps -C python -o pid=,args= | awk '/FolderViewScreenlet\.py$/ {print $1}'
ringrazio l’utente crap0101 per avermi spiegato qui la procedura;
Con questo comando avrete come output il pid della screenlet “folder view”; Qualora aveste ad esempio anche mail check il comando sarà:
ps -C python -o pid=,args= | awk '/MailCheckScreenlet\.py$/ {print $1}'
Ne consegue che per ogni screenlet (e ovviamente anche per il demone screenlets, se non intendete averlo a disposizione) in esecuzione dovrete cambiare il nome da ricercare (l’ho evidenziato in grassetto nei comandi) e in questo vi aiuterà il task manager in cui vedrete una riga per ogni widget, formulata in questo modo:
python -u /usr/share/screenlets/cartella-screenlet/nome-screenlet.py
quindi copierete di volta in volta la riga e sostituirete mail check con i nomi che vedete in task manager, rispettando le maiuscole.
Come sopra, proviamo prima nel terminale:
$: ps -C python -o pid=,args= | awk '/MailCheckScreenlet\.py$/ {print $1}' 2675 $: kill -SIGKILL 2675
Produrrà come risultato l’uccisione di mail check screenlet.
N.B. ho usato 4 numeri casuali per indicare il pid, non usate quel comando se non volete chiudere erroneamente qualche vostra applicazione!
Ora nello script per maggior chiarezza è bene inserire:
# variabile che stabilisce il pid di mailcheck mailcheck_pid=`ps -C python -o pid=,args=\ | awk '/MailCheckScreenlet\.py$/ {print $1}'` # uccide mail check kill -SIGKILL $mailcheck_pid # variabile che stabilisce il pid di folder view folderview_pid=`ps -C python -o pid=,args=\ | awk '/FolderViewScreenlet\.py$/ {print $1}'` # uccide folder view kill -SIGKILL $folderview_pid # variabile che stabilisce il pid screenlets daemon screenlets_daemon_pid=`ps -C python -o pid=,args=\ | awk '/screenlets-daemon\.py$/ {print $1}'` # uccide il demone screenlet kill $screenlets_daemon_pid
e cosi via per tutte le vostre screenlet.
Alcune doverose precisazioni:
- il comando assegnato alle variabili va racchiuso tra i backquote, che dicono all’interprete di eseguire come un comando quello che si trova al loro interno, sono ottenibili con la combinazione altgr+’;
- è possibile andare a capo nel comando lungo, per mantenere lo script ordinato, con l’uso di “\” che dice all’interprete: “aspetta, non finisce qui il mio comando!”;
- nel comando kill, è necessaria l’opzione -SIGKILL per terminare le screenlet, ma non è necessaria per terminare il demone;
Arrivati a questo punto non rimane che disabilitare la visualizzazione composita, se lo ritenete opportuno;
Nel mio caso, con xfce e quindi con xfwm4 come gestore delle finestre, il comando è il seguente:
xfconf-query -c xfwm4 -p /general/use_compositing -t bool -s false
Sostituendo false con true qualora vogliate riabilitarlo;
Non conosco purtroppo i comandi per ogni window manager, ma una breve ricerca su google dovrebbe portarvi la soluzione; Se l’avete trovata o la conoscete già e volete riportarla nei commenti, sarà sicuramente benvenuta
Riassumendo, lo script avrà un’aspetto simile a questo:
#!/bin/bash # script per minimizzare l'uso di risorse # chiude cairo dock killall cairo-dock # chiude tutti i conky killall conky # chiude tutte le screenlets # variabile che stabilisce il pid di mailcheck mailcheck_pid=`ps -C python -o pid=,args=\ | awk '/MailCheckScreenlet\.py$/ {print $1}'` # uccide mail check kill -SIGKILL $mailcheck_pid # variabile che stabilisce il pid di folder view folderview_pid=`ps -C python -o pid=,args=\ | awk '/FolderViewScreenlet\.py$/ {print $1}'` # uccide folder view kill -SIGKILL $folderview_pid # variabile che stabilisce il pid screenlets daemon screenlets_daemon_pid=`ps -C python -o pid=,args=\ | awk '/screenlets-daemon\.py$/ {print $1}'` # uccide il demone screenlet kill $screenlets_daemon_pid # disabilita il compositore di xfwm4 xfconf-query -c xfwm4 -p /general/use_compositing -t bool -s false # fine dello script exit
Non vi rimane che renderlo eseguibile, basta digitare dalla cartella in cui l’avete salvato:
chmod +x minimal-desktop.sh
Adesso potete assegnare allo script una combinazione di tasti, o creare un lanciatore per eseguirlo;
Se invece vi piacerebbe lanciarlo nel terminale, è necessario creare un alias nel vostro .bashrc e apportare qualche piccola modifica per renderlo più leggibile tramite i comandi:
- echo, che stampa una stringa
- sleep n, dove n è il numero di secondi dopo la quale viene eseguita l’operazione successiva, utile per leggere meglio i messaggi
Avremo quindi nello script:
#!/bin/bash # script per minimizzare l'uso di risorse # chiude cairo dock killall cairo-dock echo "cairo dock terminata" sleep 1 # chiude tutti i conky killall conky echo "conky terminato" sleep 1 # chiude tutte le screenlets # variabile che stabilisce il pid di mailcheck mailcheck_pid=`ps -C python -o pid=,args=\ | awk '/MailCheckScreenlet\.py$/ {print $1}'` # uccide mail check kill -SIGKILL $mailcheck_pid # variabile che stabilisce il pid di folder view folderview_pid=`ps -C python -o pid=,args=\ | awk '/FolderViewScreenlet\.py$/ {print $1}'` # uccide folder view kill -SIGKILL $folderview_pid # variabile che stabilisce il pid screenlets daemon screenlets_daemon_pid=`ps -C python -o pid=,args=\ | awk '/screenlets-daemon\.py$/ {print $1}'` # uccide il demone screenlet kill $screenlets_daemon_pid echo "screenlets terminate" sleep 1 # disabilita il compositore di xfwm4 xfconf-query -c xfwm4 -p /general/use_compositing -t bool -s false echo "compositing disabilitato sleep 1 # fine dello script exit
Se volete, potete scrivere un’altro script per rilanciare tutte le applicazioni, avendo cura di terminare ogni comando con “&” cosi da lanciarle in background:
#!/bin/bash # rilancia le applicazione chiuse con desktop-minimal conky& sleep 1 cairo-dock& sleep 1 python -u /usr/share/screenlets-manager/screenlets-daemon.py& sleep 1 python -u /usr/share/screenlets/FolderView/FolderViewScreenlet.py& sleep 1 python -u /usr/share/screenlets/MailCheck/MailCheckScreenlet.py& exit
Un piccolo “trucco” che ho utilizzato nel mio script è quello di disabilitare l’avvio automatico delle stesse applicazioni, per poi reinserirlo con il secondo script.
Si tratta semplicemente di consultare i due percorsi ~/.config/autostart e /etc/xdg/autostart che conterranno i file per l’avvio automatico di (ad esempio) cairo dock, conky, screenlets;
Preso nota dei nomi di questi file basta spostarli in un altra cartella a vostro piacimento nel primo script, e copiarli nelle directory di origine con il secondo script per riaverli in avvio automatico.
N.B. se i file sono in /etc è necessario essere root, eseguite la procedura solo con i comandi mv e cp, facendo inoltre molta attenzione a quello che digitate, e provando come sempre i singoli comandi nel terminale.
Per qualunque chiarimento, consiglio o suggerimento non esitate a commentare!
Per oggi è tutto dal vostro DrV,
Happy scripting a tutti!
Archiviato in:Linux Tagged: alias, autostart, bash, cairo-dock, chmod, compositing, conky, desktop, desktop-environment, lanciatore, scorciatoia, screenlets, script, symlink, terminale, videogaming, xfce