Как да използвате undistract-me в Linux: известия, когато командите завършат

  • Undistract-me ви предупреждава, когато завършите дълги команди, с известия и опционален звук.
  • Напълно конфигурируеми: време за изчакване, списък с изключения и проверка на активния прозорец.
  • Предлага се в Debian/Ubuntu и Arch (AUR), с интеграция в Bash и Zsh.

Известия на терминала в Linux

Ако някога сте изпълнявали команда в терминала, която отнема известно време, и след това сте започнали да правите нещо друго, знаете колко лесно е да загубите представа за времето. Undistract-мен Няма повече връщане към конзолата на всеки няколко минути, за да проверите дали е завършена: инструментът показва известие на работния плот, когато продължително изпълнявана команда завърши.

Този малък скрипт работи на Debian, Ubuntu и производни, както и Arch LinuxПо подразбиране, той счита всяка команда, която отнема повече от 10 секунди, за „дълго изпълняваща се“ и освен ако не го промените, ви предупреждава само ако активният прозорец не е терминалът, където се изпълнява процесът, именно за да се избегнат ненужни разсейвания, когато вече гледате този прозорец.

Какво е Undistact-me и как работи?

Undistract-me е по същество набор от shell функции, които се свързват с цикъла на изпълнение на Bash (и могат също така интегрира се в Zshза откриване кога дадена команда започва и завършва. Когато времето за изпълнение надвиши конфигурируем праг, се задейства известие на работния плот и, ако желаете, звук предупреждение.

По замисъл, скриптът дефинира a време за изчакване по подразбиране от 10 секунди от която дадена команда се счита за „дълга“. Тази стойност може да бъде променена, а също така може да се създаде списък с изключения с имена на команди, които не трябва да генерират предупреждения (например, ls o cd Ако сте ги персонализирали, понякога отнемат известно време.

Друг важен аспект от работата му е проверката на активния прозорец: Известието се показва само ако терминалът не е на преден план.Ако предпочитате да бъдете уведомявани въпреки това, има променлива на средата, която може да обърне това поведение.

Проектът е с отворен код и кодът му е пуснат под лиценз. ЕкспатИсторически погледнато, разработката е инициирана от jml и се хоства на платформи като Launchpad и GitHub. Под капака се използва добре познат „хак“ на предварително изпълнение за Баш (вдъхновен от работата на Глиф Лефковици е получил приноси от хора като Крис Джоунс (Терминатор), Майки Нюлинг y Стивън Ротуел, което подобри тяхната производителност и качество.

Как работи undistract-me в Linux

Инсталиране на Debian, Ubuntu и производни

Най-прекият начин в системите Debian / Ubuntu Това е чрез стандартните хранилища. Просто инсталирайте пакета и ще сте готови да го свържете към вашата обвивка.

sudo apt update
sudo apt install undistract-me

В много стари версии на Ubuntu имаше специфичен PPA, в случай че работите със стари среди, където подходящ Този актуализиран пакет не е наличен:

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

След като го инсталирате, трябва да „свържете“ скрипта с вашата обвивка. В Bash имате няколко опции. Най-простата добавя ред автоматично зареждане към стартовия файл:

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

Ако предпочитате изричната инсталация на главния компонент плюс инсталатора на hook, можете също да напишете двата реда във вашия ~ / .bashrc по този начин:

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

И не забравяйте да обновите сесията на shell, за да приложите промените с източник след промяна на стартиращите файлове.

source ~/.bashrc

Инсталиране на Arch Linux и производни (AUR)

В екосистемата на Arch, Undistract-me е наличен в AUR (обикновено във варианта unistract-me-gitМожете да го компилирате с любимия си AUR помощник или ръчно с makepkgЗа насоки, това са често срещани команди за помощници с които много потребители са запознати:

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

Имайте предвид, че някои от тези помощни инструменти са остарели, но те служат за илюстрация, че инсталацията се извършва от хранилището на общността. Във всеки случай, след като бъдат инсталирани, активиране За вашата обвивка, това се прави както в Debian/Ubuntu: чрез добавяне на съответните редове към стартовия файл.

Активиране и употреба с Bash и Zsh

За Bash, в допълнение към показаните по-горе варианти, има компактен блок, който можете да включите в края на ~ / .bashrc така че скриптът да се зарежда, когато е уместно:

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

В Zsh интеграцията се постига по подобен начин, чрез насочване на същите редове към файла. ~ / .zshrcМожете да го изхвърлите всичко наведнъж с тази команда:

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

След редактиране на който и да е от тези файлове, презареди конфигурацията от текущата ви обвивка, така че промените да влязат в сила без излизане от системата.

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

Важно: В много терминални емулатори ще трябва да активирате опцията „Изпълнете командата като обвивка за вход“, En Терминал на GNOME Намира се в „Настройки на профила“ > „Заглавие и команда“; в XFCE терминал Ще го намерите в „Настройки“ > „Общи“; и в Guake Намира се в „Настройки“ > „Общи“. Без него, куката може да не се зареди правилно.

Интегриране на undistract-me с Bash и Zsh

Настройки: време, изключения, активен прозорец и звук

Undistract-me се контролира предимно от файла /usr/share/undistract-me/long-running.bash и чрез променливи на средата. Можете да отворите този файл с любимия си редактор и да прегледате наличните параметри.

За да промените минималното време, след което дадена команда се счита за „дълга“, намерете променливата LONG_RUNNING_COMMAND_TIMEOUTСтойността по подразбиране е 10 (секунди), но можете да я зададете на каквото ви е удобно.

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

Ако искате определени команди никога не задейства известие, добавя техните имена, разделени с интервал, към променливата ДЪЛГОТРАЙНО_ИЗПОЛЗВАНИ_СПИСЪК_С_ИГНОРИРАНИ_СЪС_СЪСТОЯНИПолезно е за филтриране на помощни програми, които използвате постоянно и не искате да ви прекъсват.

От друга страна, ако искате да получавате известия, дори когато терминалът е активен прозорец, дефинирайте IGNORE_WINDOW_CHECK=1Това деактивира проверката и винаги Ще видите предупреждението в края на дългата команда.

За да добавите звуков сигнал, коригирайте променливата UDM_PLAY_SOUND на ненулево цяло число. В Debian/Ubuntu системи тази функция изисква инсталиране pulseaudio-utils y звук-тема-freedesktop, тъй като разчита на темата за звуци на работния плот.

sudo apt install pulseaudio-utils sound-theme-freedesktop

След всякакви промени в конфигурационния файл или променливите на средата, не забравяйте презаредете черупката си:

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

Бързи тестове, за да проверите дали работи

Най-лесният начин да проверите това е да изпълните команда, която отнема повече време от 10 секунди (или прага, който сте задали). Например, можете да направите пинг към хост във вашата мрежа или навън с достатъчен брой пакети, за да се превиши ограничението във времето.

ping -c 25 1.1.1.1

В Arch среди е много визуално да се използва команда като sudo pacman -Syкоето обикновено отнема известно време в зависимост от състоянието на огледалата:

sudo pacman -Sy

Запомнете две ключови неща: известието се появява, когато изпълнението на командата е отнело повече време от прага и по подразбиране само ако активният прозорец не е терминалът къде се изпълнява. Ако процесът завърши преди изтичането на времето за изчакване, няма да видите съобщение; ако все още искате да го получавате, коригирайте стойността на LONG_RUNNING_COMMAND_TIMEOUT или деактивирайте проверката на прозорците с IGNORE_WINDOW_CHECK.

Бързи алтернативи без инсталиране на нищо допълнително

Въпреки че Undistract-me е много удобен, има минималистични решения, които можете да използвате само когато искате. С уведомявам-изпращам (Това обикновено е включено по подразбиране в много настолни компютри.) Можете да добавите предупреждение в края на командата си:

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

Ако предпочитате по-видим диалогов прозорец, Зенит Това е друга типична опция в GTK среди. Моделът на използване е също толкова прост и показва информационен прозорец след завършване:

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

Бърз трик: вместо && (което изпълнява втората част само ако първата е успешна), можете да го направите верига с ; така че известието да се получи, независимо от всичко. Използвайте го внимателно в зависимост от ситуацията.

Има още алтернативи и добавки: от инструменти като НотиФайр дори терминали с интегрирани известия (например Tilix (Може да ви уведоми, когато панелът е неактивен). Ако искате допълнителен звук и се придържате към основните неща, един „направи си сам“ вариант е да настроите гласова подкана:

foo; spd-say 'tarea completada'

И за тези, които все още използват високоговорителя на системата, има и такива, които го активират pcspkr със звуков сигнал след дълги задачи. Тромав е, но ефективен в много ограничени среди.

Съвети за употреба и отстраняване на проблеми

Ако не получавате известия, първото нещо, което трябва да проверите, е дали сте активирали опцията за „обвивка за вход“ във вашия терминален емулатор. Без тази настройка, Undistract-me може да не се зареди и hook-ът може да не се инсталира.

Също така проверете дали вашата обвивка чете правилния файл (~ / .bashrc o ~ / .zshrcи какво направи? източник След като го редактирате, добавете ред за дебъгване (например, ехо), за да потвърдите, че файлът се изпълнява при стартиране на терминалната сесия.

Ако включите звука и не чуете нищо, проверете за наличието на pulseaudio-utils и от пакета звук-тема-freedesktopВ допълнение към сървъра за сила на звука и аудио във вашата сесия. На много минималистични настолни компютри може да се наложи да стартирате PulseAudio ръчно или да използвате друг бекенд.

Твърде много известия за тривиални команди? Настройте LONG_RUNNING_COMMAND_TIMEOUT до по-висока стойност и запълнете ДЪЛГОТРАЙНО_ИЗПОЛЗВАНИ_СПИСЪК_С_ИГНОРИРАНИ_СЪС_СЪСТОЯНИ с псевдоними и помощни програми, които не искате да наблюдавате (например, git статус o докер ps ако ги повтаряте многократно).

Подробности за проекта и общността

Кодът Undistract-me се разпространява под Лиценз за емигранти и е публикуван както в Launchpad, така и в GitHub. Няма специален IRC канал, въпреки че традиционно е било възможно да бъде намерен в GitHub. JML в екосистемата на Фринода (преди едно време, в #ubuntu-development). За въпроси или грешки, подходящият канал е въпроси от хранилището или проекта в Launchpad.

Любопитно споменаване за тези, които се наслаждават на вътрешните механизми на зъбните колела: поддръжката на предварително изпълнение Типът Zsh в Bash не е нативен, така че скриптът използва хакване Интелигентна система, която задейства функции преди и след всяка команда. Благодарение на приноси като този на Крис Джоунс (от терминала) Терминатор) и оптимизации на Майки Нюлинг y Стивън РотуелПроизводителността се е подобрила значително в сравнение с първите версии.

В ежедневната употреба инструментът е особено подходящ за компилиране, конвертиране мултимедия, синхронизирате големи количества данни или извършвате операции колет Отнема известно време. Моделът е винаги един и същ: стартирайте командата, превключете прозорците и оставете работния плот да ви уведоми, когато е завършена.

Undistract-me изпълнява точно това, което обещава: по-малко време за гледане в конзолата и повече фокус върху това, което правите. Лесен е за инсталиране, настройва се фино с няколко променливи и се интегрира добре с Bash и Zsh, което го прави задължителен за тези от нас, които прекарват половината си живот в терминала.