17 июля 2010 г.

Compiz desktop

Compiz - это композитный оконный менеджер с множеством настроек, эффектов и апплетов. Используется он чаще всего в качестве замены "родных" оконных менеджеров Gnome и KDE (metacity и kwin соответственно). Привлекает он, пожалуй, прежде всего своими красивыми эффектами (вязкие окна, прозрачность, "сгорание" окна и тому подобное).
Не буду скрывать, у меня изначально возникла мысль использовать всю эту красоту в какой-нибудь простой графической среде, типа openbox, чтобы и красивые плавные эффекты и без лишних гномовских и кдешных довесков. Однако, я быстро поняла, что так как и openbox, и compiz оба являются оконными менеджерами, то совместно использоваться они и не могут. Зато compiz теоретически должен запускаться без всяких Gnome или KDE просто в качестве автономного полноценного оконного менеджера.
Правда, судя по результатам поиска в интернете, мало кто работает в такой среде. Оно и понятно: не совсем логично использовать навороченный WM только ради его красивых эффектов, а раз уж мощность компьютера позволяет, почему не запускать полноценный DE, и в нём уже compiz. Однако, своя логика в таком использовании тоже есть: ну очень уж много всего лишнего тянут с собой готовые DE, особенно KDE, и если всё остальное не нужно, почему не юзать один только WM. По правде же говоря, мне просто захотелось попробовать, насколько это осуществимо в принципе.
compiz desktop
Хотя, конечно, на скриншоте ничего толком и не видно - то же самое можно сделать и из gnome и из какого-нибудь другого windows manager.

Итак самое главное, как запустить такую сессию, ведь при установке любого оконного менеджера, сессия сама появляется в списке для выбора из gdm или kdm, а при установке compiz ничего подобного не происходит.
Для добавления новой графической сессии, нужно прописать команду, её запускающую в соответствующий файл. Команда для запуска сессии с "голым" компизом - fusion-icon (как это ни странно).
А куда её прописывать зависит от дистрибутива. Многие (в том числе и ArchLinux) используют файл ~/.xinitrc и в этот файл следует добавить строку:

exec ck-launch-session fusion-icon
Но в Ubuntu несколько другая схема (хотя ~/.xinitrc тоже можно пытаться использовать, но это чревато дополнительным геморроем) - чтобы появилась новая сессия, следует создать файл compiz.desktop в /usr/share/xsessions/ следующего содержания:
[Desktop Entry]
Enconding=UTF-8
Name=Compiz Session
Comment=Use this session to run Compiz-fusion as your desktop environment
Exec=fusion-icon
Type=Application
Теперь при входе через gdm или kdm в списке сессий появится новая - Compiz Session (название можно поменять в файле). В slim это тоже работает: там должна быть раскомментирована строчка login_cmd exec /bin/bash -login /etc/X11/Xsession %session и добавлен compiz в список сессий.

Однако если сейчас загрузиться в новую сессию мы увидим чёрный рабочий стол, сможем покрутить куб рабочего стола (если созданы соответствующие настройки) и в общем-то всё. Ни меню, ни панели, ни даже командной строки, открывающейся по Alt+F2 нет, что делает невозможным какие-либо действия вообще.
Поэтому стоит настроить автозапуск некоторых программ, ну хотя бы панели. Для этого надо создать файл start_fusion.sh следующего содержания:

#!/bin/sh
cairo-dock &
fusion-icon
И поместить этот файл в директорию с другими исполняемыми файлами, например, в /bin/ (хотя это, наверное, не лучший выбор). И тогда fusion-icon в файлах /usr/share/xsession/compiz.desktop или ~/.xinitrc нужно будет заменить на start_fusion.sh или даже /bin/start_fusion.sh.
Ну и естественно cairo-dock тут прописан лишь как пример - можно заменить его любой панелью, а также добавить и другие строки с необходимыми программами (главное, не забывать & в конце каждой строки).
Однако, сработал автозапуск у меня лишь, когда сессия запускалась через ~/.xinitrc, а для сессии из /usr/share/xsessions/ годен оказался скрипт, который я просто скопировала из арчвики (правда, заработало именно в Ubuntu):
#!/bin/sh
cd /home/opossum
#
eval `dbus-launch --sh-syntax --exit-with-session`
#
/usr/bin/X :0.0 -br -audit 0 -nolisten tcp vt7 &
#
export DISPLAY=:0.0
#
sleep 1
#
compiz-manager decoration move resize > /tmp/compiz.log 2>&1 &
# add more apps here if necessary or start another panel, tray like pypanel, bmpanel, stalonetray
cairo-dock &
fusion-icon
Конечно /home/opossum во второй строке нужно заменить на путь к домашней папке юзера, для которого всё это делается.

На самом деле, это ещё только самое начало. Видимо, от того, что compiz не рассчитывался на подобное использование, с ним постоянно возникают какие-то мелкие неудобства и вопросы.
Пожалуй, что следует сделать сразу: назначить на Alt+F2 запуск программы gmrun, описанной в предыдущем посте. После этого многие смогут обойтись и без панели, и без меню.
Ещё одна проблема, досаждающая сразу - отрисовка рабочего стола наутилусом. Причём пока nautilus не запустишь, всё нормально - в compize есть модуль для настройки обоев рабочего стола. Неприятность в том, что из настроек самого наутилуса, отключить это никак нельзя, в отличии от pcmanfm. Правда, я и не в курсе, возникают ли подобные проблемы, если Gnome вообще не установлен. Но скорее всего, возникают. И когда гном установлен, можно открыть gconf-editor и отключить отрисовку через него, а если не установлен, то же самое должна сделать команда:

gconftool-2 --set "/apps/nautilus/preferences/show_desktop" --type bool "false"
Хотя, возможно, кому-то, наоборот, удобнее будет с рабочим столом от наутилуса.

Естественно, есть ещё множество мелких проблем, которые надо решить в получившемся самодельном DE. Навскидку приходит на ум: во-первых, настроить перезапуск иксов по Ctrl+Alt+Backspace, а во-вторых, задать файловый менеджер по-умолчанию, если это вообще возможно (а то, например, апплет "быстрый просмотр папки" в cairo-dock не работает). Однако, работать уже можно и так и достаточно удобно.


11 комментариев:

  1. Дак скрин с Гномом? на голую систему не ставится?

    ОтветитьУдалить
  2. Почему же с гномом если я писала именно о том, как сделать среду с компизом в качестве оконного менеджера и без всяких гномов или кед? Это именно оно на скрине и есть: compiz session, а в ней cairo-dock, covergloobus, терминал и audacious. То, что запущен именно gnome-terminal, а у audacious гтк-шная морда ни разу не значит, что это гном.

    ОтветитьУдалить
  3. по сути, почти Гном, только без панели и её зависимостей.. Тоже так делал.

    ОтветитьУдалить
  4. бгг))
    А если запустить только кутишные приложения, будет по сути почти кеды только без плазмы и её зависимостей?
    и да, гном таки состоит не только из гномопанели и гтк-шных приложений.
    Ну или можно считать так, только в этом и суть, чтоб без лишней ДЕ-шной шняги

    ОтветитьУдалить
  5. это все хорошо и сам этим пользуюсь, но есть проблема: глобальные горячие клавиши=) неудобно каждый раз лезть в плеер и переключать песню.

    ОтветитьУдалить
  6. На то оно и не DE. Впрочем, наверняка, есть способ это дело тоже настроить.

    ОтветитьУдалить
  7. большое спасибо - а то ещё бы два дня ковырялся, а теперь только остаётся всё это к генту приспособить

    ОтветитьУдалить
  8. пожалуйста) ну как, получается в генту?)

    ОтветитьУдалить
  9. глобальные клавиши делаются с помощью xbindkeys. плюс в том, что эта программа не зависят от wm и de, то есть один раз настроенная, она будет всегда работать

    ОтветитьУдалить
  10. самый лучший способ, это выпилить полнстью запуск стандартного WM и сделать запуск compiz'a. Для этого создать файл в /usr/share/applications например compiz-gtk-run.desktop:
    [Desktop Entry]
    Type=Application
    Encoding=UTF-8
    Name=Compiz
    Exec=compiz-gtk-run
    NoDisplay=true
    X-GNOME-Autostart-Phase=WindowManager
    X-GNOME-Provides=windowmanager
    X-GNOME-WMName=compiz
    X-GnomeWMSettingsLibrary=compiz

    создать файл в /usr/bin compiz-gtk-run:
    #!/bin/sh
    #compiz-decorator &
    emerald &
    compiz ccp &

    сделать его выполняемым: chmod +x compiz-gtk-run . выбор декоратора по желанию, если установлен emerald, можно еще добавить пару строк кода для выявления краха compiz'a при запуске и запускать в таком случае metacity или mutter (хотя работает без проблем).

    А теперь выпиливаем стандартный WM в файле /usr/share/gnome-session/sessions/gnome-fallback.session (для GNOME3) или какой там в GNOME2 ищем строчки:

    RequiredComponents=avant-window-navigator;gnome-settings-daemon; # здесь можно стандартную панель gnome-panel заменить на что нибудь изящное, а стандартную выпилить вообще (но при этом перестанет работать Alt+F1 и Alt+F2) но стандартное меню и Launcher можно заменить например на GRun или QProgram Starter, а меню на Compiz Deskmenu
    RequiredProviders=windowmanager;notifications;
    DefaultProvider-windowmanager=compiz-gtk-run # заменяем здесь на имя файла в /usr/share/applications который мы добавили в данном случае compiz-gtk-run
    DefaultProvider-notifications=notification-daemon

    и все, теперь у нас по умолчанию будет запускать только Compiz можно в настройках Crash Handler прописать metacity или mutter

    проделывал это и на Arch Linux и на Debian и на дистрах думаю проблем не возникнет

    ОтветитьУдалить