Jak ovládat desktop pouze klávesnicí

Chtěl jsem ovládat linuxový desktop pouze klávesnicí, abych pořád nemusel přehmatávat mezi klávesnicí a myší a tím být efektivnější. Prostě mám ideu spustit počítač, používat různé programy, otevírat je, zavírat, minimalizovat, surfovat na netu a přitom ani jednou nesáhnout na myš. Teda až na výjimky - těžko budu ovládat např. Gimp jen klávesnicí, ale u většiny software to tak jde.
Skoro se mi ta idea podařila, a popíšu tedy jak:

Používám Gnome, normálně styl Metacity, takže něco se může v KDE nebo třeba i v Berylu lišit.

Takže moje doporučení a jak jsem postupoval:

  1. Vlastní rozložení klávesnice - pokud někdy (nebo pořád) přepínáte např. českou a anglickou klávesnici, zbavte se tohohle šíleného zvyku. Když si nikdy nemůžu být jistý, jestli se zmáčknutím čísla ‘4’ neobjeví písmeno ‘č’ a naopak, nemůže být práce s klávesnicí radost. Je přece možné si vytvořit vlastní rozložení, na kterém bude vše co potřebujete. Můžete postupovat třeba podle tohoto návodu a budete mít na klávesnici přesně to co potřebujete. Chvíli si to chce zvykat, ale pak je to paráda. Doporučuji v každém případě. Já mám například rozložení - viz příloha (některé klávesy jsou nepoužity, tj. “zdědilo” se do nich něco standardního).

  2. Klávesové zkratky na nejčastější programy - problém je kde ty zkratky zadat. V Gnome lze nastavit jen na několik málo aplikací, zbytek můžete udělat třeba pomocí programu xbindkeys. Stáhnete z repozitáře, spustíte to, vypíše se jak si nechat vytvořit příklad konfiguračního souboru do ~/.xbindkeysrc. Ten pak upravíte podle potřeby.

  3. Zkratky na ovládání okenního prostředí - tedy např. minimalizaci (velice užitečné), maximalizaci/obnovení, přepínání ploch a pak třeba i přesun okna nebo změna velikosti okna. Sem bych zařadil i schování okna do oznamovací oblasti (tray) - pomocí prográmku v bodu 2 a jako příkaz napsat “kdocker -f” (kdocker nutno stáhnout).
    Když surfujete na internetu, můžete interaktivně hledat tak, že napíšete lomítko a pak rovnou text. Málokdo to zná, ale je to velice šikovné (funguje v Opeře/FF/Konqueroru). Každý prohlížeč má ještě různé zkratky na procházení odkazů atd. Vyplatí se prostudovat.

  4. Snazší přepínání jednotlivých programů - předchozí body šly provést víceméně jen pomocí systémových prostředků bez programování, ale s přepínáním jsem si trochu vyhrál. Chtěl jsem, abych mohl zmáčknout Alt+číslo a přepnulo mě to na n-tý program na liště. A Alt+Shift+číslo to samé, ale odzadu. A ještě Win+vpravo nebo Win+vlevo aby mě přepnulo na “vedlejší” program.

A na to jsem udělal tento skript (vyžaduje balíčky “wmctrl” a “xprop”):


#! /bin/sh
#
# Snadny prepinac oken. Vyzaduje balicky "wmctrl" a "xprop"
#
# Autor Ales Janda, www.kyblsoft.cz (2007)
# Pouzivejte, upravujte, sirte dle libosti
#
# Pouziti: prepni_na_okno.sh <pozice> ["odzadu"]        - prepne na okno zadanou pozici na hlavnim panelu (liste)
#          prepni_na_okno.sh <"vlevo"|"vpravo">         - prepne na okno navlevo/napravo od aktualniho
#          prepni_na_okno.sh <"spust-jednou"> <program> <nazev_v_titulku>  - spusti 'program', pokud neexistuje 'nazev_v_titulku' (nebo jeho cast)

zjisti_pozici_aktualniho_okna() {
  aktualni_id=`xprop -root | grep '_NET_ACTIVE_WINDOW(WINDOW)' | awk '{ print $5 }'`
  delka_id=`echo $aktualni_id | wc -c`
  delka_id=`expr $delka_id - 2`     #odstranim carku a mezeru
  aktualni_id=`echo "$aktualni_id" | head -c $delka_id`
  delka_id=`expr $delka_id - 1`     #odstranim 0x na zacatku
  aktualni_id=`echo "$aktualni_id" | tail -c $delka_id`
  pozice_okna=`wmctrl -l | grep '  0 ' | awk --re-interval "{ if (\\\$1 ~ /^0x0{0,8}$aktualni_id\\\$/) exit; } END { print NR }"`
  return $pozice_okna
}

prepni_na_okno_cislo() {        # $1 - cislo okna (1..n)
  wmctrl -i -a `wmctrl -l | grep '  0 ' | head -n $1 | tail -n 1 | head -c 10`
}


if [ $1 == 'vlevo' ]; then        #prepne na okno vlevo od aktualniho
  zjisti_pozici_aktualniho_okna
  prepni_na_okno_cislo `expr $pozice_okna - 1`
elif [ $1 == 'vpravo' ]; then        #prepne na okno vlevo od aktualniho
  zjisti_pozici_aktualniho_okna
  prepni_na_okno_cislo `expr $pozice_okna + 1`
elif [ $1 == 'spust-jednou' ]; then        #spusti program nebo do nej prepne
  if [ `wmctrl -l | grep '  0 ' | grep "$3" | wc -l` != 0 ]; then
    pozice_okna=`wmctrl -l | grep '  0 ' | awk --re-interval "{ if (\\\$0 ~ /$3/) exit; } END { print NR }"`
    prepni_na_okno_cislo $pozice_okna
  else
    $2
  fi
else
  if [ $2 == 'odzadu' ]; then       #pozice odzadu (1 - n)
    pocet_oken=`wmctrl -l | grep '  0 ' | wc -l`
    prepni_na_okno_cislo `expr $pocet_oken + 1 - $1`
  else       #pozice zepredu (1 - n)
    prepni_na_okno_cislo $1
  fi
fi

Co to dělá? Při zavolání s parametrem např.

prepni_na_okno.sh 2

to přepne na druhý program na liště. Při parametrech

prepni_na_okno.sh 4 odzadu

přepne to na 4. program na liště zprava. Pokud to zavolám s parametrem

prepni_na_okno.sh vlevo

přepne se na okno, které je o 1 pozici nalevo od současného. Podobně také “prepni_na_okno.sh vpravo”.

A pak to má ještě jednu funkci - “spust-jednou”. Často třeba chci spustit hudební přehrávač nebo vývojové prostředí (klávesovou zkratkou :wink: ), ale jen v případě, že ještě není spuštěný - v takovém případě do něj chci přepnout. Takže při parametrech

prepni_na_okno.sh spust-jednou eclipse Eclipse

se zkusí najít okno s “Eclipse” v titulku, a pokud neexistuje, spustí program “eclipse”.
Název musí být použitelný jako text i jako regulární výraz - tohle jsem moc nedořešil, zadávejte do něj tedy jen “běžné” znaky.

Snad tohle někomu pomůže nebo se inspiruje :wink:

Co mi ještě chybí - kdyby někdo věděl, napište:

  • při více programech (více jak pěti) rovnou nevidím, kolikátá pozice na liště to je. Nemáte někdo nápad, jak před to dát na lištu ta čísla nebo prostě nějak očíslovaně zobrazit seznam aplikací? Nebo nějaký jiný nápad…
  • vůbec neumím ovládat programy schované v oznamovací oblasti - přepnout na ně, a ani je vypsat. Wmctrl je úplně ignoruje. Pořád na ně musím “kliknout”, jiné řešení neznám. Kdyby někdo věděl, jak na tohle, budu rád.

Kybl, Ty se doma asi opravdu nudis? :slight_smile:

macky

Nenudím, ale je fakt, že když mě něco chytne… :wink:

Obětoval jsem hodiny času tomu, abych mohl spouštět aplikace o 1 vteřinu rychleji :slight_smile: Ba ne, ale konkrétně vlastní rozložení a klávesová zkratka na minimalizaci okna (mám Alt_R+F9) mi přijde jako opravdu velkým přínos - to je prostě paráda, bez toho bych se neobešel.

Ostatní využívám už méně.