Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: [How-to] Как сделать прозрачность murrine engine?  (Прочитано 5555 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lester_dev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Вот хау-ту, как завести примерно вот такую штуку




1. Установка движка

Итак, для начала надо скачать svn trunk последнего murrine engine отсюда http://svn.gnome.org/svn/murrine/trunk/

У вас должны быть установлены девелоперские пакеты libgtk2.0-dev, их можно поставить командой

sudo apt-get install libgtk2.0-dev
Теперь можно компилять муррину. Запускаем

autogen.sh --prefix=/usr --enable-animation
make
sudo make install

2. Настройка тем
Теперь интересная часть.
Просто поставить тему murrine и наслаждаться прозрачностью вам не дадут.
Потому что приложения гтк ничего про эту прозрачность не знают.
Поэтому заходим сюда - http://www.cimitan.com/murrine/rgba-support/list , находим ссылки на плагины, качаем и ставим их.
Например в плагин для ритмбокса нужно закинуть в ~/.gnome2/rhythmbox/plugins, то же и для других приложений eog и gedit, каждый в свой каталог соответственно.
Теперь ставим любую тему отсюда http://www.cimitan.com/murrine/themes/gallery , запускаем, e.g. rhythmbox и наслаждаемся.

3. Настройка для маньяков
Пока была легкая прогулка. Теперь самая жесть. Для того чтобы другие приложения, не имеющие плагинов, тоже умели rgba,
нужно каким-то образом подсунуть им 32-битный колормап перед инициализацией. Некоторые патчат gtk, я же предлагаю вариант ввиде
гткашного модуля.

Итак, берем код:

/*
 * gtk rgba module
 *
 * Original code: geek
 * Improvements: lester
 *
 * Copyright (c) 2008 geek <ggeek.sa@mail.ru>,
 * lester <lester.dev@gmail.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#include <glib/gtypes.h>
#include <glib/gstdio.h>
#include <gtk/gtk.h>
#include <glib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>

static GdkColormap *colormap;


gchar *config = ".librgba.conf";


gboolean
rgba_cmp_prgname_config (const gchar *config,
                   const gchar *prgname)
{

gchar **contents;

gsize size;

if (g_file_get_contents(config, contents, &size, NULL) == FALSE)
{
return FALSE;
}

gint i = 0;
while (contents[i] != NULL)
{
/* look if we have a progname in the config */
if (g_strrstr (contents[i], prgname) != NULL)
{
g_free(contents[i]);
return TRUE;
}
i++;
}

g_free(contents[0]);

return FALSE;
}

G_MODULE_EXPORT void
gtk_module_init (gint * argc, gchar *** argv)
{

    gchar *prgname = g_get_prgname();
   
#if 0
    FILE *f = g_fopen("/home/lester/rgba.log", "a");
   
    if (f)
    {
   
    struct timeval tv;
    struct timezone tz;
   
    gettimeofday(&tv, &tz);
   
    gchar *timestamp = ctime (&tv.tv_sec);
   
    g_fprintf(f, "Found %s at %s\n", prgname, timestamp);
   
    fclose(f);
    }
#endif
   
    g_print ("%s\n", prgname);
   
    gboolean ready_to_go = TRUE;
   
    struct stat buf;
   
    gchar filename[255];
   
    g_sprintf(filename, "%s/%s", g_get_home_dir(), config);

    /* check whether we have a config */
    if (!g_stat(filename, &buf))
    {
    /* we just wanna know is the progname simply
    * in the config or not */
    if (rgba_cmp_prgname_config(filename, prgname))
    {
    /* if it is, cry without rgba */
    ready_to_go = FALSE;
    }
    }
   
    /*
     * We have a normal application
     * which won't glitch
     */
    if (ready_to_go)
    {
   
    colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default());
   
    gtk_widget_push_colormap(colormap);
   
    gtk_widget_set_default_colormap(colormap);
    }
   
}

и компиляем его

gcc -shared `pkg-config --libs --cflags gtk+-2.0` rgba.c -o librgba.so

получившуюся либу копируем в /usr/lib/gtk-2.0/modules/

sudo cp librgba.so /usr/lib/gtk-2.0/modules/
Теперь нужно создать файлика ~/.librgba.conf, куда нужно вписать такие строчки:

Цитировать
firefox-bin
eclipse
soffice
thunderbird-bin
gxine
banshee
codeblocks
pidgin
gajim
audacity
ekiga
gnome-panel
deskbar-applet
gnome-keyboard-applet
gnome-globalmenu-applet
mixer_applet2
awn-applet-activation
rhythmbox
update-notifier
beagle-search
gnome-power-manager
gksu
xaralx
nm-applet
firestarter
gajim.py
gnome-keyring-ask
freeloader
transmission
evolution

Это список тех приложений, которые, как я заметил, не работают с rgba. Для них будет использована обычная 24-битная палитра.
Если у вас есть приложение которое отказывается запускаться (чаще всего на java) - просто запустите ее в консоли, и сразу после запуска оно выдаст настоящую команду. Например так

$firefox
firefox-bin
Segmentation fault
$

Вот этот firefox-bin надо скопипастить в .librgba.conf и все будет ок.

3a. Последние штрихи

Включаем librgba в переменную GTK_MODULES. Можно поместить следующий код в ~/.profile и ~/.bashrc

Цитировать
GTK_MODULES=$GTK_MODULES:rgba
export GTK_MODULES

3б. Итог

Перелогиниваемся и наслаждаемся. Надеюсь хауту вам помогло, если возникнут вопросы или предложения - пишите сюда или на мыло!

з.ы. тема на скрине - не муррина, а моя модификация на основе движков murrine и nodoka. Если надо, могу выложить.
« Последнее редактирование: 03 Апреля 2008, 23:45:49 от lester_dev »

is_a

  • Гость
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #1 : 25 Марта 2008, 17:32:13 »
 :D Аффтар пишы исчо!)

Прикольно, попробую.

Оффлайн KriK

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #2 : 28 Марта 2008, 01:31:26 »
Чтот ерунда какая-то. Наутилус не запускается. Как все делал, записал на вики: http://wiki.linux.uz/index.php/%D0%9F%D1%80%D0%BE%D0%B7%D1%80%D0%B0%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B2_%D0%B3%D0%BD%D0%BE%D0%BC%D0%B5
Еще аплеты некоторые не грузятся.

Оффлайн lester_dev

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #3 : 29 Марта 2008, 19:54:15 »
Ну добавь их в .librgba.conf

Пожалуй туда еще gksu надо добавить и gnome-power-manager. Они иногда почему-то не хотят запускаться

Оффлайн Sataly.

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #4 : 20 Сентября 2008, 19:51:02 »
оч полезный хау-ту, спасибо :coolsmiley:
а скажи плз, как сделать что бы сведения о системе на рабочий стол можно было вывести :) (как у тебя справа)
Я часть той силы, что очень хочет зла, но вечно совершает благо.

Оффлайн alex.kunitsa

  • Участник
  • *
  • Сообщений: 216
  • ak-studio.com.ua
    • Просмотр профиля
    • AK-studio
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #5 : 20 Сентября 2008, 21:13:24 »
conky :)
lenovo v570

Оффлайн Sataly.

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Я часть той силы, что очень хочет зла, но вечно совершает благо.

Оффлайн Akothu

  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: [How-to] Как сделать прозрачность murrine engine?
« Ответ #7 : 15 Октября 2008, 00:38:42 »
Сделал по инструкции и чот нет прозрачности -_-

 

Страница сгенерирована за 0.019 секунд. Запросов: 21.