Journal Découverte d'awesome

Posté par . Licence CC by-sa
Tags :
33
19
sept.
2012

Premiers pas avec awesome

Avec un nom pareil, ça ne pouvait qu'être bien, récit :

Contexte

Un eeepc sur lequel est installé ubuntu 11.04, un pc surtout utilisé pour surfer.
La version d'awesome utilisée est la 3.4.

awesome

awesome est un gestionnaire de fenêtre léger et entièrement pilotable au clavier.
C'est ce pilotage qui m'a amené à l'essayer.
Il est facilement modifiable à l'aide de scripts lua et a une approche originale des bureau virtuels : tout passe par le concept d'étiquettes (tags). Vu que j'en suis encore au début, je ne creuserai pas pour l'instant.

Installation

Pas de problème, il suffit de passer par le gestionnaire de paquets.
Pour la lancer, ça se passe au démarrage, dans la fenêtre de login.

Guide minimal de survie

Première impression : j'aurai du lire un peu plus la doc, car je suis largué. Avec un clic droit bien placé, je lance firefox, mais plus moyen de faire autre chose sans quitter mon navigateur préféré.

Un petit rappel des commandes utiles : (Mod = touche windows)

  • Mod + espace : changer de mode d'organisation des fenêtres : plein écran, plein écran sans barre de menu, flottant… il y a beaucoup de modes

  • Mod + 1-9 : passer sur étiquette suivante[1]

  • Mod + shift + 1-9 : envoyer la fenêtre sur une autre étiquette

  • Mod + ctrl + shift + 1-9 : ajouter l'étiquette à la fenêtre

  • Mod + j/k : passer à la fenêtre précédente/suivante

  • Mod + entré : ouvre un nouveau terminal

  • Mod + r : permet de lancer une commande

  • Mod + shift + q : quitter awesome (ferme la session graphique)

[1] : le concept d'étiquette est proche de celui de bureau, une fenêtre pouvant avoir plusieurs étiquettes à la fois.

Personnalisation

Pour personnaliser awesome, il faut commencer par dupliquer le fichier de configuration :

mkdir ~/.config/awesome/
cp /etc/xdg/awesom/rc.lua ~/.config/awesome/

Personnalisation : modes

Il y a trop de modes pour mon utilisation personnelle, j'en ai donc supprimé certains :

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
    -- par defaut, on est a une fenetre maximisée, mais on laisse la barre de menu visible
    awful.layout.suit.max,
    -- fenetre cote a cote
    awful.layout.suit.tile,
    -- fenetre dessus / dessous
    awful.layout.suit.tile.bottom,
    --plein écran
    awful.layout.suit.max.fullscreen
}

Personnalisation : utilisation de la batterie

Comme je suis sur un portable, j'ai besoin de suivre la charge de la batterie.
Il existe des paquets tout fait, mais ce n'est pas la solution que j'ai retenu.

J'ai donc fait un script minimal qui renvoie la charge de la batterie :

BATT=BAT0

REM=`cat /proc/acpi/battery/$BATT/state | grep "remaining capacity:" | awk '{ print $3 }'`

TOT=`cat /proc/acpi/battery/$BATT/info  | grep "design capacity:" | awk '{ print $3 }'`

expr 100 \* $REM / $TOT

On va configurer awesome pour qu'il appelle ce script à intervalle régulier et qu'il affiche
le résultat :

-- {{{ Wibox
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })

-- battery state
mybatterystate = widget({ type = "textbox" })
mybatterystate.text = "---"

mytimer = timer({ timeout = 60 })
mytimer:add_signal("timeout", function() 

    local f = io.popen("battery.sh")
    local s = f:read("*a")
    f:close()
    mybatterystate.text = s
end)


mytimer:start()

Conclusion

Énormément de potentiel quand on préfère le clavier à la souris. En ce qui me concerne, je pense que je ne changerai plus de gestionnaire avant un moment.
Cela dit, je ne le conseille pas à tout le monde (dès qu'on veut personnaliser un peu) : il faut bien sur ne pas être réfractaires à lua, mais il m'est aussi arriver de devoir passer en mode non graphique pour réparer un fichier rc invalide.

  • # Petite correction du script

    Posté par . Évalué à  2 . Dernière modification : le 19/09/12 à 10:17

    Autant faire simple :

    BATT=BAT0
    
    REM=$(awk '/remaining capacity:/{ print $3 }' "/proc/acpi/battery/$BATT/state")
    
    TOT=$(awk '/design capacity:/{ print $3 }' "/proc/acpi/battery/$BATT/info")
    
    expr 100 \* $REM / $TOT
    
    

    Mais pour des choses aussi simple peut être que le faire directement en lua serait plus pratique :)

    Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

    • [^] # Re: Petite correction du script

      Posté par . Évalué à  8 .

      Autant faire plus simple :

      BATT=BAT0
      
      awk '/remaining capacity:/ { rem = $3 }
           /design capacity:/ { tot = $3 }
           END { print 100 * rem / tot }' /proc/acpi/battery/$BATT/{state,info}
      
      
  • # Rechargement à chaud avec XMonad

    Posté par (page perso) . Évalué à  2 .

    Dans la même veine qu'Awesome, il y a XMonad, un autre tiling window manager. La différence entre les deux est que XMonad est écrit en Haskell et que la configuration se fait en Haskell ; c'est en fait une surcharge des paramètres ou du comportement par défaut de XMonad et qui est compilé puis chargé au démarrage du gestionnaire de fenêtre. Aussi, face à une erreur dans la configuration, XMonad s'exécute avec la configuration précédente (s'il n'y en avait pas, celle par défaut). De même, on peut charger à chaud la configuration que l'on a modifié sans avoir à quitter son environnement (en fait, c'est un redémarrage transparent de XMonad).

    Par contre, il n'y pas le support des tags que l'on a dans Awesome et que j'aime bien.

    • [^] # Re: Rechargement à chaud avec XMonad

      Posté par . Évalué à  1 .

      <reponse mode="moi d'abord">
      awesome fait aussi du redémarrage à chaud
      </reponse>

      • [^] # Re: Rechargement à chaud avec XMonad

        Posté par . Évalué à  2 .

        C'est quoi un redémarrage à chaud ?

        Dans les faits il faut rebooter awesome pour prendre en compte les nouvelles configurations.

        Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

        • [^] # Re: Rechargement à chaud avec XMonad

          Posté par . Évalué à  1 .

          en gros oui…
          un coup de awesome.restart() en lua et hop: tu ne perds pas tes clients et ils sont repositionnés selon ta nouvelle configuration.
          D'un autre coté, je ne pense pas que ce soit une fonctionnalité exceptionnelle: j'ai souvenir d'avoir killer twm tout en conservant la main sur un xterm pour pouvoir relancer un autre WM juste après.

          Pour moi, l'intérêt d'awesome réside plus dans sa très grande flexibilité de configuration.

          • [^] # Re: Rechargement à chaud avec XMonad

            Posté par (page perso) . Évalué à  2 .

            tu ne perds pas tes clients et ils sont repositionnés selon ta nouvelle configuration.

            Depuis quand tuer un WM cause une perte de clients X11 ?

            • [^] # Re: Rechargement à chaud avec XMonad

              Posté par . Évalué à  1 .

              A l'époque où j'utilisais awesome, certaines versions avaient un bug qui faisait que les clients X11 tournaient toujours, mais le WM n'en avait plus connaissance et il était donc impossible d'y accéder. Heureusement le problème avait disparu après quelques versions.

        • [^] # Re: Rechargement à chaud avec XMonad

          Posté par (page perso) . Évalué à  3 .

          Ctrl+Mod+r dans la conf par défaut.

    • [^] # Re: Rechargement à chaud avec XMonad

      Posté par . Évalué à  2 .

      La différence entre les deux est que XMonad est écrit en Haskell et que la configuration se fait en Haskell ; c'est en fait une surcharge des paramètres ou du comportement par défaut de XMonad et qui est compilé puis chargé au démarrage du gestionnaire de fenêtre. Aussi, face à une erreur dans la configuration, XMonad s'exécute avec la configuration précédente (s'il n'y en avait pas, celle par défaut).

      Si j'ai bien compris avec xmonad, tu compile ta propre version configuré alors qu'avec awesome tu as un fichier exterieur au programme principal qui exécute ta configuration.

      Ça fait longtemps que je souhaite passer de awesome à xmonad (la principal raison est de pouvoir gérer des onglets) mais j'ai vraiment du mal avec haskell.

      Par contre, il n'y pas le support des tags que l'on a dans Awesome et que j'aime bien.

      C'est à dire ?

      Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

      • [^] # Re: Rechargement à chaud avec XMonad

        Posté par (page perso) . Évalué à  3 .

        Il y a une introduction a haskell traduite en français qui est plutôt sympathique, il y a des images et tout, même si souvent je ne vois pas trop ce qu'elles apportent :)

        Par contre, si c'est juste pour apprendre à configurer xmonad rapidement, c'est peut être pas l'idéal.

      • [^] # Re: Rechargement à chaud avec XMonad

        Posté par (page perso) . Évalué à  1 .

        Sinon comme WM de la famille des tiling, et qui sait faire des onglets, y’a i3, que j’utilise.

        • [^] # Re: Rechargement à chaud avec XMonad

          Posté par . Évalué à  2 .

          Ce qui me gène dans i3 c'est les deux barres (celle pour les tags et celle pour le reste).

          Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

        • [^] # Re: Rechargement à chaud avec XMonad

          Posté par . Évalué à  1 .

          Petite question sur i3. dejà posé, mais pas eu de réponse.
          C'est possible d'avoir un mode plein écran, similaire à celui de xmonad ?

          Par exemple, i3 mettra firefox en plein écran, comme un F11.
          Moi, je recherche la même chose que sous xmonad, qui s'applique au layout, laisse la barre (i3bar ou autre), etc ..
          Un peu comme le layout " tabbed " d'i3, mais sans la barre de stack.

          Si je reprends l'exemple de firefox, dans xmonad, en fullscreen, la souris, si je la colle au haut de l'écran, permettra de changer d'onglet. La première ligne de pixel de l'écran est déjà sur firefox (avec xmobarr en bas)

          merci !

          • [^] # Re: Rechargement à chaud avec XMonad

            Posté par . Évalué à  2 .

            Tu as une capture ?

            Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

            • [^] # Re: Rechargement à chaud avec XMonad

              Posté par . Évalué à  1 .

              capture

              Bon, elle est pas top, parce qu'il n'y a pas le pointeur de la souris…
              Mais imagine qu'il est sur le pixel le plus haut de mon écran.
              On le devine grâce à l'info bulle sur le 3ième onglet.

              Quand je change d'onglet, je peux donc appuyer ma souris sur la première ligne de pixel, c'est très confortable.
              Bon, évidement, je peux aussi changer d'onglet en ctrl+pageUpDown, mais si j'ai la souris dans la main, c'est bien aussi.

              Ce n'est donc pas un mode plein écran de firefox, mais bien un mode plein écran du layout.

              • [^] # Re: Rechargement à chaud avec XMonad

                Posté par . Évalué à  2 .

                Ce n'est donc pas un mode plein écran de firefox, mais bien un mode plein écran du layout.

                J'ai plus l'impression que c'est un mode sans décoration (ce que fait awesome par défaut). Parce que le fullscreen pour moi il vire aussi là barre en bas.

                Voici pour moi le mode que tu cherche : http://img15.hostingpics.net/pics/966334811.png
                et le mode fullscreen : http://img15.hostingpics.net/pics/982364642.png

                La subtilité se trouve en haut (bon je garde 1px de bordure autour de mes clients pour distinguer les terminaux entre eux, mais c'est configurable dans awesome).

                Bon après je ne peux pas te dire si c'est possible dans i3 (je ne crois pas que c'était possible dans wmii, mais je peux me tromper). Mais peut être qu'en cherchant sur les décorations de fenêtres tu trouvera ton bonheur.

                Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

                • [^] # Re: Rechargement à chaud avec XMonad

                  Posté par . Évalué à  1 .

                  Pas de soucis pour awesome, c’était i3 qui me posait problème.
                  Je n'ai pas trouvé dans la doc.
                  Et je suis retourner paisiblement sous xmonad :)

                  Mais si quelqu'un connaît la solution pour i3, je re-tenterais bien !

                  • [^] # Re: Rechargement à chaud avec XMonad

                    Posté par . Évalué à  3 .

                    Pour tester le comportement, dans ta console :

                    i3-msg [Class="Firefox"] border none
                    
                    

                    Si cela convient, dans .i3/config, tu ajoutes à la fin:

                    for_window [Class="Firefox"] border 1pixel
                    
                    

                    ou

                    for_window [Class="Firefox"] border none
                    
                    
      • [^] # Re: Rechargement à chaud avec XMonad

        Posté par (page perso) . Évalué à  1 .

        Si j'ai bien compris avec xmonad, tu compile ta propre version configuré alors qu'avec awesome tu as un fichier exterieur au programme principal qui exécute ta configuration.

        En fait,ton fichier de configuration est le programme principal qui est compilé puis lancé par XMonad. Il comporte donc l'instruction principale main :

        main = xmonad defaults
        
        

        Où xmonad est la fonction qui lance le gestionnaire de fenêtre avec les paramètres par défaut defaults ici.
        Par exemple, sur le PC du boulot où j'utilise XMonad avec KDE4 :

        defaults = kde4Config {
          -- simple stuff
            terminal           = myTerminal,
            focusFollowsMouse  = myFocusFollowsMouse,
            borderWidth        = myBorderWidth,
            modMask            = myModMask,
            workspaces         = myWorkspaces,
            normalBorderColor  = myNormalBorderColor,
            focusedBorderColor = myFocusedBorderColor,
        
          -- key bindings
            keys               = myKeys,
            mouseBindings      = myMouseBindings,
        
          -- hooks, layouts
            layoutHook         = myLayout,
            manageHook         = myManageHook,
            logHook            = (myLogHook >> setWMName "LG3D"),
            startupHook        = myStartupHook
        }
        
        

        où kde4Config est fourni par l'API de contribution de XMonad et les myquelquechose sont des paramètres de config qui me sont propre. Par exemple :

        myTerminal = "urxvt -pe tabbed"
        
        

        C'est à dire ?

        Sous XMonad, tu as un support par défaut des workspaces virtuels et à côté, en contribution, un support de tags des fenêtres mais que je ne trouve pas très utilisable. En tout cas pas comme dans Awesome. Ce dernier, du moins dans la version que j'avais utilisé à l'époque, tu n'as pas de worspaces virtuels mais des regroupements de fenêtres sous des étiquettes (tag) et que tu peux afficher ou non sous l'action de raccourcis clavier.

  • # Ça a l'air bien, mais...

    Posté par . Évalué à  1 .

    Sans pavé numérique, les raccourcis clavier par défaut me paraissent assez indigestes.
    Par exemple :
    Mod + ctrl + shift + 1-9
    deviendrait
    Mod + ctrl + shift + fn + 1-9

    C'est dommage d'utiliser la touche shift dans les raccourcis sachant qu'elle est (presque) indispensable pour taper des chiffres

    • [^] # Re: Ça a l'air bien, mais...

      Posté par . Évalué à  3 .

      En fait quand on dit mod + 1 dans awesome ça correspond à mod + &, pas besoin de shift. awesome raisonne en keycode plutôt que caractère d'ailleurs, ce qui lui permet de ne pas avoir de problèmes avec l'internationalisation des claviers (contrairement à kde…).

    • [^] # Re: Ça a l'air bien, mais...

      Posté par . Évalué à  4 .

      Voici le code qui s'occupe de ça c'est moi (je en l'ai pas modifié) :

      -- Bind all key numbers to tags.
      -- Be careful: we use keycodes to make it works on any keyboard layout.
      -- This should map on the top row of your keyboard, usually 1 to 9.
      for i = 1, keynumber do
          globalkeys = awful.util.table.join(globalkeys,
          awful.key({ modkey }, "#" .. i + 9,
          function ()
              local screen = mouse.screen
              if tags[screen][i] then
                  awful.tag.viewonly(tags[screen][i])
              end
          end),
          awful.key({ modkey, "Control" }, "#" .. i + 9,
          function ()
              local screen = mouse.screen
              if tags[screen][i] then
                  awful.tag.viewtoggle(tags[screen][i])
              end
          end),
          awful.key({ modkey, "Shift" }, "#" .. i + 9,
          function ()
              if client.focus and tags[client.focus.screen][i] then
                  awful.client.movetotag(tags[client.focus.screen][i])
              end
          end),
      
      

      Et j'utilise uniquement les touches au dessus des lettres pour les utiliser (mod + 1/& : aller au tag 1, etc).

      Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

    • [^] # Re: Ça a l'air bien, mais...

      Posté par (page perso) . Évalué à  3 .

      Pas besoin de la touche shift, mais j'avoue préférer Mod + Flèches pour changer de bureau la plupart du temps car c'est pas très pratique de faire Mod + 5 par exemple.

      Il faudrait que je les passe sur le pavé numérique vu que j'en ai un sur mon laptop.

      • [^] # Re: Ça a l'air bien, mais...

        Posté par . Évalué à  2 .

        Tu peut aussi partir de 0 et revenir vers 1, comme ça les mains restent écartées (personnellement 6 tags, ça me suffit amplement, donc de 5 à 0).

        Je suis dans ma tour d'ivoire (rien à foutre des autres, dites moi un truc pour moi), si je ne pose pas explicitement une question pour les 99%, les kévin, les Mm Michu alors c'est que je ne parle pas d'eux.

        • [^] # Re: Ça a l'air bien, mais...

          Posté par (page perso) . Évalué à  2 .

          J'ai surtout, suite à mon post, pris le temps de coder les raccourcis avec le pavé numérique et c'est pas mal du tout :).

          (Vu à quel point mon code est moche, ne sachant pas coder en Lua, je pense pas que ça soit utile de partager ça ici)

  • # Pas mon gestionnaire de fenêtre préféré

    Posté par (page perso) . Évalué à  2 .

    … mais sans doute l'un des plus impressionnant.

    J'ai un peu de mal avec ce côté trop automatique, je crois que je préfère les tiling manuel comme subtle.

    Par contre, il gère très bien les configurations multi-écrans.

    La réalité, c'est ce qui continue d'exister quand on cesse d'y croire - Philip K. Dick

  • # la config change trop souvent

    Posté par . Évalué à  1 .

    J'avais pas mal investi dans awesome un moment donné avec mon eeepc. J'étais super content de ma configuration au petits oignons jusqu'à ce que j'upgrade la version.
    Et là pouf ! La config avait changé du tout au tout, j'ai dut tout me retaper. La deuxième fois que ça m'est arrivé j'ai laissé tomber et je suis revenu sur KDE.

    Dommage pour moi peut être.

    Est-ce que des personnes ici on testé CLFSWM. Ca a l'air simple et bien

    • [^] # Re: la config change trop souvent

      Posté par . Évalué à  1 .

      awesome a un peu la réputation de casser les config régulièrement.
      tente xmonad, pas eu de soucis pour l'instant.
      Je ne peux pas dire pour les autres.

      • [^] # Re: la config change trop souvent

        Posté par (page perso) . Évalué à  4 .

        awesome a un peu la réputation de casser les config régulièrement.

        Cette réputation a été vraie. Le passage de 2 à 3 puis les débuts de la version 3 ont été bouleversantes. Cela dit, depuis 3 ans (depuis le 11 décembre 2009 d'après subversion), je n'ai fait que des changements cosmétiques à ma configuration qui contient quand même des modifs de raccourcis, des widgets (progressbar) de volume et de batterie et quelques autres petites joyeusetés. On peut dire que c'est stabilisé.

        Est-ce qu'une configuration non triviale d'xmonad de 2009 marche sur les xmonad récents ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.