Klávesa Super funguje v mnoha dnešních linuxových desktopech tak, že vyvolává hlavní nabídku prostředí. Ostatně jako ve Windows od pradávna. Nová desktopová menu umožňují okamžitě začít vyhledávat psaním a proč vůbec kvůli tomu sahat na myš, nebo trefovat nějakou multi klávesovou zkratku, když můžete uhodit jednu klávesu a rovnou začít psát, co hledáte. Protože je to ale klávesa modifikační, která se využívá v kombinaci s dalšími klávesami pro klávesové zkratky, je potřeba, aby menu vyvolal jen stisk s následným uvolněním v krátkém časovém intervalu. Umí to GNOME Shell, i prostředí na něm založená, stejně tak Unity, ale KDE nikoliv. KDE nemá žádné pevné schéma desktopu, hlavní nabídku tu může provozovat cokoliv a tato klávesa se ani sama o sobě jako klávesová zkratka použít nedá. Přitom by mohlo být zajímavé přidat do systému rovnou funkčnost - zlvolíte-li si jako klávesovou zkratku samostatnou modifikační klávesu, bude fungovat způsobem, jak bylo popsáno. Je nás každopádně mnoho, kteří by tuto Super funkčnost viděli i v KDE a tak se nakonec našel někdo, kdo to přivedl k životu.
ksuperkey
Tak se jmenuje program, který je k mání na KDE-Apps.org a který umí zprovoznit klávesu Super tak, jak jsem zmínil. Je to démon, kterého necháte spouštět při startu prostředí a který je schopen převádět stisk a uvolnění Super na libovolnou jinou klávesouvou zkratku, které rozumí X11, potažmo KDE. A můžete si dokonce definovat i libovolnou jinou klávesu, nemusí to být zrovna Super.ksuperkey je vlastně jen lehkou modifikací xcape, celé je to napsáno v c za použití pár X11 knihoven.
Kompilace
Aktuální hotové balíčky k instalaci sice nenabídnu, ale kompilace ze zdrojového kódu je opravdu triviální a podle následujícího návodu ji zvládne i opoce.Nejprve nainstalujte potřebné balíky:
sudo apt-get install gcc make libx11-dev libxtst-dev pkg-config
Ze stránky projektu si stáhněte zdrojový kód (tohle vede na nyní aktuální verzi, jinak dole klikátko "[download] Source....") a rozbalte kamkoliv na disk.
Pak, nejednodušeji přes Dolphina, vlezte do vybaleného adresáře a otevřte terminál (v Dolphinovi jen stisknete F4), ve kterém spustíte jediný příkaz:
make
Tím se v adresáři vytvoří nový binární soubor jménem ksuperkey a je hotovo. Tedy skoro, teď už stačí jen program otestovat a následně přidat mezi aplikace spouštěné po startu prostředí.
Test
Takže k tomu testování, jak se to vlastně používá. ksuperkey funguje jako démon na pozadí a chytá klávesy. Když je stisknuta klávesa, na kterou čeká, počítá nějaký čas (ve výchozím nastavení 500ms) a pokud je do této doby klávesa opět uvolněna (a žádná jiná nestisknuta ani neuvolněna), pošle X11 přednastavenou klávesovou zkratku, jako byste ji stiskli na klávesnici.Nejjednodušší variantou, která bude stačit většině uživatelů (dokud se nedozví o dalších možnostech :), je spuštění bez parametrů s výchozím chováním - stisk a uvolnění levé klávesy Super vyvolá klávesovou zkratku Alt+F1. Takže si nastavíte na widget, který takto chcete aktivovat (KickOff, Homerun, ...), tuto klávesovou zkratku a spustíte z terminálu (který stále máte otevřený v daném adresáři):
./ksuperkey
Nyní stisknete a pustíte levý Super a widget by se měl aktivovat.
Další možnosti
ksuperkey ale umí daleko více, můžete si definovat jiné klávesy, i jiné klávesové zkratky a dokonce těch kombinací můžete definovat více najednou. Můžeme zkoušet dál, ale před každým dalším spuštěním nejprve superkey ukončete pomocí:
killall ksuperkey
Takže například následující příkaz zařídí, že krom zmíněného, bude pravý Super vyvolávat KRunner na Alt+F2, klávesou Pause/Break bude možné kdykoliv umlčet, nebo naopak odmlčet zvukový výstup a navíc bude maximální doba mezi stiskem a uvolněním snížena na 200ms
./ksuperkey -t 200 -e 'Super_L=Alt_L|F1;Super_R=Alt_L|F2;Pause=XF86_AudioMute'
Názvy kláves, které můžete použít jsou v (K)Ubuntu dostupné v těchto hlavičkových souborech
/usr/include/X11/keysymdef.h
/usr/include/X11/XF86keysym.h
Pokud jste instalovali balíky, které jsem psal na začátku, máte je již v systému, jinak jsou součástí balíku x11proto-core-dev.
Důležité je ale psát názvy kláves bez písmen XK:
XK_BackSpace -> BackSpace
XF86XK_AudioMute -> XF86_AudioMute
Vlastně jsem si uvědomil, že nejjednodušší cestou, jak si ověřit jméno klávesy, je spuštění konzolového příkazu xev, například takto, aby to nekecalo zbytečně moc
xev | egrep -o '\(keysym.*\)'
a stisknout příslušnou klávesu. Terminál bude vypisovat kód a jméno klávesy při jejím stisku i uvolnění, dokud bude mít okno xev fokus.
Z předchozího tedy vyplývá, že můžete používat i jména multimediálních tlačítek, například já nemám na jedné klávesnici Mute, které se často hodí a Pause/Break je naopak nevyužitá a navíc má i celkem příhodné jméno. Tedy ne, že by zrovna toto nešlo nastavit přes normální systémové zkratky, berte to jen jako příklad.
Instalace
Pokud všechno funguje, dejte si soubor do vašeho domovského ~/bin/ adresáře (pokud nemáte, vytvořte), abyste mohli příkaz spouštět bez zadávání cesty. (K)Ubuntu totiž tento adresář při startu systému automaticky přidá do systémové proměnné $PATH. Pokud byste chtěli ksuperkey zpřístupnit všem uživatelům, můžete soubor umístit do /usr/bin/.Spouštění při startu KDE
Aby se ale příkaz spouštěl při každém startu KDE automaticky, musíte si přidat v aplikaci Autostart (jak je to přeloženo do češtiny teď přesně nevím) skript, který bude příkaz spouštět, protože Autostart vložit přímo příkaz neumožňuje. Pokud vám bude stačit výchozí chování ksuperkey, můžete jen zadat cestu k němu (podle toho, kam jste ho uložili), jinak si vytvoříte třeba soubor my_superkey, a do něj vložíte svůj výtvor. V mém případě to tedy bude:
#!/bin/sh
ksuperkey -t 200 -e 'Super_L=Alt_L|F1;Super_R=Alt_L|F2;Pause=XF86_AudioMute'
ksuperkey -t 200 -e 'Super_L=Alt_L|F1;Super_R=Alt_L|F2;Pause=XF86_AudioMute'
Skriptu samozřejmě nastavíte spustitelný příznak a cestu k němu zadáte Autostartu:
Použití v jiných prostředích
Jistě vám již došlo, že není absolutně žádný problém s použitím tohoto démůnka v jakémkoliv prostředí založeném na X11, jen si musíte dát pozor na to, abyste se nesnažili nastavovat klávesy, které jsou již v systému tímto způsobem obsazené.Aby se to spuštělo po startu, není potřeba v Unity, ani GS vyrábět skript, je možné to v Startup Applications přidat rovnou jako příkaz.
Další pěkná univerzální hračka, tak to má být.
To je náhoda, zrovna nedávno jsem v podstatě řešil totéž, jen jsem to potřeboval zabudovat do své pythoní aplikace. Je napsaná s použitím Qt a docela by se mi líbilo, kdyby Qt knihovna měla nějaký řešení pro "global hot key", což nemá. Nakonec na to budu muset jít s pomocí Xlib, ale není to až tak úplně triviální, docela se mi bude hodit prostudování zdrojáku ksuperkey ;-)
OdpovědětVymazatPotřebuješ reagovat na stisky kláves bez ohledu na to, co má zrovna fokus? Na nějaké případné Pythonní řešení rád podívám..
VymazatChci, jak jsem napsal, pro svou aplikaci nadefinovat globální klávesovou kombinaci - jde o to, že se běžící aplikace (která samozřejmě nemá focus) má aktivovat stiskem "Win". Tou aplikací je "autohide" panel částečně skrytej na kraji desktopu a aktivuje se najetím myši. Aktivace klávesovou zkratkou má jen být takovou třešničkou na dortu...
VymazatOno by třeba stačilo vyjít z tohoto příkladu a stejně jako v případě ksuperkey rozlišit, jestli jde o stisk jen jedné konkrétní klávesy. Asi se vydám tímto směrem.
VymazatDíky za odkaz, až se mi mozek zase vrátí do trochu funkčního stavu, tak to omrknu :) Koneckonců bych pro to měl využití taky.
Vymazat