neděle 3. června 2012

Restart zhrouceného Unity co nejjednodušeji

Když si člověk nastavuje Compiz/Unity pomocí CCSM, skoro každé zapnutí, či vypnutí nějakého pluginu, nebo jen změna jejich nastavení, znamená pád Compizu, tedy Unity. To se má samo restartovat, ale často se mu to z nějakého důvodu nepovede. Pokud si s nastavením hrajete víc, protože hledáte nejlepší konfiguraci, je to celkem nepříjemné a tak jsem hledal, jak nejjednodušeji a nejrychleji restart provést...

První, co mě napadlo, bylo vytvořit klávesovou zkratku založenou na xbindkeys. Klasickou zkratku v systému si nastavit nemůžete, protože ty obsluhuje Compiz a jeho smrt tu právě řeším. Říkal jsem si: xbindkeys je nezávislý démon, ten mi to zařídí. Ale ouha, ani xbindkeys v tomto případě klávesy nezachytí a taková klávesová zkratka funguje jen tehdy, když to nepotřebujete. Tak tedy jinak..


Předesílám, že klíčová je proměnná prostředí $DISPLAY, která je na lokálním systému běžně nastavena na hodnotu :0. Je potřeba si tedy předem zjistit, jak má tuto proměnnou nastaveno sezení X serveru, na kterém Unity běží, třeba příkazem:

echo $DISPLAY

Script

První možností je vytvořit si skript v adresáři ~/bin, který se při startu systému automaticky přidá do proměnné $PATH a skripty zde uložené nemusíte spouštět se zadáním celé cesty. Můžete si tedy vytvořit třeba skript ru (jako restart unity)

Nejprve si vytvoříte adresář, pokud již nemáte a pak založíte soubor v editoru:
mkdir ~/bin
gedit ~/bin/ru

do něj vložíte následující (s vaší hodnotou $DISPLAY):
#!/bin/sh
DISPLAY=:0 unity --replace &

Uložíte, nastavíte souboru spustitelný příznak v Nautilu, nebo z terminálu:

chmod +x ~/bin/ru

A pokaždé, když se Unity sekne, stisknete klávesovou zkratku Ctrl+Alt+F1, přihlásíte se do konzole, pokud již přihlášeni nejste, spustíte příkaz:

ru

a pomocí Alt+F7 se vrátíte do systému.

Alias

Další, ekvivalentní možností je vytvoření aliasu, jehož definici přidáte na konec souboru ~/.bashrc. Definice vypadá takto:

alias ru='DISPLAY=:0 unity --replace &'

Použití je pak úplně stejné jako v předešlém případě.

LIRC

Pokud náhodou používáte dálkový ovladač založený na LIRC, je nejpohodlnější cestou věnovat jedno tlačítko na ovladači tomuto účelu. Já mám na mém ovladači nadefinováno spouštění XBMC, přepínání monitorů a teď i restart Unity. Jen jsem přidal do svého konfiguračního souboru ~/.lirc/system následující:

begin
   prog = irexec
   button = F_TELETEXT
   config = /bin/sh -c "unity --replace"
   repeat = 0
end

F_TELETEXT je jméno tlačítka, kterému jsem to přiřadil, jeho přesné jméno jsem si předem zjistil spuštěním příkazu irw který mi po stisku onoho tlačítka název prozradil. Samozřejmě můj ~/.lircrc musí obsahovat řádek:

include ~/.lirc/system

Výhoda je v tom, že tento způsob nevyžaduje přepínání do konzole, jen stisknete tlačítko a Unity se restartuje.

Více o LIRC:
http://www.root.cz/clanky/lirc-dalkove-ovladani-pro-vas-linux/
http://www.lirc.org/

Reset Unity

Pokud už něco poděláte tak, že vám Unity nenastartuje vůbec, pak zbývá příkaz:

unity --reset

který obnoví výchozí nastavení

Update
Ubuntu 12.10 a novější již nepotřebují přepínač --replace, samotný příkaz unity se chová tímto způsobem. Další změnou je zrušení přepínače --reset.


Žá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.