Tiling wm pour les débutants

Faisant suite à ce topic :http://forum.debian-fr.org/viewtopic.php?f=8&t=20904&hilit=xmonad,
une courte description de l’utilisation d’un tiling wm en mode grand débutant,
à savoir intégré dans un environnement de bureau
en remplacement du gestionnaire de fenêtre de ce dernier,

Pour ceux qui n’ont jamais entendu parler de tiling wm, ce sont des gestionnaires de fenêtre qui utilisent en permanence tout l’espace disponible sur l’écran en réarrangeant dynamiquement la disposition quand de nouvelles fenêtres apparaîssent ou disparaîssent.
l’utilisateur peut aussi changer lui-même la disposition et en trois frappes de clavier
réarranger tout son/ses écran(s) à sa convenance.

j’ai choisi xmonad intégré dans l’environnment de bureau installé par défaut par Debian : Gnome.
Mais sachez que c’est tout aussi possible de le faire dans KDE et Xfce.

Ces deux liens sont en anglais mais contiennent de précieuses informations :
http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_KDE
http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_XFCE

Pour pouvoir être pleinement et simplement intégré dans un environnement de bureau,
Xmonad à besoin de ses bibliothèques d’extensions et de leur compilateur,
ceci prend de la place sur le disque mais n’alourdi pas le système.

Je vous propose d’installer par les sources, j’utilise celle de chez Sid mais ça devrait
se passer pareil avec celle de chez Lenny.
En root :

# aptitude install dpkg-dev(décompresse les sources après qu’ apt-get source les a ramenées)

# aptitude install ghc6(le compilateur, c’est le gros morceau)
Quelques bibliothèques :

[code]# aptitude install libghc6-mtl-dev

aptitude install libghc6-utf-8-string-dev

aptitude install libghc6-x11-dev

aptitude install libghc6-x11-xft-dev[/code]

[code]# aptitude install dwm-tools

aptitude install xdotool[/code](des petits utilitaires qui nous serviront plus tard)

Retour en simple utilisateur, puis :

$ mkdir sources && cd sources $ apt-get source xmonad $ apt-get source xmonad-contrib
Vous obtiennez un répertoire
xmonad-n°_de_version et xmonad-contrib-n°_de_version qui constituent les sources décompressées, ce sont eux qui nous intéressent.

L’étape suivante est facultative, elle est même inutile si vous n’avez pas réglé vos panels
pour qu’ils se cachent automatiquement lorsqu’ils ne sont pas utilisés.
Dans ce cas passez directement à Compilation

Je vous propose de modifier très légèrement un des modules avant la compilation,
afin que quand les panels sont en mode auto-hide (disparaîssent automatiquement quand non utilisé), ils apparaîssent par dessus les autres fenêtre quand on les appelle
(le comportement par défaut ne prend pas en compte le mode auto-hide et les panels
apparaîssaient en dessous des autres fenêtres, ce qui n’était pas pratique. :smt003 )

Il va falloir dans le fichier xmonad-contrib-0.9/XMonad/Hooks/ManageDocks.hs aller à la ligne 128 et remplacer :[code] struts <- (filter careAbout . concat) fmap mapM getStrut wins

-- we grab the window attributes of the root window rather than checking
-- the width of the screen because xlib caches this info and it tends to
-- be incorrect after RAndR
wa <- io $ getWindowAttributes dpy rootw
let screen = r2c $ Rectangle (fi $ wa_x wa) (fi $ wa_y wa) (fi $ wa_width wa) (fi $ wa_height wa)
return $ \r -> c2r $ foldr (reduce screen) (r2c r) struts

where careAbout (s,,,_) = s S.member ss

[/code]par[code] (strutWins,struts) <- do
stss <- mapM getStrut wins
let (ws, s) = unzip [ (w,st) | (w,sts) <- zip wins stss, st <- sts, careAbout st ]
return (unique ws, unique s)

-- move all the struts to the top of X's stacking order.
sequence_ $ map (\w -> io $ raiseWindow dpy w) strutWins

-- we grab the window attributes of the root window rather than checking
-- the width of the screen because xlib caches this info and it tends to
-- be incorrect after RAndR
wa <- io $ getWindowAttributes dpy rootw
let screen = r2c $ Rectangle (fi $ wa_x wa) (fi $ wa_y wa) (fi $ wa_width wa) (fi $ wa_height wa)
return $ \r -> c2r $ foldr (reduce screen) (r2c r) struts

where careAbout (s,,,_) = s S.member ss

    unique []     = []
    unique (x:xs) = x : unique (filter (/=x) xs)

[/code]Attention, l’indentation est importante, n’utiliser pas de tab!
Dans le morceau à coller, on voit trois niveau d’indentation :
le premier à 2 espaces,
le deuxième à 4 espaces,
le troisième à 8 espaces.

De toute façon, s’il y a un souci à la compile, les erreurs seront précisées.

Compilation

Il faudra lancer dans chacun des deux répertoires les commandes suivantes :

$ runhaskell Setup.lhs configure --user --prefix=$HOME $ runhaskell Setup.lhs build $ runhaskell Setup.lhs install --user
ce qui nous construira Xmonad et ses extensions, dans des répertoires bin, lib et share de notre répertoire utilisateur.
après chaque éventuelle modification des sources, il faudra lancer :$ runhaskell Setup clean avant de relancer les trois commandes du dessus.

Assurez vous que ~/bin est dans votre path par la présence de ces lignes dans ~/.profile# set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi

Xmonad se configure avec le fichier ~/.xmonad/xmonad.hs dont voici un exemple minimal,
mais néanmoins déjà confortable pour s’intégrer à gnome :

EDIT: Il est aussi gunzippé en pièce jointe de ce message, il ne restera plus qu’à l’extraire dans votre ~/.xmonad/ et d’appuyer sur alt-q ou mod4-q (touche_windows-q) selon votre situation pour le prendre en compte.

L’utilisation de la version gunzippée permet d’éviter d’éventuels problème d’indentation dus à un mauvais copié-collé (Le Haskell est très sensible à l’indentation).

[code]import XMonad
import Data.Monoid
import System.Exit

import XMonad.Actions.DwmPromote
import XMonad.Actions.CycleWS

import XMonad.Config.Gnome

import XMonad.Layout.NoBorders

import XMonad.Hooks.ManageDocks

import qualified XMonad.StackSet as W
import qualified Data.Map as M

myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
myNormalBorderColor = "#000000"
myFocusedBorderColor = “#00ff00

myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $

[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
, ((modm,               xK_p     ), spawn "exe=`dmenu_path | dmenu` && eval \"exec $exe\"")
, ((mod1Mask,           xK_F1), spawn "swarp 0 0 && sleep 0.2s && swarp 50 10 && xdotool click 1") 
, ((mod1Mask,           xK_F2    ), gnomeRun)

, ((modm,               xK_w     ), kill)
, ((modm,               xK_Tab   ), windows W.focusDown)
, ((modm,               xK_j     ), windows W.focusDown)
, ((modm,               xK_k     ), windows W.focusUp  )
, ((modm,               xK_Return), dwmpromote )
, ((modm,               xK_h     ), sendMessage Shrink)
, ((modm,               xK_Left  ), sendMessage Shrink)
, ((modm,               xK_l     ), sendMessage Expand)
, ((modm,               xK_Right ), sendMessage Expand)
, ((modm,               xK_comma ), sendMessage (IncMasterN 1))
, ((modm,               xK_semicolon ), sendMessage (IncMasterN (-1)))
, ((modm,               xK_Down),  nextWS)
, ((modm,               xK_Up),    prevWS)
, ((modm .|. shiftMask, xK_Down),  shiftToNext)
, ((modm .|. shiftMask, xK_Up),    shiftToPrev) 
, ((modm .|. controlMask, xK_Down), shiftToNext >> nextWS)
, ((modm .|. controlMask, xK_Up),   shiftToPrev >> prevWS)
, ((modm,               xK_space ), sendMessage NextLayout)
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)

, ((modm .|. shiftMask, xK_q     ), spawn "gnome-session-save --logout-dialog")
, ((modm              , xK_q     ), spawn "xmonad --recompile; xmonad --restart")
]

++

[((m .|. modm, k), windows $ f i)
    | (i, k) <- zip (XMonad.workspaces conf) [0x26,0xe9,0x22,0x27,0x28,0x2d,0xe8,0x5f,0xe7]
    , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)
    , (\i -> W.greedyView i . W.shift i, controlMask)]]

++

-- mod-{a,z,e}, Switch to physical/Xinerama screens 1, 2, or 3
-- mod-shift-{a,z,e}, Move client to screen 1, 2, or 3
--
[((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
    | (key, sc) <- zip [xK_a, xK_z, xK_e] [0..]
    , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]

myLayout = smartBorders $ avoidStruts (tiled ||| Mirror tiled ||| Full)
where
– default tiling algorithm partitions the screen into two panes
tiled = Tall nmaster delta ratio

-- The default number of windows in the master pane
nmaster = 1

-- Default proportion of screen occupied by master pane
ratio   = 31/50 -- approximation du nombre d'or

-- Percent of screen to increment by when resizing panes
delta   = 3/100

main = xmonad gnomeConfig {
modMask = mod4Mask,
focusFollowsMouse = myFocusFollowsMouse,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
keys = myKeys,
layoutHook = myLayout
}[/code]Quelques précisions sur ce fichier :

  • Il existe une archive de configs d’utilisateur dont il fortement conseillé de s’inspirer : haskell.org/haskellwiki/Xmon … ig_archive
  • le raccourcis alt-F1 du menu gnome ne sera fonctionnel tel quel que si le menu est placé à gauche du panel du haut (la configuration gnome par défaut) et avec dwm-tools et xdotool d’installé (ou avec la souris)

Raccourcis clavier de ce fichier :
pour plus de rapidité :
s pour Méta (touche majuscule)
a pour alt
c pour control
m pour le modificateur (touche windows dans notre exemple)

m-s-Return :lance un terminal
m-p : lance dmenu (lanceur de programme ultra léger)
a-F1 : lance le menu de gnome
a-F2 : lance gmrun
m-w : ferme la fenêtre ayant le focus
m-tab ou m-j : focus la fenêtre suivante
m-k : focus la fenêtre précédente
m-Return : échange la fenêtre ayant le focus avec la fenêtre de la zone principale
m-h ou m-Left : diminue la taille de la zone principale
m-l ou m-Right : augmente la taille de la zone principale
m-comma (virgule) : augmente d’1 le nombre de fenêtre dans la zone principale
m-semicolon (point-virgule) : diminue d’1 le nombre de fenêtre dans la zone principale
m-Down : passe au bureau suivant
m-s-Down : envoie la fenêtre ayant le focus dans le bureau suivant
m-c-Down : envoie la fenêtre ayant le focus dans le bureau suivant et y va avec
m-Up : passe au bureau précédent
m-s-Up : envoie la fenêtre ayant le focus dans le bureau précédent
m-c-UP : envoie la fenêtre ayant le focus dans le bureau précédent et y va avec
m-space : passe en revue les différentes disposition possible des fenêtres (trois dans cette conf.)
m-s-space : remet la disposition de fenêtre par défaut
m-q : recompile et redémarre xmonad (nécessaire après chaque changement au fichier ~/.xmonad/xmonad.hs pour que les changements soit pris en compte)La recompilation dure ~5 secondes, le redémarrage n’affecte pas les applications en cours ni la disposition des fenêtre, s’il vous avez fait une erreur en éditant le fichier, une fenêtre xmessage apparaît avec des indices pour résoudre les erreurs.
m-s-q : lance le dialogue fin de session gnome.

Nous allons maintenant créer dans notre répertoire utilisateur un fichier .xsession qui nous permettra de lancer Xmonad dans Gnome.

export WINDOW_MANAGER="~/.xmonad/xmonad-i386-linux" gnome-settings-daemon & dbus-launch --exit-with-session xmonad

Une fois ce fichier crée, vous pouvez quitter votre session gnome actuelle et dans gdm,
vous choisirez exécuter le script xclient ce qui devrez vous lancer dans gnome avec Xmonad.

Si tout s’est bien passé, sauvegardez la session et aux prochain login choisissez dernière session dans gdm.

Si quelque chose ne marche pas comme prévu, c’est peut-être dû à un oubli de ma part. Vous pouvez postez ici, ça me permettra sûrement d’améliorer et clarifier ce post.

Salut,

Pour les plus anglophobes d’entre nous, ne serait-il pas possible de nous fournir une traduction informatique de tiling : carrelage n’est pas très causant :slightly_smiling:

[quote=“ggoodluck47”]Salut,

Pour les plus anglophobes d’entre nous, ne serait-il pas possible de nous fournir une traduction informatique de tiling : carrelage n’est pas très causant :slightly_smiling:[/quote]J’ai pensé à “en tuile”, mais presque personne n’a jamais entendu parler de "gestionnaire de fenêtre en tuiles"
et le terme “tiling WM” commence à être connu un peu partout sur les forums et j’ai pensé qu’il serait plus familier :question:

[quote=“eol”][quote=“ggoodluck47”]Salut,

Pour les plus anglophobes d’entre nous, ne serait-il pas possible de nous fournir une traduction informatique de tiling : carrelage n’est pas très causant :slightly_smiling:[/quote]J’ai pensé à “en tuile”, mais presque personne n’a jamais entendu parler de "gestionnaire de fenêtre en tuiles"
et le terme “tiling WM” commence à être connu un peu partout sur les forums et j’ai pensé qu’il serait plus familier :question:[/quote]

Rien qu’un petit commentaire de ce genre en tête de gondole éclaire très largement ton propos. On nous reproche assez d’employer un jargon incompréhensible !

Bjr,
Mosaïque ?

[quote=“phlinux”]Bjr,
Mosaïque ?[/quote]Merci phlinux, c’était ça le mot qui me manquait. :smt003

Ça donne quoi au final ? Tu as une capture d’écran ? Parce que j’ai du mal à voir comment ça se mélange.

[quote=“MisterFreez”]Ça donne quoi au final ? Tu as une capture d’écran ? Parce que j’ai du mal à voir comment ça se mélange.[/quote]En voici une petite, comme tu peux le voir on trouve à gauche et à droite en haut des bouts de panel gnome et entre les deux une dzen bar qui sert de barre de statut, là, elle affiche le titre de la fenêtre, mais elle susceptible d’afficher ce que tu lui donne à manger, sortie de commande, etc …
Sur le panel de droite, il y a juste un sélecteur de bureau et la date.
Bon après, c’était juste pour montrer que l’hybridation est possible …

re-
Et avec une image ?

Pour les débutants ??? :open_mouth: :open_mouth:

[quote][quote=“eol”]Xmonad se configure avec le fichier ~/.xmonad/xmonad.hs dont voici un exemple minimal,
mais néanmoins déjà confortable pour s’intégrer à gnome :
Code:

import XMonad
import Data.Monoid
import System.Exit

import XMonad.Actions.DwmPromote
import XMonad.Actions.CycleWS

import XMonad.Config.Gnome

[je charcute un peu parceque ça fait beaucoup]
nmaster = 1

-- Percent of screen to increment by when resizing panes
delta   = 3/100

main = xmonad gnomeConfig {
modMask = mod4Mask,
focusFollowsMouse = myFocusFollowsMouse,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
keys = myKeys,
layoutHook = myLayout
}
Quelques précisions sur ce fichier :

  • Il existe une archive de configs d’utilisateur dont il fortement conseillé de s’inspirer : haskell.org/haskellwiki/Xmon … ig_archive
  • le raccourcis alt-F1 du menu gnome ne sera fonctionnel tel quel que si le menu est placé à gauche du panel du haut (la configuration gnome par défaut) et avec dwm-tools et xdotool d’installé (ou avec la souris)

Raccourcis clavier de ce fichier :
pour plus de rapidité :
s pour Méta (touche majuscule)
a pour alt
c pour control
m pour le modificateur (touche windows dans notre exemple)
m-s-Return :lance un terminal
m-p : lance dmenu (lanceur de programme ultra léger)
a-F1 : lance le menu de gnome
a-F2 : lance gmrun
m-w : ferme la fenêtre ayant le focus
m-tab ou m-j : focus la fenêtre suivante
m-k : focus la fenêtre précédente
m-Return : échange la fenêtre ayant le focus avec la fenêtre de la zone principale
[ Je charcute aussi ]
m-q : recompile et redémarre xmonad (nécessaire après chaque changement au fichier ~/.xmonad/xmonad.hs pour que les changements soit pris en compte)La recompilation dure ~5 secondes, le redémarrage n’affecte pas les applications en cours ni la disposition des fenêtre, s’il vous avez fait une erreur en éditant le fichier, une fenêtre xmessage apparaît avec des indices pour résoudre les erreurs.
m-s-q : lance le dialogue fin de session gnome.
[/quote][/quote] :open_mouth: :open_mouth: :open_mouth:
Plutot pour les débutants des éditeurs de textes non?? :unamused:
Enfin, c’est un bon T&A :smt023 et je suis intérressé par les wm léger pour mon portable alors je potasse l’édition de texte et je tente de suivre …
A le r’voyure
[EDIT=Même pour un anglophobe et j’en suis un (@ggoodluck47: n’est-ce pas?) tilling est trés parlant

Salut,

Et bien je préfère quand même mosaïque :slightly_smiling:

Ben oui, l’intégration dans gnome ou un autre environnement de bureau complet me semble suffisante pour écrire ça.
Sur le portable de ma copine, il est intégré à xfce et elle l’utilise sans problème,
pourtant chez elle l’informatique n’a rien d’une passion.
C’est vrai qu’elle ne change rien dans le fichier de conf.

Je vais essayé de retrouver le xmonad.hs que j’avais fait lors des essais d’intégration dans gnome, le gunziper et le poster en pièce jointe du premier message, ça évitera les possibles problèmes d’indentation lors des copié-collés à partir de l’exemple que j’ai mis là-haut.

EDIT : ça y est je l’ai retrouvé, voir pièce jointe du premier post.

Si il y a un quelconque souci lié à ce topic (erreur à la recompilation, …) , n’hésitez pas à poster en section support, je passe souvent par là et je me ferai un plaisir de vous aider

[quote=“eol”][quote=“ggoodluck47”]Salut,

Pour les plus anglophobes d’entre nous, ne serait-il pas possible de nous fournir une traduction informatique de tiling : carrelage n’est pas très causant :slightly_smiling:[/quote]J’ai pensé à “en tuile”, mais presque personne n’a jamais entendu parler de "gestionnaire de fenêtre en tuiles"
et le terme “tiling WM” commence à être connu un peu partout sur les forums et j’ai pensé qu’il serait plus familier :?:[/quote]
Ben pas pour moi, C’est quoi exactement ?

EDIT :
Ça ne serait pas “en mosaïque”, par hasard ?

Si, avec 17 jours de retard sur phlinux :wink:

Sory, je n’ai pas tout lu.

Sorry

Je me suis posé la question mais là, je m’en tamponne grave.
Chui Français et c’est déjà bien que je me force pour déchiffrer la langue du chat qui expire :smt005

Comment ça tu n’as pas tout lu!
Allez hop!
Travaux pratiques!
Xmonad s’intègre aussi très bien dans KDE, tu vas pas me dire que tu utilises encore kwin?
Un grand garçon comme toi devrait s’en tirer sans peine.

Re,

Le modèle présenté ne m’a pas convaincu de la nécessité :laughing:

:smt006

Salut, la compil’ s’est bien passé …
Mais je sèche :[quote=“eol”]Xmonad se configure avec le fichier ~/.xmonad/xmonad.hs dont voici un exemple minimal,
mais néanmoins déjà confortable pour s’intégrer à gnome :

EDIT: Il est aussi gunzippé en pièce jointe de ce message, il ne restera plus qu’à l’extraire dans votre ~/.xmonad/ et d’appuyer sur alt-q ou mod4-q (touche_windows-q) selon votre situation pour le prendre en compte.

L’utilisation de la version gunzippée permet d’éviter d’éventuels problème d’indentation dus à un mauvais copié-collé (Le Haskell est très sensible à l’indentation).
[/quote]

Je n’ai absolument aucune idée de l’endroit ou peut se trouver ce fichier :frowning:
:question: :question: