sobota 19. března 2011

Proč zlobí změna kurzoru myši (nejen) v Ubuntu 10.04?

Několik verzí se s Ubuntu táhla chyba sovisející se změnou vzhledu myši a Compizem. Ve verzi 10.10 Maverick je Compiz opraven, v 10.04 LTS ještě zcela nepochopitelně ne. Compiz ale není jediným faktorem v této problematice, která se tak týká i Mavericka. Zkuste si změnit téma kurzoru v Gnome a pak najet na myší například nad SMPlayer, nebo Operu. Tento článek se snaží ukázat, kde je problém a co se s tím dá dělat.


Kurzory nijak neměním, problém u mě vznikl tak, že jsem v Ubuntu 10.04 zkoušel KDE a pak se i v Gnome objevila ta oxygenní šipka a nemohl jsem se jí zbavit. Nakonec jsem se jí zbavil, načež se mi výchozí vzhled šipky změnil na to, co má X server implementováno jako výchozí a vůbec to není hezké. Jen v některých aplikacích. Pak jsem to vzdal a vrátil se k tomu pořádně až dnes a trochu pokročil a pochopil.
Tehdy jsem měl v Gnome nastaveno téma DMZ-White, ale výsledek byl zhruba takový: najedu myší nad Firefox a všechno se zdá vpořádku, šipka, klikací pracka, kurzor nad textovým polem, všechno ve vzhledu, který jsem si nastavil já, včetně velikosti. Najedu nad Operu a všechno je špatně - kurzor myši je komplet ve vzhledu, kterého se chci zbavit. Najedu nad Plochu, šipka je špatně, klikací pracka je správně a jako perlička - když najedu na okraj okna, kdy mohu měnit jeho velikost a mění se patřčně kurzor, stisknu myšítko, kurzor se změní zas na ten šeredný, ale tentokrát se správnou velikostí. Zní to fantasticky, že?
A kdo za to může? To nevím, ale zásadnější roli tu hrají tři řádky ve zdrojáku compiz-core, jejichž oprava je otázkou minut. Compiz je v Ubuntu 10.10 opaven, ale problém je trochu trochu komplikovanější, jak se dozvíte dále.

1a. Konfigurace index.theme
První částí řešení problému, bez opravy zdrojového kódu a rekompilace, je úprava konfigurace výchozího vzhledu kurzoru X serveru, aby souhlasil s tím, který jste si vybrali v Gnome. To zajistí správný vzhled kurzoru i v aplikacích, které nastavení Gnome neposlouchají. Je potřeba zapsat jméno vzhledu (vlastně jméno složky, ve které téma sídlí v /usr/share/icons/, případně ~/.icons/) do souboru index.theme a máte dvě možnosti - jednu globální a druhou pro konkrétního uživatele.

Buď tedy editujete
$ sudo nano /usr/share/icons/default/index.theme

nebo
$ nano ~/.icons/default/index.theme

Pokud zmíněné adresáře nemáte, vytvoříte si je (mkdir /cesta/adresář). Do index.theme napíšete jméno složky s vámi vybraným vzhledem, např.: 
[Icon Theme]
Inherits=DMZ-White

Nakonec restartujete Compiz - Alt+F2 a spustíte:
compiz --replace

Pokud zvolíte konfiguraci na úrovni uživatele, musíte počítat s tím, že nad okny aplikací spuštěných s právy administrátora (tzv. pod rootem), se bude kurzor opět měnit na výchozí, definovaný v systému. Podoba kurzoru myši závisí na nastavení konkrétních aplikací, proto se změna v některých nemusí projevit hned. Operu, SMPlayer a další aplikace budete muset restartovat, aby si načetly vzhled nového kurzoru.

1b. Update-alternatives 
Toho samého, co v předchozím bodě, můžete dosáhnout pomocí správy alternativ. Systém alternativ spočívá v tom, že místo jednoho souboru, máte nějaký obecný link, který odkazuje na jiný link v  /etc/alternatives/. Link v /etc/alternatives/ je zároveň jménem konkrétní skupiny a ten teprve odkazuje na zvolenou alternativu. Můžete alternativy přidávat, mazat, nastavovat prioritu, .. V našem případě je v systému definována skupina pod názvem x-cursor-theme spravující alternativy k /usr/share/icons/default/index.theme. Pokud instalujete nové vzhledy kurzorů z nějakého instalačního balíku, zpravidla se sem jako alternativa přidají, ručně je můžete přidávat pomocí update-alternatives --install, viz manuál. Vzhled kurzoru tedy můžete přenastavit takto:

$ sudo update-alternatives --force --config x-cursor-theme

Po spuštění příkazu se vypíše seznam registrovaných alternativ, ze kterého si vyberete napsáním pořadového čísla - to zajišťuje volba --config. Volba --force zajistí, že se zapíše zvolený link i v případě, že je na jeho místě běžný soubor, prostě ho přepíše. /usr/share/icons/default/index.theme tedy nyní nepřímo odkazuje na index zvoleného vzhledu v adresáři, ve kterém je vzhled instalován. Kam ve skutečnosti vede, se můžete podívat:

$ ls -l /usr/share/icons/default/index.theme
$ ls -l /etc/alternatives/x-cursor-theme 

2. Oprava compiz-core
Druhou částí je oprava oněch tří řádků v balíku compiz-core., která vám krom okamžité změny kurzoru, přidá funkčnost nastavení velikosti hlavního kurzoru (šipky), kteréžto bez opravy nefunguje s Compizem vůbec. Upozorňuji, že tento postup je pro Ubuntu 10.04 Lucid Lynx, v 10.10 je to již opraveno.

Protože je potřeba balík překompilovat, budete potřebovat nějaké nástroje, kreré si pořídíte takto:
$ sudo apt-get install build-essential apt-src

Nyní stáhnete zdrojové kódy:
$ mkdir ~/compiz-core; cd ~/compiz-core
$ sudo apt-src install compiz-core

A upravíte soubor compiz-0.8.4/debian/patches/013-add-cursor-theme-support.patch nahrazením řeťezce core.xml.in za core.xml.in.in na řádcích 133, 135, 136. Můžete to udělat ve svém oblíbeném editoru spuštěném s právy superuživatele, například:
$ gksudo gedit compiz-0.8.4/debian/patches/013-add-cursor-theme-support.patch

nebo to rovnou vyměnit příkazem:
$ sudo sed -i "s/core.xml.in/core.xml.in.in/g" compiz-0.8.4/debian/patches/013-add-cursor-theme-support.patch

Po úpravě vyrobíte instalační balík (chvilku to bude trvat, podle rychlosti pece):
$ sudo apt-src build compiz-core

A hotový nový balík nainstalujete místo původního. Zde je samozřejmě rozdíl v závislosti na tom, zda máte 64bit systém:
$ sudo dpkg -i compiz-core_0.8.4-0ubuntu15_amd64.deb

nebo 32bit systém:
$ sudo dpkg -i compiz-core_0.8.4-0ubuntu15_i386.deb

Nakonec restartujete Compiz (Alt+F2 compiz --replace).

Nyní se můžete radovat, jak se pěkně kurzor mění hned jak si ho vyberete, velikost jakbysmet, ale nadšení vás nejspíš opustí při spuštění Opery, SMPlayeru, změně velikosti, nebo tažení okna. Sakra! Ten kurzor se zas mění na něco jiného!
Zkrátka některé aplikace budou vyžadovat použití prvního bodu tak jako tak a to i v Ubuntu 10.10. V těchto aplikacích můžete zapomenout na změnu velikosti kurzoru (nebo snad ne? čtěte dál..), ta bude podle výchozího nastavení konkrétního tématu. Není to už problém Compizu, tyto aplikace čtou nastavení přímo z X serveru, místo z gconfu a stejně tak to budou dělat i bez Compizu.
A je tu ještě další bota: s příští aktualizací Compizu se to zase přepíše špatným kódem a můžete začít znovu. Nebo zamknout balík a neaktualizovat.

3. Změna  velikosti kurzoru u nestandardních aplikací
Ovšem s tou změnou velikosti u postižených aplikací se dá také něco dělat - můžete ještě využít konfiguračního souboru ~/.Xresources, který Ubuntu v základu neobsahuje, ale nic vám nebrání si ho vytvořit. V něm definujete velikost kurzoru a pokud zvolené téma tuto změnu podporuje, bude použita:

Xcursor.size: 48

Nastavení se samozřejmě vztahuje ke konkrétnímu uživateli, v jehož domovském adresáři se soubor nachází. Změna se projeví po restartu X.

4. Automatizace
Pokud měníte kurzory častěji, můžete si přenos konfigurace trochu zautomatizovat. Následující příkazy si přečtou nastavení kurzoru v Gnome gconf a přepíší nastavení  /usr/share/icon/index.theme a ~/.Xresources. Předpokladem pro správnou funkci je, že soubory existují a je v nich nastavení definováno způsobem, který jsem ukázal dříve. Pokud jste použili výše popsanou metodu 1b., smažte před použitím následujících příkazů index.theme a nahraďte ho řešením z 1a.

Nastavení tématu:
$ sudo sed -i "s/`grep Inherits /usr/share/icons/default/index.theme`/Inherits=`gconftool-2 --get /desktop/gnome/peripherals/mouse/cursor_theme`/" /usr/share/icons/default/index.theme

Nastavení velikosti:
sudo sed -i "s/`grep Xcursor.size ~/.Xresources`/Xcursor.size: `gconftool-2 --get /desktop/gnome/peripherals/mouse/cursor_size`/" ~/.Xresources

Takto nastavená velikost kurzoru se projeví až po restartu X serveru.
Pokud si uložíte předchozí řádky do skriptu někde na disku, můžete je pak spouštět jedním klikem, když si budete měnit téma.
A pak že to nejde, nevidím důvod, proč by to už nemohlo být v Ubuntu dávno vyřešeno tak, aby si uživatel ničeho nevšiml. Ale taky už nemám zrak takový, jako za mlada :)

Na závěr ještě varování: pokud v souboru index.theme definujete kurzor špatně, nepřihlásíte se vůbec do Gnome. Už přihlašovací obrazovka se bude chovat tak, že by vás nenapadlo, že je to kurzorem, protože šipka tu normálně funguje, jenže ani nejde napsat heslo, jako by nefungovala klávesnice a nakonec zmizí i pole pro zadávání hesla. V tomto případě je potřeba přihlásit se do konzoly (Ctrl+Alt+F1) a nejjistější je použít metodu 1b.

Poslední úprava článku 20.3.2011 14:05 spočívá v doplnění bodu 1b a varování. Zatím se loučím, případně to zase doplním... :)


Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.