Si alguna vegada has llançat a la terminal una ordre que triga una bona estona i t'has posat a fer una altra cosa, sabràs com és de fàcil perdre la noció del temps. Amb Undistract-me s'ha acabat això de tornar a la consola cada dos per tres per comprovar si s'ha acabat: l'eina mostra una notificació a l'escriptori quan una ordre de llarga durada finalitza.
Aquest petit script funciona a Debian, Ubuntu i derivats, a més d'Arch Linux. Per defecte considera “de llarga durada” qualsevol ordre que trigui més de 10 segons i, tret que ho canviïs, només t'avisa si la finestra activa no és la terminal on s'executa el procés, just per evitar distraccions innecessàries quan ja estàs mirant aquesta finestra.
Què és Undistract-me i com funciona
Undistract-me és bàsicament un conjunt de funcions d'intèrpret d'ordres que s'enganxen al cicle d'execució de Bash (i també pot integrar-se a Zsh) per detectar quan comença i quan acaba una ordre. Quan el temps dexecució supera un llindar configurable, dispara una notificació descriptori i, si vols, un so d´avís.
Per disseny, l'script defineix un timeout per defecte de 10 segons a partir del qual una ordre es considera “llarg”. Aquest valor es pot modificar i també es pot crear una llista d'exclusió amb noms d'ordres que no haurien de generar avisos (per exemple, ls o cd si els has personalitzat i de vegades triguen).
Una altra decisió important del seu funcionament és la comprovació de finestra activa: només mostra la notificació si no estàs amb la terminal en primer pla. Si preferiu que us avisi igualment, hi ha una variable d'entorn per invertir aquest comportament.
El projecte està obert i el codi es publica sota llicència Expatrió. Històricament, el desenvolupament el va iniciar jml i s'allotja a plataformes com Launchpad i GitHub. Sota el capó fa servir un conegut “hack” de preexec per a Bash (inspirat en el treball de Glyph Lefkowitz) i ha rebut contribucions de gent com Chris Jones (Terminator), Mikey Neuling y Stephen Rothwell, que van millorar el seu rendiment i qualitat.

Instal·lació a Debian, Ubuntu i derivades
La forma més directa en sistemes Debian / Ubuntu és a través dels repositoris estàndard. Només cal instal·lar el paquet i ho tindràs tot llest per enllaçar-lo amb el teu intèrpret d'ordres.
sudo apt update
sudo apt install undistract-me
En versions molt antigues d'Ubuntu hi va haver un PPA específic per si treballes amb entorns heretats on apte no disposeu d'aquest paquet actualitzat:
sudo add-apt-repository ppa:undistract-me-packagers/daily
sudo apt update
sudo apt install undistract-me
Un cop instal·lat, cal “enganxar” l'script al teu intèrpret d'ordres. A Bash tens diverses opcions. La més simple afegeix una línia de càrrega automàtica al fitxer d'inici:
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc
Si preferiu la instal·lació explícita del component principal més l'instal·lador de ganxos, també podeu escriure les dues línies al vostre ~ / .bashrc d'aquesta manera:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.bashrc
I recorda refrescar la sessió d'intèrpret d'ordres per aplicar els canvis amb un font després de la modificació dels fitxers d'inici.
source ~/.bashrc
Instal·lació a Arch Linux i derivades (AUR)
A l'ecosistema Arch, Undistract-me està disponible a AUR (normalment a la variant undistract-me-git). Pots compilar-ho amb el teu ajudant d'AUR preferit oa mà amb makepkg. A manera orientativa, aquestes són ordres habituals de ajudants que molts usuaris coneixen:
pacaur -S undistract-me-git
packer -S undistract-me-git
yaourt -S undistract-me-git
Tingues present que alguns d'aquests helpers estan obsolets, però serveixen per il·lustrar que la instal·lació es fa des del repositori comunitari. En qualsevol cas, un cop instal·lat, la activació per al vostre intèrpret d'ordres es fa com a Debian/Ubuntu: afegint les línies corresponents al vostre fitxer d'inici.
Activació i ús amb Bash i Zsh
Per a Bash, a més de les variants mostrades a dalt, hi ha un bloc compacte que podràs incloure al final de ~ / .bashrc perquè es carregui l'script quan escaigui:
if ! [ -z "$BASH_VERSION" -o -z "$PS1" -o -n "$last_command_started_cache" ]; then
. /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install
fi
A Zsh, la integració s'aconsegueix de manera similar, apuntant les mateixes línies a l'arxiu ~ / .Zshrc. Pots bolcar-lo d'una vegada amb aquesta ordre:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.zshrc
Després d'editar qualsevol d'aquests fitxers, recarrega la configuració del teu intèrpret d'ordres actual perquè els canvis tinguin efecte sense tancar sessió.
source ~/.bashrc
# o bien para Zsh
env zsh -l
# alternativamente
a source ~/.zshrc
Important: a molts emuladors de terminal haureu d'habilitar l'opció “Executar l'ordre com a shell d'inici de sessió”. En la Terminal del GNOME està a Preferències del perfil > Títol i ordre; a XFCE Terminal la trobaràs a Preferències > General; ia Guake és a Preferències > General. Sense això, el hook pot no carregar-se bé.

Configuració: temps, exclusions, finestra activa i so
Undistract-me es controla principalment des del fitxer /usr/share/undistract-me/long-running.bash i mitjançant variables dentorn. Podeu obrir aquest fitxer amb el vostre editor preferit i revisar els paràmetres disponibles.
Per canviar el temps mínim a partir del qual una ordre es considera “llarg”, localitza la variable LONG_RUNNING_COMMAND_TIMEOUT. El valor per defecte és 10 (segons), però podeu posar el que us encaixi.
sudo nano /usr/share/undistract-me/long-running.bash
# Busca y ajusta:
# LONG_RUNNING_COMMAND_TIMEOUT=10
Si vols que certes ordres mai no disparin notificació, afegeix els noms separats per espais a la variable LONG_RUNNING_IGNORE_LIST. És útil per filtrar utilitats que uses constantment i no vols que t'interrompin.
D'altra banda, si vols rebre avisos fins i tot quan la terminal sigui la finestra activa, defineix IGNORE_WINDOW_CHECK=1. Amb això, la comprovació es desactiva i sempre veuràs l'avís en finalitzar l'ordre llarga.
Per incorporar un avís sonor, ajusta la variable UDM_PLAY_SOUND un sencer diferent de zero. En sistemes Debian/Ubuntu, aquesta funció requereix tenir instal·lats pulseaudio-utils y sound-theme-freedesktop, ja que es recolza en el tema de sons de lescriptori.
sudo apt install pulseaudio-utils sound-theme-freedesktop
Després de qualsevol canvi al fitxer de configuració o en variables d'entorn, no oblideu recarregar el teu shell:
source ~/.bashrc
# o
source ~/.zshrc
Proves ràpides per comprovar que funciona
La forma més senzilla de verificar-ho és llançar una ordre que trigui més de 10 segons (o el llindar que hagis configurat). Per exemple, pots fer un fer ping a un host de la teva xarxa oa l'exterior amb un nombre de paquets suficient per sobrepassar el temps.
ping -c 25 1.1.1.1
En entorns Arch també és molt visual fer servir una ordre com sudo pacman -si, que sol trigar el seu depenent de l'estat dels miralls:
sudo pacman -Sy
Recorda dues coses clau: la notificació apareix quan la comanda ha trigat per sobre del llindar i, per defecte, només si la finestra activa no és la terminal on s'executa. Si el procés s'acaba abans del timeout, no veuràs missatge; si t'interessa rebre'l igualment, ajusta el valor de LONG_RUNNING_COMMAND_TIMEOUT o desactiva la verificació de finestra amb IGNORE_WINDOW_CHECK.
Alternatives ràpides sense instal·lar res extra
Encara que Undistract-me és molt còmode, hi ha solucions minimalistes que pots fer servir només quan t'interessi. Amb notify-send (sol venir per defecte a molts escriptoris) pots afegir un avís al final de la teva comanda:
cat archivo && notify-send '¡Terminado!'
Si preferiu un quadre de diàleg més visible, Zenitat és una altra opció típica en entorns GTK. El patró dús és igual de simple i et treu una finestra informativa en concloure:
cat archivo && zenity --info --text='Proceso finalizado.'
Truc ràpid: en lloc de && (que només executa la segona part si la primera té èxit), pots encadenar amb ; perquè la notificació surti passi el que passi. Fes-lo servir amb cura segons el cas.
Hi ha més alternatives i complements: des d'eines com NotiFyre fins a terminals amb avisos integrats (per exemple, Tilix pot notificar quan el panell no està actiu). Si vols alguna cosa d'àudio extra i vas a allò bàsic, una opció casolana és encadenar un avís de veu:
foo; spd-say 'tarea completada'
I, per als que encara usin l'altaveu del sistema, hi ha qui habilita pcspkr amb un beep després de les tasques llargues. És tosc, però efectiu en entorns molt mínims.
Consells d'ús i solució de problemes
Si no rebeu notificacions, el primer punt a revisar és si heu activat l'opció de "shell d'inici de sessió" al teu emulador de terminal. Sense aquest ajustament, la càrrega d'Undistract-me pot no produir-se i el ganxo no s'instal·la.
Comprova també que el teu intèrpret d'ordres està llegint el fitxer correcte (~ / .bashrc o ~ / .Zshrc) i que has fet font després d'editar-ho. Afegeix una línia de depuració (per exemple, un trobo) per confirmar que el fitxer s'executa en iniciar la sessió de terminal.
Si actives el so i no se sent res, verifica la presència de pulseaudio-utils i del paquet sound-theme-freedesktop, a més del volum i el servidor d'àudio a la teva sessió. En escriptoris molt minimalistes, pot ser necessari iniciar PulseAudio manualment o fer servir un altre backend.
Massa avisos per ordres trivials? Ajusta LONG_RUNNING_COMMAND_TIMEOUT a un valor més alt i emplena LONG_RUNNING_IGNORE_LIST amb àlies i utilitats que no vulguis monitoritzar (per exemple, estat git o portaveus ps si els repeteixes molt).
Detalls del projecte i comunitat
El codi d'Undistract-me es distribueix sota llicència Expat i ha viscut tant a Launchpad com a GitHub. No compta amb un canal IRC dedicat, encara que tradicionalment s'ha pogut trobar a jml a l'ecosistema de freenode (al seu dia, a #ubuntu-devel). Per a dubtes o errors, la llera adequada són els problemes del repositori o el projecte a Launchpad.
Una menció curiosa per als que gaudeixen dels engranatges interns: el suport de preexec tipus Zsh a Bash no és nadiu, de manera que l'script empra un “hack” intel·ligent que dispara funcions abans i després de cada ordre. Gràcies a contribucions com les de Chris Jones (del terminal Terminator) i optimitzacions de Mikey Neuling y Stephen Rothwell, el rendiment ha millorat molt respecte a les primeres versions.
En el dia a dia, l'eina encaixa especialment bé quan compiles, converteixes multimèdia, sincronitzes grans quantitats de dades o executes operacions de paqueteria que triguen. El patró sempre és el mateix: llança la comanda, canvia de finestra i deixa que l'escriptori t'avisi quan s'acabi.
Undistract-m'aporta justament el que promet: menys temps mirant la consola i més focus en allò que estiguis fent. La seva instal·lació és senzilla, s'afina amb un parell de variables i s'integra bé a Bash i Zsh, cosa que el converteix en un imprescindible per als que passem mitja vida a la terminal.