Поиск по блогу :

    4 ноября 2009 г.

    Изменения всплывающих сообщений (notify-osd) в Ubuntu 9.10

    После обновления убунты до версии 9.10, долго не мог прийти в себя, после того как увидел, что сотворили с всплывающими сообщениями. Для тех, кто не в курсе объясняю, в предыдущей версии убунты 9.04 - эти сообщения отображались в правом верхнем углу, сразу под панелью, один за одним по мере вывода, будь то системные сообщения или пользовательские. В новой же версии, по-умолчанию системные сообщения так и выводятся сверху, а вот пользовательские выводятся на пикселей 60 ниже. Как объясняют разработчики, это сделано для удобства. Только я не могу понять - удобства для кого??

    В общем, еще раз вспомнив "добрым" словом разработчиков за их удобства, начал искать где это нововведение можно отключить. Как оказалось, никакой такой опции в конфигах не предусмотрено (и я не скажу что я плохо искал, перерыл кучу инфы - опций нет). Зато удалось выяснить, что система вывода сообщений называется slot-allocation и теперь подразделяется на два типа 'fixed' и 'dynamic'. В 9.04 использовалась версия 'dynamic', а в 9.10 используется версия 'fixed'.
    В общем посмотрел я на все это дело и за неимением нормальных настроек, полез в исходники искать правды. И нашел :)

    Исправляем досадное недоразумение

    1. Устанавливаем все нужные зависимости

    $
    sudo apt-get build-dep notify-osd

    2. Скачиваем исходники системы сообщений notify-osd:
    $
    apt-get source notify-osd

    3. Заходим в папку 'notify-osd-0.9.24/src' (она создается при автоматической распаковке в предыдущем шаге)
    $
    cd notify-osd-0.9.24/src/

    4. Открываем для редактирования файл defaults.c
    $
    gedit defaults.c

    4.1. Ищем 758 строку и заменяем строку
    self->slot_allocation = SLOT_ALLOCATION_FIXED;
    на
    self->slot_allocation = SLOT_ALLOCATION_DYNAMIC;
    и сохраняем изменения.
    5. Переходим каталогом выше
    $
    cd ..

    6. Запускаем сборку пакета
    $
    sudo dpkg-buildpackage

    7. Еще раз переходим каталогом выше
    $
    cd ..

    8. И устанавливаем собранный deb-пакет
    $
    sudo dpkg -i notify-osd*.deb

    9. Вот и все :)

    Собранные пакеты, с внесенными изменениями, можно скачать c моего репозитория
    $

    $ $
    sudo add-apt-repository "deb http://ppa.launchpad.net/leolik/leolik/ubuntu main"
    sudo apt-get update
    sudo apt-get install notify-osd

    или с репозитория Dr.AKULAvich (за что ему большое спасибо).
    $

    $ $
    sudo add-apt-repository "deb http://ppa.launchpad.net/dr-akulavich/ppa/ubuntu main"
    sudo apt-get update
    sudo apt-get install notify-osd


    Дополнительные возможности notify-osd

    1) gravity - параметр переключает место отображения сообщений на экране.
    1. Создание параметра:
    $
    gconftool-2 -s /apps/notify-osd/gravity --type=int 1

    где значение 1 - сверху-справа(NorthEast), а 2 - посредине-справа(East)
    2. Удаление параметра (так на всякий случай):
    $
    gconftool-2 -u /apps/notify-osd/gravity



    2) multihead_mode - параметр вкл/откл отображение сообщений на том мониторе, который в данный момент активен (касается, только владельцев нескольких мониторов).
    1. Создание параметра:
    $

    gconftool-2 -s /apps/notify-osd/multihead_mode --type=string focus-follow

    где значение focus-follow - отображение на активном мониторе, а любое другое значение - отображение всегда на основном мониторе.
    2. Удаление параметра (так на всякий случай):
    $
    gconftool-2 -u /apps/notify-osd/multihead_mode



    После создания параметров описанных выше, ими можно будет управлять через 'Редактор конфигурации' (gconf-editor)

    Добавление нового сообщения в предыдущее

    Благодаря статье с хабра, узнал, что наши кулибины, написали простенький сервер на Python, который следит за посылаемыми ему сообщениями и если они от одной и той же программы (а точнее имеют одинаковый заголовок), то выводит их в одном и том же открытом попапе notify-send, вслед за предыдущим сообщением. Если кто не знает, по-умолчанию notify-osd каждый раз запускает свою новую копию, для вывода нового попапа.

    1. Скачиваем архив со скриптами - отсюда.
    2. Распаковываем его и кладем файлы 'notify-append-server.py', 'notify-send-ex' - в папочку '/usr/local/bin'
    3. Устанавливаем необходимые пакеты, если они еще не стоят:
    $
    sudo apt-get install python-notify libnotify-bin

    4. Проверяем скрипт, вызвав несколько раз сообщения из консоли, например:
    $
    notify-send-ex Caption Message nautilus

    5. Все, теперь Вы можете использовать данный скрипт для различных программ, к примеру в Skype. Я уже, ранее, писал в заметках, как можно выводить сообщения skype через notify-osd. Вам остается лишь вместо строки:
    notify-send "%sname" "%smessage" -i skype
    использовать строку:
    notify-send-ex "%sname" "%smessage" skype

    Обновлено 15.03.2010г. в 5:03