Pagina Man colorata

 

 

Per una buona visione di una pagina man, può risultare comodo installare un pager alternativo come most, che si trova nei repository di tutte le distro. Per visionare quindi la pagina man di most con le opzioni colorate, si può usare:

 

$ man --pager=most most

 

ma il comando sopra può risultare scomodo, per ovviare e rendere definitivo il tutto:

 

$ nano $HOME/.bashrc

 

ed incollare in fondo:

 

export MANPAGER="/usr/bin/most"

 

enjoy 😉

Cambiare misure default del terminale

 

 

Il terminale di Gnome di default ha una determinata misura, ma se si volesse più grande o più piccolo non ci sono grandi problemi, basta solo uno step:

 

$ sudo nano /usr/share/vte/termcap/xterm

 

e modificare questa stringa:

 

:co#80:it#8:li#24:\

 

per esempio con questa:

 

:co#100:it#8:li#28:\

 

 

enjoy 😉

Screencast audio-video ad alta qualità con FFmpeg

 

Ed eccomi ancora quà con l'ennesima guida su FFmpeg, sì lo sò, sono fissato, ma come sapete è uno dei tools che amo di più, per questo ho deciso di scrivere il più possibile su ogni esperimento che faccio, sia per quanto riguarda l'utilizzo dello screencast, sia per quanto riguarda le opzioni di conversione in generale. Ho già dedicato diversi post allo screencast con FFmpeg, ma adesso ho voluto farne uno cercando la migliore qualità audio/video possibile. La base di partenza è sempre lo script record.sh del post precedente, ma modificato per migliorare sensibilmente la qualità dello screencast:

 

#!/bin/sh

INFO=$(xwininfo -frame)

WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -r 30 -s $WIN_GEO -i :0.0+$WIN_XY -acodec pcm_s16le -vcodec libx264 \
-vpre lossless_ultrafast -threads 0 -y screencast.mkv

 

per chi usa PulseAudio, sostituire:

 

-f alsa -ac 2 -i hw:0,0

con:

-f alsa -ac 2 -i pulse

 

c'è da dire che questa soluzione ha il "difetto" di creare screencast di grosse dimensioni, quindi nel caso di upload su youtube bisogna prepararsi all'ottimizzazione, cercando sempre di mantenere lo standard alto. Quindi il comando seguente oltre ad ottimizzare il file per youtube, ne riduce sensibilmente le dimensioni:

 

 

quello sopra anche se lunghino è un solo comando. Credo che il tutto sia ancora migliorabile, dato che ho notato delle piccole imperfezioni.

 

ps: il video sopra è volutamente muto.

 

enjoy 😉

Screencast Perfetto di una singola finestra con FFmpeg

 

Il titolo di questo post inizia con "Screencast Perfetto", e magari ad alcuni potrà sembrare un tantino esagerato, ma secondo me non lo è affatto. In Gnu/Linux esistono diversi programmi per fare uno screencast, ne cito uno per tutti, RecordmyDektop, anche se io ho sempre preferito utilizzare FFmpeg, Quello che ho notato in tutti i programmi è la "difficoltà" di centrare la finestra o il terminale in maniera precisa, certo nulla di grave, basta mettersi lì e perdere un pò di tempo per trovare il rettangolo perfetto. Però finalmente io ho trovato la soluzione che mi soddisfa completamente, e questo grazie a FFmpeg, che io amo molto, tanto è vero che gli ho dedicato una categoria esclusiva 🙂 Comunque andando al sodo la soluzione è la seguente:

$ xwininfo

digitando nel terminale xwininfo e successivamente toccando una finestra, avremo a disposizione molte informazioni:

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x2424585 (has no name)

  Absolute upper-left X:  274
  Absolute upper-left Y:  219
  Relative upper-left X:  274
  Relative upper-left Y:  219
  Width: 654
  Height: 439
  Depth: 0
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOnly
  Colormap: 0x0 (not installed)
  Bit Gravity State: ForgetGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: yes
  Corners:  +274+219  -352+219  -352-366  +274-366
  -geometry 654×439+274+219
 

io ho preso queste informazioni toccando la finestra che mi interessava, e come si può vedere ci sono molti dati utili, tra cui il posizionamento-Corners-geometry. Adesso non bisogna fare altro che darle in pasto a FFmpeg. Quindi per prima cosa bisogna creare lo script record.sh, ed incollarci dentro:

 

#!/bin/sh

INFO=$(xwininfo -frame)

WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )

ffmpeg -f x11grab -r 25 -b 2000k -s $WIN_GEO -i :0.0+$WIN_XY /tmp/screencast.avi

 

in caso di problemi di formattazione si può scaricare da quà:

settare i permessi:

$ chmod +x record.sh

e lanciare:

$ ./record.sh

adesso non dobbiamo fare altro che toccare la finestra da registrare e lo script si occuperà in automatico della posizione precisa, salvando lo screencast in /tmp. Attenzione: per registrare il terminale bisogna toccare la barra della finestra, altrimente lo script non riesce a determinare l'esatta posizione, non so il motivo, per quanto riguarda tutto il resto, basta cliccare in un punto qualsiasi delle finestre.

FFmpeg ti amo!!!

enjoy 😉

Copiare con cp e barra di progresso

 

 

 

 

Advanced Copy è una mod per i tools cp e mv, e si occupa di far apparire nel terminale una barra di progresso che rende visibile il tempo e la % di una copia di un file. Per abilitare questa mod, bisogna seguire pochi semplici passi:

 

 

$ wget https://ftp.gnu.org/gnu/coreutils/coreutils-8.4.tar.gz
$ tar xvzf coreutils-8.4.tar.gz
$ cd coreutils-8.4/
$ wget
$ patch -p1 -i advcpmv-0.3-8.4.patch
$ ./configure
$ make
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv

 

per avere la barra di progresso basta usare le opzioni cp -g e mv -g, senza andare a cambiare il comportamento solito di cp e mv. Per rendere definitivo il cambiamento invece aggiungere a .bashrc  gli alias:

 

alias cp='cp -g'
alias mv='mv -g'

 

Il comando dell' immagine sopra è:

 

$ cp -g debian-squeeze-di-beta1-amd64-netinst.iso /home/edmond/

 

 

enjoy 😉

Terminale parlante in Linux

 

 

Dato che siamo in periodo di feste voglio augurare a tutti i miei lettori i migliori auguri, ed a questo proposito voglio farlo con un metodo "originale", e cioè dando voce al terminale, che si occuperà grazie ad espeak, di farvi gli auguri.

 

$ echo "Buon Natale a tutti e felice anno nuovo" | espeak -v it -s 180

 

enjoy 😉

Download Script con Gui

 

 

Questo è uno script per il download che utilizza wget e zenity,  quindi crea una finestra di dialogo dove inserire il link da scaricare, inoltre supporta il resume nel caso si annullasse la procedura di download.

 

DOWNLOAD() {
rand="$RANDOM `date`"
pipe="/tmp/pipe.`echo '$rand' | md5sum | tr -d ' -'`"
mkfifo $pipe
wget -c $1 2>&1 | while read data;do
if [ "`echo $data | grep '^Length:'`" ]; then
total_size=`echo $data | grep "^Length:" | sed 's/.*\((.*)\).*/\1/' | tr -d '()'`
fi
if [ "`echo $data | grep '[0-9]*%' `" ];then
percent=`echo $data | grep -o "[0-9]*%" | tr -d '%'`
current=`echo $data | grep "[0-9]*%" | sed 's/\([0-9BKMG.]\+\).*/\1/' `
speed=`echo $data | grep "[0-9]*%" | sed 's/.*\(% [0-9BKMG.]\+\).*/\1/' | tr -d ' %'`
remain=`echo $data | grep -o "[0-9A-Za-z]*$" `
echo $percent
echo "#Scaricamento da $1\n$current of $total_size ($percent%)\nVelocità : $speed/Sec\nTempo Stimato : $remain"
fi
done > $pipe &

wget_info=`ps ax |grep "wget.*$1" |awk '{print $1"|"$2}'`
wget_pid=`echo $wget_info|cut -d'|' -f1 `

zenity --progress --auto-close --text="Connessione a  $1\n\n\n" --width="350" --title="Scaricamento"< $pipe
if [ "`ps -A |grep "$wget_pid"`" ];then
kill $wget_pid
fi
rm -f $pipe
}

if [ $1 ];then
DOWNLOAD "$1"
else
dllink=$(zenity --entry --text "Inserire link da scaricare :" --width="350" --entry-text "" --title="Download")
if [ $dllink ];then
DOWNLOAD "$dllink"
fi
fi

 

salvare come download.sh

$ chmod +x download.sh

$ ./download.sh

nel caso di errori di formattazione si può scaricare da questo link.

 

enjoy ;)

Bloccare visualizzazione pagina man all'uscita

 

 

Questo è un piccolo trucchetto che secondo me può risultare molto utile quando si consulta da terminale una pagina man. Spesso infatti spulciando il man di un determinato programma, si apprendono nuove informazioni e nuovi comandi, ma una volta premuto il tasto q e si esce dal man, l'informazione o il comando non è più visibile, di conseguenza ci si trova nella situazione di tenere aperte due shell. Per ovviare a questo problema basta modificare .bashrc:

$ echo "export LESS='FiX'" >> ~/.bashrc

enjoy 😉

Benchmark bash dash ksh csh zsh

 

PoisonBit per lavori che sta facendo a voluto fare dei test per decidere quale shell usare, a questo proposito ha fatto un test per verificarne le performance. Io ho modificato questo script aggiungendo ulteriori shell. Lo script è il seguente:

 

#!/bin/bash

testdir=$HOME/test
mkdir -p "$testdir"
printf '#!/bin/dash --\n\n' > "$testdir/dash"
printf '#!/bin/bash --\n\n' > "$testdir/bash"
printf '#!/bin/ksh --\n\n'  > "$testdir/ksh"
printf '#!/bin/csh --\n\n'  > "$testdir/csh"
printf '#!/bin/zsh --\n\n'  > "$testdir/zsh"
chmod +x "$testdir"/*

for i in 1 10 100 1000 10000
do
    for shell in 'bash' 'dash' 'ksh' 'csh' 'zsh'
    do
        result=''
        printf "$shell\t$i\t"
        result="$(
            (time for ((x=0; x < $i; x++));
             do
                 "$testdir/$shell";
             done) 2>&1 | awk -F\  '/real/{print $2}'
        )"
        printf "$result\n"
    done
    printf -- '-------------------------\n'
done

 

salviamo come test-shell.sh

$ chmod a+x test-shell.sh

 

lo lanciamo con:

$ ./test-shell.sh

 

come si può vedere dai risultati il più performante è dash, ma questo era prevedibile, quello che è interessante sono proprio le differenze in termini numerici tra di loro.

 

edmond@debianbox:~$ ./testshell.sh
bash    1    0m0.002s
dash    1    0m0.001s
ksh    1    0m0.002s
csh    1    0m0.004s
zsh    1    0m0.003s
————————-
bash    10    0m0.021s
dash    10    0m0.009s
ksh    10    0m0.019s
csh    10    0m0.039s
zsh    10    0m0.032s
————————-
bash    100    0m0.202s
dash    100    0m0.088s
ksh    100    0m0.181s
csh    100    0m0.380s
zsh    100    0m0.294s
————————-
bash    1000    0m1.900s
dash    1000    0m0.867s
ksh    1000    0m1.793s
csh    1000    0m3.759s
zsh    1000    0m3.078s
————————-
bash    10000    0m19.689s
dash    10000    0m8.577s
ksh    10000    0m17.453s
csh    10000    0m36.365s
zsh    10000    0m29.948s

il vincitore è  Debian Almquist Shell (dash)

Conoscere quante volte si è usato un comando

Per conoscere quali sono i comandi usati più frequentemente ed in quale numero, bisogna andare a spulciare in bash_history, ma se vogliamo velocizzare il tutto basta questo comando:

$ history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head

nel mio caso il risultato è questo:

edmond@debianbox:~$ history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn|head
58 mencoder
56 ffmpeg
49 cd
43 swfc
43 sudo
41 su
30 swfextract
26 cat
24 ls
10 phoronix-test-suite
 

in bash_history si trovano numerose  informazioni su quello che si è fatto, e per chi volesse disabilitare lo storico per una maggiore sicurezza:

$ rm -f ~/.bash_history

$ nano ~/.bashrc

ed inserire in fondo queste righe:

export HISTFILESIZE=4
unset HISTFILE
export HISTSIZE=2
export HISTCONTROL=ignoredups