Xubuntu i zdesynchronizowany Xrender

Comment: 1

… czyli co najmniej jedna rzecz do zrobienia po zainstalowaniu Xubuntu (11.10).

Teorii czar

Błąd ten przewija się przez Launchpad, Bugzille i inne miejsca od dłuższego czasu (paru lat?). Mianowicie, korzystając z kompozytora opierającego się o Xrender, a nie OpenGL (np. Xfwm4 w Xubuntu), esteci zauważą szarpanie się krawędzi okien podczas ich przesuwania, czy też poziome lekkie przesunięcie rozdzielające na pół oglądany materiał video.

Błąd ten jest spowodowany brakiem synchronizacji vblank w Xrender. A opisując to obrazowo: zawartość ekranu jest ‘rysowana’ magicznym pisakiem od góry ekranu do dołu, linijka po linijce. Jeżeli pisak znajdzie się w połowie ekranu i zacznie rysować nasze okno, a my je w tym momencie przesuniemy, to np. połowa lewej krawędzi okna zostanie narysowana na pozycji powiedzmy, 400 piksela szerokości ekranu, a druga połowa na pozycji 410 piksela szerokości ekranu. Czyli pionowa linia będzie nierówna. Jeżeli natomiast użyjemy synchronizacji vblank, to pisak z rysowaniem efektów poczeka do następnego rozpoczęcia rysowania całości ekranu (czyli jak zakończy rysowanie na dolnej krawędzi i wróci do góry). Tyle mądrości, a co począć z tym problemem?

Plan ataku

O ile w przypadku odtwarzaczy można ratować się ustawieniem sterownika wyjścia obrazu na korzystający z OpenGL (Mplayer i pochodne – wyjście obrazu GL), o tyle w przypadku nierównych krawędzi okien mamy nieco zawężone opcje. Otwarta jest kwestia użycia innych sterowników graficznych – zamkniętych od NVIDII lub otwartych Nouveau, analogicznie w przypadku ATI, czy Intela. Jednak szybkie googlanie po sieci wykazuje, że nie zawsze jest to panaceum na nieestetyczne okna. Można też czekać na jakieś usprawnienia w Xrender, jednak strony zainteresowane wydają się trwać w impasie, patrząc wyczekująco na siebie (developerzy menadżerów okien, developerzy Xrender i developrzy od sterowników graficznych). Zatem musimy wymienić Xfwm4 na jakiś menadżer okien który sobie z tym problemem poradzi. A radzi sobie stary, dobry Compiz, wykorzystujący OpenGL do malowania zawartości naszych pulpitów.

Schemat działania jest następujący – instalujemy paczki compiz i compizconfig-settings-manager (zależności się dociągną), na próbę podmieniamy menadżera okien i sprawdzamy czy to jest to co nam pasuje. Następnie dokonujemy zmiany na stałe zastępując w ustawieniach sesji Xfwm4 Compizem.

Przemeblowanie

Najszybciej zrobimy to w terminalu, zatem otwieramy magiczne czarne okienko i bez skrępowania polecamy mu zainstalowanie Compiza:

sudo apt-get install compiz compizconfig-settings-manager

Jeżeli nic się nam nie zbuntowało, podmieniamy Xfwm4:

compiz --replace&

Jeżeli coś pójdzie nie tak (np. nie mamy wsparcia 3d w sterownikach), stosowne info wyświetli się nam w odpowiedzi na to polecenie. W innym przypadku ekran błyśnie, huknie i… Od tej pory Compiz będzie zawiadywał naszymi oknami. Sprawdzamy jak się zachowuje i jeżeli nam odpowiada, przystępujemy do stałej zamiany.

Tutaj są dwie szkoły – globalna i lokalna. Globalnie (dla każdego nowego użytkownika), zmiany dokonujemy w pliku:

sudo gedit /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml

Odnajdujemy ciąg ‘xfwm4‘ i zastępujemy go wpisując ‘compiz‘. Zapisujemy plik.

Teraz dokonujemy zmian na własne potrzeby. Możemy podłubać w pliku

gedit ~/.cache/sessions/xfce4-session-NAZWA_WASZEGO_KOMPUTERA:0

… zamieniając xfwm4 na compiz, bądź za pomocą ustawienia->menadżer ustawień->sesja i uruchamianie->sesja, wyłączyć (zaznaczamy program na liście i klikamy ‘wyłącz’) wszystkie programy zostawiając tylko Thunar, Xfdesktop, Xfce4-panel, Xfce4-settings-helper oraz Compiz. Tak zmodyfikowaną sesję zapisujemy.

Wylogowujemy się i logujemy ponownie. Wyciągamy z szafki zakurzoną plakietkę ‘Geek of the Week’, przecieramy i przypinamy sobie dumnie do piersi.


Podpowiedź nr. 1

W celu zmiany domyślnej dekoracji okna, musimy wskazać jakiś motyw Metacity. W tym celu edytujemy plik:
gedit .gconf/apps/metacity/general/%gconf.xml
… i po odnalezieniu
<entry name="theme"(...)
… w tagu:
<stringvalue></stringvalue>
… zamieniamy nazwę tematu Metacity na własną.