Jak používat undistract-me v Linuxu: oznámení po dokončení příkazů

  • Undistract-me vás upozorní na dokončení dlouhých příkazů pomocí oznámení a volitelné zvukové stopy.
  • Plně konfigurovatelné: časový limit, seznam výjimek a ověření aktivního okna.
  • K dispozici v Debianu/Ubuntu a Archu (AUR) s integrací do Bash a Zsh.

Terminální oznámení v Linuxu

Pokud jste někdy v terminálu spustili příkaz, který chvíli trval, a pak jste začali dělat něco jiného, ​​víte, jak snadno se ztratí pojem o čase. Rozrušte mě Už žádné vracení se do konzole každých pár minut, abyste zkontrolovali, zda je hotovo: nástroj zobrazí oznámení na ploše po dokončení dlouho běžícího příkazu.

Tento malý skript funguje na Debian, Ubuntu a jeho deriváty, stejně jako Arch LinuxVe výchozím nastavení považuje jakýkoli příkaz, jehož spuštění trvá déle než 10 sekund, za „dlouho běžící“ a pokud to nezměníte, upozorní vás pouze v případě, že aktivní okno není terminál, ve kterém proces běží, a to právě proto, aby se předešlo zbytečným rušivým vlivům, když se na toto okno již díváte.

Co je Undistract-me a jak to funguje?

Undistract-me je v podstatě sada shellových funkcí, které se připojují k cyklu provádění Bashu (a také mohou integrovat do Zshdetekovat, kdy příkaz začíná a končí. Když doba provádění překročí konfigurovatelnou prahovou hodnotu, spustí se upozornění na ploše a pokud si přejete, zvuk varování.

Skript je záměrně definován výchozí časový limit 10 sekund od kterého je příkaz považován za „dlouhý“. Tuto hodnotu lze upravit a lze také vytvořit seznam vyloučených příkazů s názvy, které by neměly generovat varování (například ls o cd Pokud jste si je upravili, někdy to chvíli trvá.

Dalším důležitým aspektem jeho fungování je kontrola aktivního okna: Oznámení se zobrazí pouze v případě, že nemáte terminál v popředí.Pokud chcete být i tak upozorněni, existuje proměnná prostředí, která toto chování zvrátí.

Projekt je open source a jeho kód je vydán pod licencí. ExpatHistoricky byl vývoj iniciován pomocí JML a je hostován na platformách jako Launchpad a GitHub. V podstatě používá známý „hack“ předběžný výkon pro Bash (inspirovaný dílem Glyf Lefkowitza obdržela příspěvky od lidí jako Chris Jones (Terminátor), Mikey Neuling y Stephen Rothwell, což zlepšilo jejich výkon a kvalitu.

Jak funguje undistract-me v Linuxu

Instalace na Debian, Ubuntu a deriváty

Nejpřímější cesta v systémech Debian / Ubuntu Je to přes standardní repozitáře. Jednoduše nainstalujte balíček a budete připraveni ho propojit se svým shellem.

sudo apt update
sudo apt install undistract-me

Ve velmi starých verzích Ubuntu existoval specifický PPA, pro případ, že pracujete se staršími prostředími, kde nakloněný Tento aktualizovaný balíček není k dispozici:

sudo add-apt-repository ppa:undistract-me-packagers/daily
sudo apt update
sudo apt install undistract-me

Po instalaci je třeba skript „připojit“ k shellu. V Bashu máte několik možností. Nejjednodušší přidá řádek automatické načítání do spouštěcího souboru:

echo 'source /etc/profile.d/undistract-me.sh' >> ~/.bashrc

Pokud dáváte přednost explicitní instalaci hlavní komponenty a instalačnímu programu hook, můžete tyto dva řádky napsat také do svého ~ / .bashrc Takto:

echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.bashrc

A nezapomeňte aktualizovat relaci shellu, aby se změny projevily pomocí zdroj po úpravě spouštěcích souborů.

source ~/.bashrc

Instalace na Arch Linux a deriváty (AUR)

V ekosystému Arch je Undistract-me k dispozici v AUR (obvykle ve variantě undistract-me-gitMůžete jej zkompilovat pomocí svého oblíbeného AUR helperu nebo ručně pomocí makepkgPro informaci, toto jsou běžné příkazy pro pomocníky které mnoho uživatelů zná:

pacaur -S undistract-me-git
packer -S undistract-me-git
yaourt -S undistract-me-git

Mějte na paměti, že některé z těchto pomocných nástrojů jsou zastaralé, ale slouží k ilustraci, že instalace se provádí z komunitního repozitáře. V každém případě, po instalaci, aktivace Pro váš shell se to dělá stejně jako v Debianu/Ubuntu: přidáním odpovídajících řádků do spouštěcího souboru.

Aktivace a použití s ​​Bash a Zsh

Pro Bash existuje kromě výše uvedených variant také kompaktní blok, který můžete vložit na konec ~ / .bashrc aby se skript načetl v případě potřeby:

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

V Zsh se integrace dosahuje podobným způsobem, a to nasměrováním stejných řádků do souboru ~ / .zshrcVše najednou můžete vypsat tímto příkazem:

echo "source /usr/share/undistract-me/long-running.bash
notify_when_long_running_commands_finish_install" >> ~/.zshrc

Po úpravě kteréhokoli z těchto souborů, znovu načíst konfiguraci z vašeho aktuálního shellu, aby se změny projevily bez odhlášení.

source ~/.bashrc
# o bien para Zsh
env zsh -l
# alternativamente
a source ~/.zshrc

Důležité: V mnoha terminálových emulátorech budete muset tuto možnost povolit „Spusťte příkaz jako přihlašovací shell“, v Terminál GNOME Nachází se v Nastavení profilu > Název a příkaz; v Terminál XFCE Najdete to v Nastavení > Obecné; a v Guake Nachází se v Nastavení > Obecné. Bez něj se hook nemusí správně načíst.

Integrace undistract-me s Bash a Zsh

Nastavení: čas, výjimky, aktivní okno a zvuk

Funkce Undistract-me je primárně ovládána ze souboru /usr/share/undistract-me/long-running.bash a prostřednictvím proměnných prostředí. Tento soubor můžete otevřít ve svém oblíbeném editoru a zkontrolovat dostupné parametry.

Chcete-li změnit minimální dobu, po které je příkaz považován za „dlouhý“, vyhledejte proměnnou DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZUVýchozí hodnota je 10 (sekund), ale můžete ji nastavit dle libosti.

sudo nano /usr/share/undistract-me/long-running.bash
# Busca y ajusta:
# LONG_RUNNING_COMMAND_TIMEOUT=10

Pokud chcete určité příkazy nikdy nespouštět oznámení, přidá jejich názvy oddělené mezerami k proměnné DLOUHO_BĚŽÍCÍ_SEZNAM_IGNOROVANÝCH_PROGRAMŮJe to užitečné pro filtrování nástrojů, které používáte neustále a nechcete, aby vás rušily.

Na druhou stranu, pokud chcete dostávat oznámení, i když je terminál aktivním oknem, definujte IGNORE_WINDOW_CHECK=1Tím se deaktivuje kontrola a vždy Varování se zobrazí na konci dlouhého příkazu.

Chcete-li přidat zvukové upozornění, upravte proměnnou UDM_PLAY_SOUND na nenulové celé číslo. V systémech Debian/Ubuntu vyžaduje tato funkce instalaci pulseaudio-utils y sound-theme-freedesktop, protože se spoléhá na zvukové téma plochy.

sudo apt install pulseaudio-utils sound-theme-freedesktop

Po jakýchkoli změnách konfiguračního souboru nebo proměnných prostředí nezapomeňte dobijte si skořápku:

source ~/.bashrc
# o
source ~/.zshrc

Rychlé testy pro ověření funkčnosti

Nejjednodušší způsob, jak to ověřit, je spustit příkaz, který trvá déle než 10 sekund (nebo vámi nastavenou prahovou hodnotu). Můžete například provést ping k hostiteli ve vaší síti nebo ven s dostatečným počtem paketů k překročení časového limitu.

ping -c 25 1.1.1.1

V prostředí Archu je také velmi vizuální použití příkazu jako sudo pacman -Sycož obvykle chvíli trvá v závislosti na stavu zrcátek:

sudo pacman -Sy

Pamatujte na dvě klíčové věci: oznámení se zobrazí, když příkaz trvá déle než prahová hodnota, a ve výchozím nastavení pouze tehdy, pokud aktivní okno není terminál kde běží. Pokud proces skončí před uplynutím časového limitu, zprávu neuvidíte; pokud ji stále chcete dostávat, upravte hodnotu DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZU nebo zakázat kontrolu oken pomocí IGNORE_WINDOW_CHECK.

Rychlé alternativy bez nutnosti instalace čehokoli dalšího

I když je Undistract-me velmi praktické, existují minimalistická řešení, která můžete použít pouze tehdy, když chcete. S upozornit-poslat (Toto je obvykle ve výchozím nastavení zahrnuto v mnoha počítačích.) Na konec příkazu můžete přidat varování:

cat archivo && notify-send '¡Terminado!'

Pokud dáváte přednost viditelnějšímu dialogovému oknu, zeity Toto je další typická možnost v prostředí GTK. Způsob použití je stejně jednoduchý a po dokončení se zobrazí informační okno:

cat archivo && zenity --info --text='Proceso finalizado.'

Rychlý trik: místo && (který provede druhou část, pouze pokud první uspěje), můžete řetězit s ; aby oznámení prošlo bez ohledu na cokoli. Používejte jej opatrně v závislosti na situaci.

Existuje více alternativ a doplňků: od nástrojů jako NotiFyre i terminály s integrovanými oznámeními (například Tilix (Může vás upozornit, když je panel neaktivní). Pokud chcete nějaký extra zvuk a držíte se základů, můžete si sami vytvořit řetězec hlasových pokynů:

foo; spd-say 'tarea completada'

A pro ty, kteří stále používají hlasitý odposlech systému, jsou tu tací, kteří ho aktivují. pcspkr s pípnutím po dlouhém úkolu. Je to neohrabané, ale efektivní ve velmi omezeném prostředí.

Tipy pro použití a řešení problémů

Pokud nedostáváte oznámení, nejprve zkontrolujte, zda jste povolili možnost „přihlašovací shell“ ve vašem terminálovém emulátoru. Bez tohoto nastavení se Undistract-me nemusí načíst a hook se nemusí nainstalovat.

Také zkontrolujte, zda váš shell čte správný soubor (~ / .bashrc o ~ / .zshrca co jsi udělal/a zdroj Po úpravě přidejte ladicí řádek (například minout) pro potvrzení, že se soubor spustí při spuštění terminálové relace.

Pokud zapnete zvuk a nic neslyšíte, zkontrolujte přítomnost pulseaudio-utils a z balíčku sound-theme-freedesktopKromě hlasitosti a zvukového serveru ve vaší relaci. Na velmi minimalistických počítačích může být nutné spustit PulseAudio ručně nebo použít jiný backend.

Příliš mnoho oznámení pro triviální příkazy? Upravte DLOUHÝ_ČASOVÝ_LIMIT_PROBÍHÁNÍ_PŘÍKAZU na vyšší hodnotu a naplňte DLOUHO_BĚŽÍCÍ_SEZNAM_IGNOROVANÝCH_PROGRAMŮ s aliasy a nástroji, které nechcete monitorovat (například git status o docker ps pokud je hodně opakujete).

Detaily projektu a komunity

Kód Undistract-me je distribuován pod Expat licence a existuje jak na Launchpadu, tak na GitHubu. Nemá vyhrazený IRC kanál, ačkoli tradičně bylo možné ho na GitHubu najít. JML v ekosystému freenode (kdysi dávno, v #ubuntu-vývoj). V případě dotazů nebo chyb je příslušným kanálem otázky z repozitáře nebo projektu na Launchpadu.

Zajímavá zmínka pro ty, kteří si užívají vnitřní fungování ozubených kol: podpora předběžný výkon Typ Zsh v Bashi není nativní, takže skript používá zaseknout Inteligentní systém, který spouští funkce před a po každém příkazu. Díky příspěvkům, jako jsou ty od Chris Jones (z terminálu) Terminator) a optimalizace Mikey Neuling y Stephen RothwellVýkon se oproti prvním verzím výrazně zlepšil.

V každodenním používání se tento nástroj obzvláště dobře hodí při kompilaci, konverzi multimediálnísynchronizujete velké množství dat nebo provádíte operace balíček Chvíli to trvá. Vzorec je vždy stejný: spustit příkaz, přepnout okna a nechat plochu upozornit na dokončení.

Undistract-me splňuje přesně to, co slibuje: méně času stráveného koukáním do konzole a více se soustředit na to, co děláte. Snadno se instaluje, dolaďuje se pomocí několika proměnných a dobře se integruje s Bash a Zsh, což z něj dělá nutnost pro ty z nás, kteří tráví polovinu života v terminálu.