Si vous avez déjà exécuté une commande dans le terminal qui a pris du temps, puis commencé à faire autre chose, vous savez à quel point il est facile de perdre la notion du temps. Me distraire Plus besoin de retourner à la console toutes les quelques minutes pour vérifier si l'opération est terminée : l'outil affiche une notification sur le bureau lorsqu'une commande de longue durée est terminée.
Ce petit script fonctionne sur Debian, Ubuntu et ses dérivés, ainsi qu'Arch LinuxPar défaut, il considère comme « longue » toute commande qui prend plus de 10 secondes et, sauf si vous modifiez ce paramètre, il ne vous avertit que si la fenêtre active n'est pas le terminal où le processus est en cours d'exécution, précisément pour éviter les distractions inutiles lorsque vous êtes déjà en train de regarder cette fenêtre.
Qu'est-ce qu'Undistract-me et comment ça marche ?
Undistract-me est essentiellement un ensemble de fonctions shell qui s'intègrent au cycle d'exécution de Bash (et peuvent également intégrer à Zshpour détecter le début et la fin d'une commande. Lorsque la durée d'exécution dépasse un seuil configurable, une notification s'affiche sur le bureau et, si vous le souhaitez, un son avertissement.
De par sa conception, le script définit un Délai d'expiration par défaut de 10 secondes à partir de laquelle une commande est considérée comme « longue ». Cette valeur peut être modifiée, et une liste d'exclusion peut également être créée avec des noms de commandes qui ne doivent pas générer d'avertissements (par exemple, ls o cd Si vous les avez personnalisés, cela peut parfois prendre un certain temps.
Un autre aspect important de son fonctionnement est la vérification active de la fenêtre : La notification ne s'affiche que si le terminal n'est pas au premier plan.Si vous préférez tout de même être notifié, il existe une variable d'environnement pour inverser ce comportement.
Ce projet est open source et son code est diffusé sous licence. ExpatHistoriquement, le développement a été initié par jml et il est hébergé sur des plateformes comme Launchpad et GitHub. En interne, il utilise une astuce bien connue : préexec pour Bash (inspiré par le travail de Glyphe de Lefkowitzet a reçu des contributions de personnes comme Chris Jones (Terminator), Mikey Neuling y Stephen Rothwellce qui a amélioré leurs performances et leur qualité.

Installation sur Debian, Ubuntu et dérivés
La voie la plus directe dans les systèmes Debian / Ubuntu Cela se fait via les dépôts standards. Installez simplement le paquet et vous pourrez l'intégrer à votre shell.
sudo apt update
sudo apt install undistract-me
Dans les très anciennes versions d'Ubuntu, il existait un PPA spécifique, au cas où vous travailleriez avec des environnements hérités où apte Ce package mis à jour n'est pas disponible :
sudo add-apt-repository ppa:undistract-me-packagers/daily
sudo apt update
sudo apt install undistract-me
Une fois installé, vous devez « associer » le script à votre shell. Sous Bash, plusieurs options s'offrent à vous. La plus simple consiste à ajouter une ligne de commande : chargement automatique au fichier de démarrage :
echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc
Si vous préférez installer explicitement le composant principal et le programme d'installation du hook, vous pouvez également ajouter ces deux lignes à votre configuration. ~ / .bashrc de cette manière:
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.bashrc
N'oubliez pas d'actualiser la session shell pour appliquer les modifications. source après avoir modifié les fichiers de démarrage.
source ~/.bashrc
Installation sur Arch Linux et dérivés (AUR)
Dans l'écosystème Arch, Undistract-me est disponible dans AUR (généralement dans la variante distraire-moi-gitVous pouvez le compiler avec votre assistant AUR préféré ou manuellement avec makepkgVoici quelques commandes courantes pour vous guider. aides que de nombreux utilisateurs connaissent bien :
pacaur -S undistract-me-git
packer -S undistract-me-git
yaourt -S undistract-me-git
Notez que certains de ces outils sont obsolètes, mais ils servent à illustrer que l'installation est effectuée à partir du dépôt communautaire. Quoi qu'il en soit, une fois installé, activation Pour votre shell, cela se fait comme sous Debian/Ubuntu : en ajoutant les lignes correspondantes à votre fichier de démarrage.
Activation et utilisation avec Bash et Zsh
Pour Bash, en plus des variantes présentées ci-dessus, il existe un bloc compact que vous pouvez inclure à la fin de ~ / .bashrc pour que le script se charge au moment opportun :
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
Dans Zsh, l'intégration s'effectue de manière similaire, en faisant pointer les mêmes lignes vers le fichier ~ / .zshrcVous pouvez tout vider en une seule fois avec cette commande :
echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.zshrc
Après avoir modifié l'un de ces fichiers, recharger la configuration depuis votre terminal actuel afin que les modifications prennent effet sans avoir à vous déconnecter.
source ~/.bashrc
# o bien para Zsh
env zsh -l
# alternativamente
a source ~/.zshrc
Important : Dans de nombreux émulateurs de terminal, vous devrez activer cette option. « Exécutez la commande en tant que shell de connexion ». À Terminal GNOME Il se trouve dans Préférences du profil > Titre et commande ; dans Terminal XFCE Vous le trouverez dans Préférences > Général ; et dans Guake Il se trouve dans Préférences > Général. Sans cela, le hook risque de ne pas se charger correctement.

Paramètres : heure, exclusions, fenêtre active et son
Undistract-me est principalement contrôlé à partir du fichier /usr/share/undistract-me/long-running.bash et via les variables d'environnement. Vous pouvez ouvrir ce fichier avec votre éditeur préféré et consulter les paramètres disponibles.
Pour modifier la durée minimale après laquelle une commande est considérée comme « longue », repérez la variable. DÉLAI D'EXÉCUTION DE LA COMMANDE LONGUELa valeur par défaut est de 10 (secondes), mais vous pouvez la régler selon vos besoins.
sudo nano /usr/share/undistract-me/long-running.bash
# Busca y ajusta:
# LONG_RUNNING_COMMAND_TIMEOUT=10
Si vous souhaitez certaines commandes ne jamais déclencher de notification, ajoute leurs noms séparés par des espaces à la variable LISTE D'IGNORANCE DE LONGUE DURÉEC'est utile pour filtrer les utilitaires que vous utilisez constamment et que vous ne souhaitez pas voir vous interrompre.
En revanche, si vous souhaitez recevoir des notifications même lorsque le terminal est la fenêtre active, définissez IGNORE_WINDOW_CHECK=1Cela désactive la vérification et toujours Vous verrez l'avertissement à la fin de la longue commande.
Pour ajouter une alerte sonore, ajustez la variable UDM_PLAY_SOUND à un entier non nul. Sur les systèmes Debian/Ubuntu, cette fonction nécessite l'installation de pulseaudio-utils y thème-son-freedesktop, puisqu'il repose sur le thème des sons du bureau.
sudo apt install pulseaudio-utils sound-theme-freedesktop
Après toute modification du fichier de configuration ou des variables d'environnement, n'oubliez pas rechargez votre coquillage:
source ~/.bashrc
# o
source ~/.zshrc
Tests rapides pour vérifier que ça fonctionne
La manière la plus simple de le vérifier est d'exécuter une commande qui prend plus de temps que 10 secondes (ou le seuil que vous avez défini). Par exemple, vous pouvez faire un ping vers un hôte de votre réseau ou vers l'extérieur avec un nombre suffisant de paquets pour dépasser la limite de temps.
ping -c 25 1.1.1.1
Dans les environnements Arch, l'utilisation d'une commande comme celle-ci est également très visuelle. sudo pacman-Syce qui prend généralement un certain temps en fonction de l'état des miroirs :
sudo pacman -Sy
N'oubliez pas deux points essentiels : la notification apparaît lorsque la commande a pris plus de temps que le seuil et, par défaut, uniquement si La fenêtre active n'est pas le terminal. où il s'exécute. Si le processus se termine avant le délai d'expiration, vous ne verrez aucun message ; si vous souhaitez tout de même le recevoir, modifiez la valeur de DÉLAI D'EXÉCUTION DE LA COMMANDE LONGUE ou désactiver la vérification des fenêtres avec IGNORE_WINDOW_CHECK.
Des solutions rapides sans installation supplémentaire
Bien qu'Undistract-me soit très pratique, il existe des solutions minimalistes que vous pouvez utiliser uniquement lorsque vous le souhaitez. notifier-envoyer (Ceci est généralement inclus par défaut dans de nombreux environnements de bureau.) Vous pouvez ajouter un avertissement à la fin de votre commande :
cat archivo && notify-send '¡Terminado!'
Si vous préférez une boîte de dialogue plus visible, Zenité Voici une autre option courante dans les environnements GTK. Son utilisation est tout aussi simple et elle affiche une fenêtre d'information une fois l'opération terminée :
cat archivo && zenity --info --text='Proceso finalizado.'
Astuce rapide : au lieu de && (qui n'exécute la seconde partie que si la première réussit), vous pouvez chaîner avec ; Ainsi, la notification sera transmise quoi qu'il arrive. À utiliser avec précaution selon la situation.
Il existe d'autres alternatives et modules complémentaires : des outils comme NotiFyre même les terminaux avec notifications intégrées (par exemple, Tilix (Il peut vous avertir lorsque le panneau est inactif). Si vous souhaitez ajouter des messages audio tout en conservant les fonctionnalités de base, vous pouvez créer vous-même une invite vocale :
foo; spd-say 'tarea completada'
Et, pour ceux qui utilisent encore le haut-parleur du système, il y a ceux qui l'activent. pcspkr Un bip retentit après les tâches longues. C'est un peu lourd, mais efficace dans les environnements très minimalistes.
Conseils d'utilisation et de dépannage
Si vous ne recevez pas de notifications, la première chose à vérifier est si vous avez activé l'option pour « interface de connexion » dans votre émulateur de terminal. Sans ce paramètre, Undistract-me risque de ne pas se charger et le hook de ne pas s'installer.
Vérifiez également que votre shell lit le fichier correct (~ / .bashrc o ~ / .zshrcEt qu'avez-vous fait ? source Après l'avoir modifié, ajoutez une ligne de débogage (par exemple, une echo) pour confirmer que le fichier est exécuté au démarrage de la session terminal.
Si vous activez le son et n'entendez rien, vérifiez la présence de pulseaudio-utils et du paquet thème-son-freedesktopEn plus du volume et du serveur audio de votre session, sur les ordinateurs très minimalistes, il peut être nécessaire de démarrer PulseAudio manuellement ou d'utiliser un autre serveur audio.
Trop de notifications pour des commandes triviales ? Ajuster DÉLAI D'EXÉCUTION DE LA COMMANDE LONGUE à une valeur plus élevée et remplir LISTE D'IGNORANCE DE LONGUE DURÉE avec des alias et des utilitaires que vous ne souhaitez pas surveiller (par exemple, état de git o docker ps si vous les répétez souvent).
Détails du projet et de la communauté
Le code Undistract-me est distribué sous Licence d'expatrié Elle est hébergée à la fois sur Launchpad et GitHub. Elle ne possède pas de canal IRC dédié, bien qu'il soit traditionnellement possible de la trouver sur GitHub. jml dans l'écosystème de nœud libre (à l'époque, dans #ubuntu-develPour toute question ou erreur, veuillez utiliser le canal approprié. vous aider à faire face aux problèmes qui vous perturbent depuis le dépôt ou le projet sur Launchpad.
Une mention intéressante pour ceux qui s'intéressent au fonctionnement interne des engrenages : le support de préexec Le type Zsh dans Bash n'est pas natif, le script utilise donc un pirater Un système intelligent qui déclenche des fonctions avant et après chaque commande. Grâce à des contributions comme celles de Chris Jones (depuis le terminal) Terminator) et les optimisations de Mikey Neuling y Stephen RothwellLes performances se sont nettement améliorées par rapport aux premières versions.
Au quotidien, cet outil s'avère particulièrement utile lors de la compilation et de la conversion. multimédia, vous synchronisez de grandes quantités de données ou effectuez des opérations de parcelle Cela prend un certain temps. Le processus est toujours le même : lancer la commande, changer de fenêtre et attendre que le bureau vous avertisse une fois l’opération terminée.
Undistract-me tient exactement ses promesses : passer moins de temps à regarder la console et vous permet de vous concentrer davantage sur votre tâche. Facile à installer, paramétrable avec quelques variables, et parfaitement compatible avec Bash et Zsh, il est indispensable pour ceux qui passent la moitié de leur temps dans le terminal.