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

  • Undistract-me оповестит вас о завершении длинных команд с помощью уведомлений и опционального звука.
  • Полностью настраиваемый: тайм-аут, список исключений и проверка активного окна.
  • Доступно в Debian/Ubuntu и Arch (AUR), с интеграцией в Bash и Zsh.

Терминальные уведомления в Linux

Если вы когда-либо запускали в терминале команду, которая выполнялась какое-то время, а затем начинали заниматься чем-то другим, вы знаете, как легко потерять счет времени. Не отвлекать меня Больше не нужно возвращаться к консоли каждые несколько минут, чтобы проверить, завершена ли работа: инструмент выводит уведомление на рабочий стол, когда длительная команда завершается.

Этот небольшой скрипт работает на Debian, Ubuntu и производные, а также Arch LinuxПо умолчанию он считает любую команду, выполнение которой занимает более 10 секунд, «длительной», и если вы не измените это, он будет предупреждать вас только в том случае, если активное окно не является терминалом, в котором запущен процесс, — именно для того, чтобы избежать ненужных отвлечений, когда вы уже смотрите на это окно.

Что такое Undistract-me и как это работает?

Undistract-me — это, по сути, набор функций оболочки, которые подключаются к циклу выполнения Bash (и также могут интегрировать в Zshдля определения начала и окончания выполнения команды. Когда время выполнения превышает настраиваемый порог, на рабочем столе появляется уведомление и, если вы хотите, звук предупреждение.

По замыслу, сценарий определяет тайм-аут по умолчанию 10 секунд Начиная с которого команда считается «длинной». Это значение можно изменить, а также создать список исключений с именами команд, которые не должны вызывать предупреждения (например, ls o cd Если вы их настраивали, иногда это занимает некоторое время.

Другим важным аспектом работы является активная проверка окон: Уведомление отображается только в том случае, если терминал не находится на переднем плане.Если вы все равно предпочитаете получать уведомления, есть переменная окружения, позволяющая изменить это поведение.

Проект имеет открытый исходный код, его код распространяется по лицензии. эмигрантИсторически разработка была инициирована JML и размещёна на таких платформах, как Launchpad и GitHub. Под капотом используется известный «хак» prexec для Bash (вдохновленный работой Глиф Лефковици получил вклад от таких людей, как Крис Джонс (Терминатор), Майки Нойлинг 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

Если вы предпочитаете явную установку основного компонента и установщика хука, вы также можете написать две строки в вашем ~ / .bashrc таким образом:

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

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

source ~/.bashrc

Установка на Arch Linux и производные (AUR)

В экосистеме Arch Undistract-me доступен в AUR (обычно в варианте не отвлекай меняВы можете скомпилировать его с помощью вашего любимого помощника 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 Terminal Это в настройках профиля > Название и команда; в Терминал 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

Если вам нужны определенные команды никогда не вызывать уведомление, добавляет их имена, разделенные пробелами, к переменной LONG_RUNNING_IGNORE_LISTЭто полезно для фильтрации утилит, которые вы используете постоянно и не хотите, чтобы они вас отвлекали.

С другой стороны, если вы хотите получать уведомления даже тогда, когда терминал является активным окном, определите IGNORE_WINDOW_CHECK=1Это деактивирует проверку и Siempre В конце длинной команды вы увидите предупреждение.

Чтобы добавить звуковое оповещение, настройте переменную UDM_PLAY_SOUND к целому числу, отличному от нуля. В системах Debian/Ubuntu для этой функции требуется установленный Pulseaudio-Utils y без звуковой темы, так как он основан на теме звуков рабочего стола.

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

Помните две важные вещи: уведомление появляется, когда выполнение команды заняло больше времени, чем пороговое значение, и, по умолчанию, только если активное окно не является терминалом Если процесс завершится до истечения времени ожидания, вы не увидите сообщение. Если вы всё ещё хотите его получать, измените значение LONG_RUNNING_COMMAND_TIMEOUT или отключить проверку окон с помощью IGNORE_WINDOW_CHECK.

Быстрые альтернативы без установки чего-либо дополнительного

Хотя Undistract-me очень удобен, существуют и минималистичные решения, которые можно использовать только тогда, когда вам это нужно. уведомить-отправить (Обычно это включено по умолчанию во многих рабочих столах.) Вы можете добавить предупреждение в конец команды:

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

Если вы предпочитаете более наглядное диалоговое окно, Зенити Это ещё один типичный вариант в средах GTK. Схема использования столь же проста, и по завершении отображается информационное окно:

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

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

Есть еще альтернативы и дополнения: из таких инструментов, как NotiFyre даже терминалы со встроенными уведомлениями (например, Tilix (Он может уведомлять вас, когда панель неактивна.) Если вам нужен дополнительный звук и вы придерживаетесь базовых настроек, можно самостоятельно создать голосовую подсказку:

foo; spd-say 'tarea completada'

А для тех, кто все еще пользуется громкой связью системы, есть те, кто ее включает. шт./уп. С звуковым сигналом после длительной работы. Это неуклюже, но эффективно в условиях минимального использования.

Советы по использованию и устранению неполадок

Если вы не получаете уведомления, первым делом проверьте, включили ли вы опцию «оболочка входа» в эмуляторе терминала. Без этой настройки Undistract-me может не загрузиться, а хук — не установиться.

Также проверьте, что ваша оболочка считывает правильный файл (~ / .bashrc o ~ / .Zshrcи что ты сделал источник После редактирования добавьте отладочную строку (например, эхо) для подтверждения того, что файл будет выполнен при запуске терминального сеанса.

Если вы включили звук и ничего не слышите, проверьте наличие Pulseaudio-Utils и из пакета без звуковой темыПомимо громкости и аудиосервера в вашем сеансе. На очень минималистичных рабочих столах может потребоваться запустить PulseAudio вручную или использовать другой бэкэнд.

Слишком много уведомлений для тривиальных команд? Измените LONG_RUNNING_COMMAND_TIMEOUT к большему значению и заполните LONG_RUNNING_IGNORE_LIST с псевдонимами и утилитами, которые вы не хотите отслеживать (например, git статус o docker ps (если вы часто их повторяете).

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

Код Undistract-me распространяется под Лицензия экспата и существует как на Launchpad, так и на GitHub. У проекта нет отдельного IRC-канала, хотя традиционно его можно было найти на GitHub. JML в экосистеме Свободный узел (в свое время, в #ubuntu-devel). В случае возникновения вопросов или ошибок, соответствующий канал — вопросы из репозитория или проекта на Launchpad.

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

В повседневном использовании этот инструмент особенно хорошо подходит для компиляции, конвертации мультимедиа, вы синхронизируете большие объемы данных или выполняете операции пакет Они требуют времени. Схема всегда одна и та же: запускаете команду, переключаетесь между окнами и ждёте уведомления на рабочем столе по завершении.

Undistract-me делает ровно то, что обещает: меньше времени смотреть на консоль и больше концентрироваться на том, что вы делаете. Он легко устанавливается, настраивается с помощью пары переменных и хорошо интегрируется с Bash и Zsh, что делает его незаменимым инструментом для тех из нас, кто проводит полжизни в терминале.