27 марта 2011 г.

Принуждаем приложения использовать системный трей Unity

В последнее время в сети поют деферамбы Unity, который еще очень сырой, недоработанный и не время ему быть по умолчанию в Ubuntu 11.04, хотя кто нас спросит. IMHO

На вскидку, что мы видим при запуске Unity? Да ничего, пока в Gnome не сделаем выполняемой при старте команду compiz --replace, то от Unity увидим просто фоновое изображение или там же нужно будет в терминале выполнить эту же команду. Покрайней мере так получается у меня. Не буду описывать все недостатки или плюсы Unity, но первое, что сразу бросилось в глаза, так это отсуствие иконки менеджера буфера обмена... Не судите строго заметку пользователя fluxbox'a, но пришлось поискать решения для себя и благодаря добрым людям оно нашлось, может и вам поможет... 

Источник

В Ubuntu Natty, а точнее в Unity, используется список запрещающий приложения, которые обычно используют область уведомлений для отображения иконки на панели. Это изменение является простой попыткой заставить разработчиков открытого программного обеспечения изменить свои приложения, так чтобы они вписывались в видение того, как программное обеспечение должно разрабатыаться по мнению Каноникла, а не как принято конструкциями сообщества.

Под это ограничение, попадает множество приложений, например: Jupiter, xchat, xchat-gnome, blueman, parcellite  и т.д., которые больше не будут правильно работать в Ubuntu Natty под Unity. И разработчики правы в том, что не видят необходимо переписать ПО, лишь для того чтобы оно соответствовало видению Марка, когда оно уже работает во всех других дистрибутивах, в которых она поддерживается и используется. И дело даже не в дистрибутивах, ведь в любых DE и WM, отличных от Unity, все прекрасно работает и в самой Ubuntu.

При этом, FEWT задался целью создания простого скрипта, который позволит любому ПО отображать значок в области уведомлений под Unity и назвал это просто "whitelist".

Создать в каталоге со скриптами файл "whitelist" и скопировать туда текст: cat>.scripts/whitelist

#!/bin/bash
SCHEMA="com.canonical.Unity.Panel"
OBJECT="systray-whitelist"
APP="$1"
if [ ! "$(gsettings get $SCHEMA $OBJECT 2>/dev/null || echo FALSE)" = "FALSE" ]; then
  echo "Whitelisting $APP to work around flawed distribution design.."
  OBJARRAY=$(gsettings get $SCHEMA $OBJECT | sed -s -e "s#\['##g" -e "s#', '# #g" -e "s#'\]##g")
  if [[ "${OBJARRAY[@]}" =~ "$APP" ]]; then
    echo "$APP already whitelisted, skipping"
  else
    OBJARRAY=("${OBJARRAY[@]}" $APP)
    OBJARRAY=$(echo ${OBJARRAY[@]} | sed -s -e "s# #', '#g")
    OBJSET="['"$OBJARRAY"']"
    gsettings set $SCHEMA $OBJECT "$OBJSET"
  fi
else
  echo "This is not a Canonical \"designed\" product."
fi
сделать его исполняемым с помощью CHMOD (chmod 755 .scripts/whitelist).
Использование скрипта:

$ .scripts/whitelist parcellite

При новой сессии Unity все будет работать так как мы привыкли! :)

N.B. Спасибо Dr.Bodya за данную информацию и еще более простой способ чем предложил FEWT.

Для того что-бы разрешить ВСЕМ приложениям использовать трей, в терминале выполнить команду:

gsettings set com.canonical.Unity.Panel systray-whitelist "['all']"

Можно добавить в белый список лишь необходимые вам приложения:

Linux terminal:~$
gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Mumble', 'Wine', 'Skype', 'hp-systray', 'ваше приложение']"

Просмотреть текущий список: gsettings set com.canonical.Unity.Panel systray-whitelist

Возврат к белому списку по умолчанию:

Linux terminal:~$
gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Mumble', 'Wine', 'Skype', 'hp-systray']"

Для этих настрое можно использовать GUI "dconf-editor" (/desktop/unity/panel/) для этого нужно установить dconf-tools.

P.S. Всех разработчиков не прогнешь, а простым пользователям трудности это создаст. Но прав Марк или нет, решит время и настроение разработчиков. Если Unity преобретет популяность в других дистрибутивах, то и мнение разработчиков по этому поводу может поменяться. Но все же, зачем делать велосипеды с квадратными колесами? Я в недоумении... IMHO

Отправить комментарий