Для значков в Unity Launcher существует возможность привлечь внимание пользователя к произошедшему событию. Когда значок в Unity Launcher прыгает как сумасшедший и горит дьявольским пламенем, то это и есть - Urgency. Ваши долговыполняющиеся команды в Gnome Terminal не имеют возможности "потрясти" иконку Терминала и привлечь вас к выполнившейся задаче. Вот это мы и поправим ...
Мы напишем небольшую программу на Python 3 и она поможет в поставленной задаче. Питон 3 взят, с прицелом на будущее, из-за тотального Unicode и беспроблемной работы с русскими буквами.
Наша программулька не только потрясёт значком Unity Launcher'а, но и выведет уведомление. Если что-то из этого не нужно, то смело правьте исходник. Для работы с уведомлениями в Python 3 нам, возможно, понадобится пакет python3-notify2, который нужно установить sudo apt-get install python3-notify2
Вот тот не идеальный код на Питоне 3, который нужно скопировать и вставить в файл bell. Наш звоночек нужно сохранить к себе в ~/bin/ и сделать исполняемым.
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- # site: vasilisc.com/urgent-terminal # need packages python3-notify2 - sudo apt-get install python3-notify2 from gi.repository import Unity, GObject import sys import notify2 counti = 0 loop = GObject.MainLoop() launcher = Unity.LauncherEntry.get_for_desktop_id("gnome-terminal.desktop") def update_urgency(): global counti global launcher counti=counti+1 if counti >= 2: loop.quit() launcher.set_property("urgent", True) return True GObject.timeout_add_seconds(2, update_urgency) loop.run() if not notify2.init("icon-summary-body"): sys.exit(1) n = notify2.Notification( "Терминал", "Была выполнена ваша задача", "notification-message-im") n.show()
Почему в ~/bin/ ? У нас есть у каждого в домашней папке файл .profile, в котором установлено при наличии папки ~/bin/ добавить её в переменную PATH и тогда программы из этой папки не нужно указывать с полным путём и достаточно указать только имя файла программы, что весьма удобно.
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Файл bell лежит в ~/bin/ и обладает битом исполнимости. Теперь можно запускать имитацию длительной команды и протестировать колокольный звон нашего bell.
Пингаем свой шлюз 5 пакетами и наблюдаем работу bell.
ping -c 5 `ip route show default | awk '/default/ {print $3}'` && bell
Если вам не нужно трясьти значком Терминала и достаточно только уведомления, то можно поступить проще. В файле ~/.bashrc есть алиас с именем alert.
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"
Нужно удалить знак комментария # перед ним, а если алиаса alert нет, то добавить и перезайти в Терминал. Теперь при использовании алиаса alert в длительных операциях в виде sleep 5; alert
выведет уведомление в правом верхнем углу.
Теперь с помощью bell или alert вы всегда будете предупреждены о завершении длительных во времени команд в Терминале.
Дополнительные материалы:
Unity Ubuntu изнутри. Launcher.
Terminal с нужными размерами и положением.
Отключить подтверждение gnome-terminal.