Авторские статьи

Привлечение внимание к Терминалу в Unity Launcher.


Для значков в Unity Launcher существует возможность привлечь внимание пользователя к произошедшему событию. Когда значок в Unity Launcher прыгает как сумасшедший и горит дьявольским пламенем, то это и есть - Urgency. Ваши долговыполняющиеся команды в Gnome Terminal не имеют возможности "потрясти" иконку Терминала и привлечь вас к выполнившейся задаче. Вот это мы и поправим ...

Terminal Urgency

Мы напишем небольшую программу на 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.

Дата последней правки: 2013-04-20 08:15:17

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта