Pohyb po virtuálních plochách v Gnome Shell pomocí tlačítek myši

Gnome Shell přišel s trochu jinou implementací virutálních ploch, než je u většina desktopových prostředí běžné. Virtuální plochy jsou "dynamické" a vytvářejí se podle potřeby. Poměrně tady dává smysl nějaké rychlé přecházení na předchozí a další plochu - tedy věc, na kterou jsem doteď nebyl zvyklý, protože jsem měl zatím všude fixní počet ploch a klávesové zkratky na každou plochu.

V základním nastavení jsou dvě možnosti, jak plochu změnit. Buď klávesovou zkratkou nebo myší v okně aktivit. Klávesová zkratka je fajn, nicméně pokud má člověk v ruce jenom myš (což u takto klikacího prostředí je poměrně běžné), šahat na klávesnici není zrovna komfortní (navíc s výchozí zkratkou ctrl+alt+šipky to ani jednou rukou nejde). Přepínání v okně aktivit je zase poměrně dost zdlouhavé. Moje myš Logitech MX Revolution má na sobě tlačítek celou zásobu. Dlouhou dobu jsem tápal, co udělat s tím druhým kolečkem po levé straně a zrovna tohle vypadá jako dobré využití.

První nápad byl nasimulovat stisknutí oné kombinace ctrl+alt+šipka. Ostatně dlouho jsem již podobnou věc s myší používal - pomocí xbindkeys jsem volal program xvkbd s vhodnými parametry, které nasimulovali stisk kláves ctrl+page down/up. Díky tomu funguje např. přímo v prohlížeči jednoduché přepínání tabů přímo tlačítkem na myši. Nicméně, na tenhle případ to až tak úplně nefunguje. Xvkbd sice ctrl+alt+šipka poslat umí, ale posílá ho do aktivního (nebo nastaveného) okna. Gnome Shell tedy o tom nic neví a klávesová kombinace skončí v aplikaci, která neví, co s ní má dělat (nebo udělá něco úplně jiného).

Řešením se nakonec stalo použití nástroje xdotool v kombinaci s výše zmíněným xbindkeys. Xdotool kromě posílání kláves umí i nastavit aktivní virtuální plochu (a v Gnome to funguje). Tedy příkaz xdotool set_desktop 2 přepne na třetí plochu (počítá se od nuly). Xdotool umí i parametr --relative, který by měl posouvat plochu relativně vůči aktuální. Bohužel je ve verzi, kterou mám nainstalovanou, nějaká chyba a při použití relative nelze zadat jako číslo -1 - jsem tedy schopen posouvat se jen na další plochy. Nicméně je to řešitelné - xdotool umí i get_desktop, který vrátí číslo aktuální plochy a relativní logika se tak dá pořešit přímo ve scriptu. Výsledná konfigurace xbindkeys (~/.xbindkeysrc) vypadá takto:

  1. # Prev desktop
  2. "xdotool set_desktop $((`xdotool get_desktop` -1))"
  3. m:0x0 + b:11
  4.  
  5. # Next desktop
  6. "xdotool set_desktop $((`xdotool get_desktop` +1))"
  7. m:0x0 + b:14

čísla za položkou b: značí číslo tlačítka myši. To se může podle použité myši a dalšího nastavení lišit. Konkrétní správné tlačítko lze zjistit nástrojem xev puštěném v terminálu. Do okna, které se zobrazí, pak stačí najet myší, zmáčknout inkriminované tlačítko a dívat se, co se v terminálu objeví za nápisem button. Aby to vše fungovalo, musí ještě běžet xbindkeys. Nejlepším řešením je přímo v nastavení gnome jej spouštět při startu prostředí - příkaz xbindkeys -f ~/.xbindkeysrc.