[tmux] demande d'avis et comparaison avec screen

Ce qui ne concerne ni le forum ni des problèmes
Répondre
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

[tmux] demande d'avis et comparaison avec screen

Message par vlamy »

Bonjour amis archers, je me permet d'ouvrir un thread pour parler un peu de multiplexeurs de terminaux.
Je m'aperçois que beaucoup de gens n'en utilisent pas, souvent parce qu'ils ne savent pas que ça existe. Et honnêtement, depuis que j'ai découvert GNU screen, ma vie a changée :humour:

Bref, histoire de me mettre au goût du jour j'envisage de migrer ma conf de terminaux de screen à tmux et j'avoue que si certains utilisateurs expérimentés sont prêts à me faire profiter de leur expérience, trucs et astuces, j'en serais ravis.

Pour information, voilà comment je m'organise avec les multiplexeurs de terminaux :
  1. une session screen locale pour l'administration (pacman, htop, moc, ....etc)
  2. une session pour le développement : compilation, tests + ssh sur sessions screen serveurs
  3. une session screen sur chaque serveur administrés (non archlinux)
J'imagine que tous cela est faisable avec tmux, mais avant de ma lancer, une confirmation me ferait plaisir.
Merci d'avance,
Vlamy.
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [tmux] demande d'avis et comparaison avec screen

Message par Tristelune »

Je vais m'immiscer dans la conversation.
vlamy a écrit :Je m'aperçois que beaucoup de gens n'en utilisent pas, souvent parce qu'ils ne savent pas que ça existe. Et honnêtement, depuis que j'ai découvert GNU screen, ma vie a changée :humour:
J'avais déjà vu Gnu screen, mais en ce qui me concerne j'ai encore un peu du mal à me convaincre de l'utilité.
Quelles sont les fonctionnalités qui te font utiliser GNU screen ? J'ai un vague souvenir de quelque chose qui
te permet d'ouvrir plusieur terminaux, mais je peux aussi le faire avec mon gestionnaire de fenêtre et il est
possible d'accéder à ton terminal depuis un autre ordinateur si mes souvenir sont bons avec la commande "detach".
J'avais trouvé ça pratique, mais de là à dire que c'est le truc dont j'ai besoin je suis moyennement convaincu.
Il est fort possible que je sois passé à côté de quelque chose, je te laisse donc m'éclairer ;-).
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [tmux] demande d'avis et comparaison avec screen

Message par vlamy »

Salut Tristelune,
l'intérêt de ce genre de logiciel est double à mon sens, et si on schématise grossièrement.
  1. La gestion de session permet de lancer des commandes dans un shell, puis de quitter le shell sans que la commande ne s'arrête, et enfin ré-attacher la session pour revenir au dit shell.
    Exemple classique : tu lance un test ou une compilation (typiquement un truc long > 1 heure) à travers une session ssh. Sans session screen ou tmux, si tu quittes le terminal dans lequel tu as lancé la commande ou que tu ferme la session ssh, la commande s'arrête. Avec une session, tu peux te déconnecter, éventuellement éteindre ta machine, rentrer du boulot à chez toi, rallumer la machine, rétablir la connexion ssh, et enfin retrouver ta session screen ou tmux.
  2. L'agencement graphique des fenêtres de terminaux. Cela te permet de configurer le découpage des fenêtre d'un terminal (à la terminator pour ceux qui connaissent) et de sauvegarder cette conf (c'est plus fin que ça, mais c'est l'idée). On a tous eut des moments où on ouvre 4 terminaux, un petit pour compiler un truc, deux autres pour lancer un serveur et un client, un autre pour éditer du code...etc. Avec screen ou tmux, tu peux sauvegarder ce type d'agencement de fenêtres.
J'ai sûrement oublié plein de choses, ces logiciels étant tellement riches et puissants, mais j'espère que cela te donne une idée.
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [tmux] demande d'avis et comparaison avec screen

Message par Tristelune »

Merci vlamy pour ta description détaillée. Ca me donne une meilleure idée. L'agencement graphique
m'intéresse, mais je me demande dans quelle mesure j'en ai vraiment besoin puisque j'utilise
le gestionnaire de fenêtre awesome. Et il me semble que si je veux je peux à chaque session
ouvrir un certain nombre de terminaux avec une application déterminée. Comme tu dis,
peut-être que gnu screen permet de faire ça de manière plus fine. Je vais rejeter
un coup d'oeil.

Je vais garder un oeil sur le sujet!!
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [tmux] demande d'avis et comparaison avec screen

Message par vlamy »

Salut Tristelune, juste pour mettre les choses au clair, je te conseille plutôt de partir sur tmux que sur Gnu/Screen, surtout si tu débutes :)

Sinon, moi aussi j'utilise awesome, mais cela ne m'empêche pas d'apprécier les multiplexeurs de terminaux. L'idée c'est que tu as une seule fenêtre avec un tmux ou un screen, tandis que si tu gères le positionnement avec ton wm, tu as autant de fenêtre X que de shell. Un exemple avec awesome, si tu utilises le teardrop (un terminal qui apparaît et disparaît à l'aide d'une combinaison de touches), avec screen ou tmux, tu peux enrichir le teardrop avec un menu contextuel qui te permet d'afficher le shell de ton souhait (IM,musique,mail...etc).

En plus le truc magique avec screen, mais je pense que c'est pareil avec tmux, c'est que tu peux ouvrir deux fois le même shell dans des terminaux différents. C'est pratique dans le cas d'un teardrop justement :)

Bref, si tu te mets à tmux, je propose qu'on partage nos découvertes/conf sur ce thread, si personne n'y vois d'inconvénient :D
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [tmux] demande d'avis et comparaison avec screen

Message par Tristelune »

vlamy a écrit :L'idée c'est que tu as une seule fenêtre avec un tmux ou un screen, tandis que si tu gères le positionnement avec ton wm, tu as autant de fenêtre X que de shell.
Ok, mais je crois que je bute sur ce point. Quel est le problème à avoir plusieurs fenêtres au lieu d'une ? Ok, j'imagine une question de mémoire. Si oui, est-ce que ça change
de beaucoup ? En jetant un coup d'oeil, je ne suis pas sûr qu'on y gagne des masses. Ou alors quelle est la différence fondamentale ? Je me demande si je ne passe
pas à côté d'un truc....
vlamy a écrit : En plus le truc magique avec screen, mais je pense que c'est pareil avec tmux, c'est que tu peux ouvrir deux fois le même shell dans des terminaux différents. C'est pratique dans le cas d'un teardrop justement :)
Ahem, là aussi je coince.... Qu'est-ce que ça va apporter à un teardrop ? La seule utilité que je vois est d'avoir le même shell sur deux tags différents sur awesome
par exemple. Ca peut être pratique, mais j'ai du mal à me convaincre que ça soit super pratique.

Je partagerai volontier mes découvertes. Et je pense aussi que je vais aussi essayer du côté de tmux, je viens de voir que c'est un projet actif alors
que gnu screen n'a plus été développé depuis longtemps apparemment. Mais il va me falloir certainement un peu de temps pour m'y mettre, j'ai
encore quelques bricoles à régler.... et ça va me demander du temps.

Comme tu le vois, beaucoup d'interrogations, mais je profite de ce fil pour essayer d'y voir clair. Merci pour ton aide!
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [tmux] demande d'avis et comparaison avec screen

Message par vlamy »

Re-salut !
Pour la question des terminaux, effectivement cela ne change pas beaucoup je pense.
C'est comme pour le teardrop, je dirais que c'est une question de goût et d'organisation.

Personnellement, j'aime bien utiliser les discussions de chat avec un teardrop, je bidouille à coté, je vois les messages dans une zone de notification, et quand je veux répondre je déclenche le raccourcis clavier qui va bien et la fenêtre de tchat s'affiche. Ensuite encore un raccourcis et je cache la fenêtre. Tu vas me dire qu'elle est la différence entre ça et changer de tag pour tchatter? Fondamentalement : aucune ! :D
La différence tient dans des détails je pense (taille de fenêtre de tchat souhaitée, assignation d'un tag au tchat...etc)
Par exemple, on voit beaoucp de conf awesome pour lesquelles on a un tag par application, je ne suis pas fan de ce système. Je préfère avoir un tag pour les applications en fullscreen, un avec beaucoup de petites fenêtre, un pour les applications graphiques avec plein de fenêtres, ...etc
Question de goût encore :mrgreen:

Pour ce qui est de la mémoire, je pense qu'aux vues des bécanes modernes, qui ont plusieurs Go de mémoire, il n'y a pas de problèmes. Moi ce qui me gène dans le fait d'avoir plusieurs fenêtres, c'est que je navigue beaucoup entre mes applis avec le traditionnel alt+tab, qui parcours les applications une à une, et avec la méthode à 50 terminaux il faudrait re-coder ou réorganiser ma fonction Alt+Tab. Mais c'est faisable sans soucis. Encore une fois je crois que c'est vraiment une question de goût.

Pour approfondir un peu, avec tmux/screen, je vois les terminaux comme des espaces pour accéder aux shells, tu peux en avoir un en fullscreen, un en teardrop, un autre en moitié d'écran partagé avec un emacs (mode graphique). Et je peux accéder à toutes mes sessions screen à travers ces différents terminaux. D'où le principe de pouvoir ouvrir une session dans plusieurs terminaux. C'est une façon d'organiser son espace virtuel, mais il y a plusieurs écoles et je ne pense pas que l'une soit meilleure que l'autre :)

Pour finir, historiquement screen et tmux sont très appréciés pour l'utilisation de sessions. C'est évidemment très utilisé pour la récupération de shell à distance (quand tu administres beaucoup de machines via ssh par exemple), mais c'est aussi super pratique quand tu bidouilles les environnements graphiques. Par exemple, si tu bidouilles ta conf X et que tu plantes ta session X, tu peux basculer sur un autre tty et récupérer ta session screen ou tmux. Encore une fois, à moins que tu sois développeur de wm, ça ne va pas te servir souvent, mais c'est le principe, ca m'est arrivé d'avoir besoin de screen en installant des grappes de machines.

Bon je reconnaît que c'est un peu technique et ce sont sûrement des jouets pour geek, mais ces deux outils sont très puissants, complets et appréciés.
J'espère que tu y vois encore plus clair, mais bon... rien ne vaut l'utilisation pour se faire une idée :)
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [tmux] demande d'avis et comparaison avec screen

Message par Tristelune »

Tout d'abord merci pour tes explications complètes! Je vois que je ne passe pas à côté de quelque chose
de fondamental (enfin, certain me diront que si :wink: ), mais comme tu le dis assez souvent, c'est peut-être une question de goût ou
de méthode de travail. Je me dis aussi que c'est une question de besoin. Comme tu l'as cité plus haut,
si tu dois gérer des machines par ssh, ça peut être bien de lancer les commandes sur la machine
distante, se déconnecter de cette machine et s'y connecter à nouveau plus tard quand tout est fini.
Il s'agit toutefois de besoin que je n'ai pas pour l'instant. Mais qui sait, je me mets à utiliser
un peu plus ssh, il se peut qu'un jour j'en aie l'utilité.

Tes réponses foisonnent d'exemples et je les garderai en tête. Il se peut que tout
à coup je me mette à utiliser un multipleur de terminaux. Je vais quand même m'y intéresser
de plus près, d'ailleurs j'ai déjà lu un tutoriel :D .

Une dernière question: pourrais-tu donner quelques exemples de teardrop ? J'ai cherché, mais dans un premier
temps je n'ai rien trouvé. J'ai trouvé par contre des terminaux au comportement semblable qu'on appelle drop-down.
Est-ce que c'est la même chose ?
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [tmux] demande d'avis et comparaison avec screen

Message par vlamy »

Salut Tristelune, tu as mis le doigt dessus : c'est surtout une question de besoins ! Comme tout outil :)

Pour ce qui est du teardrop, c'est une erreur de vocabulaire de ma part, c'est un terminal drop-down dont je parlais.
C'est juste que celui que j'utilise s'appelle teardrop (larme en anglais, donc il n'y a vraiment aucun rapport).

Si tu veux le code original, c'est le suivant, mais ouvrons un autre fil si tu veux développer :

Code : Tout sélectionner

----------------------------------------------------------------
-- Drop-down applications manager for the awesome window manager
----------------------------------------------------------------
-- Coded  by: Lucas de Vries <lucas@glacicle.com>
-- Hacked by: Adrian C. <anrxc@sysphere.org>
-- Licensed under the WTFPL version 2
--   * http://sam.zoy.org/wtfpl/COPYING
----------------------------------------------------------------
-- To use this module add:
--   require("teardrop")
-- to the top of your rc.lua, and call it from a keybinding:
--   teardrop(prog, vert, horiz, width, height, sticky, screen)
--
-- Parameters:
--   prog   - Program to run; "urxvt", "gmrun", "thunderbird"
--   vert   - Vertical; "bottom", "center" or "top" (default)
--   horiz  - Horizontal; "left", "right" or "center" (default)
--   width  - Width in absolute pixels, or width percentage
--            when <= 1 (1 (100% of the screen) by default)
--   height - Height in absolute pixels, or height percentage
--            when <= 1 (0.25 (25% of the screen) by default)
--   sticky - Visible on all tags, false by default
--   screen - Screen (optional), mouse.screen by default
----------------------------------------------------------------

-- Grab environment
local pairs = pairs
local awful = require("awful")
local setmetatable = setmetatable
local capi = {
    mouse = mouse,
    client = client,
    screen = screen
}

-- Teardrop: Drop-down applications manager for the awesome window manager
module("teardrop")

local dropdown = {}

-- Create a new window for the drop-down application when it doesn't
-- exist, or toggle between hidden and visible states when it does
function toggle(prog, vert, horiz, width, height, sticky, screen)
    local vert   = vert   or "top"
    local horiz  = horiz  or "center"
    local width  = width  or 1
    local height = height or 0.25
    local sticky = sticky or false
    local screen = screen or capi.mouse.screen

    if not dropdown[prog] then
        dropdown[prog] = {}

        -- Add unmanage signal for teardrop programs
        capi.client.add_signal("unmanage", function (c)
            for scr, cl in pairs(dropdown[prog]) do
                if cl == c then
                    dropdown[prog][scr] = nil
                end
            end
        end)
    end

    if not dropdown[prog][screen] then
        spawnw = function (c)
            dropdown[prog][screen] = c

            -- Teardrop clients are floaters
            awful.client.floating.set(c, true)

            -- Client geometry and placement
            local screengeom = capi.screen[screen].workarea

            if width  <= 1 then width  = screengeom.width  * width  end
            if height <= 1 then height = screengeom.height * height end

            if     horiz == "left"  then x = screengeom.x
            elseif horiz == "right" then x = screengeom.width - width
            else   x =  screengeom.x+(screengeom.width-width)/2 end

            if     vert == "bottom" then y = screengeom.height + screengeom.y - height
            elseif vert == "center" then y = screengeom.y+(screengeom.height-height)/2
            else   y =  screengeom.y - screengeom.y end

            -- Client properties
            c:geometry({ x = x, y = y, width = width, height = height })
            c.ontop = true
            c.above = true
            c.skip_taskbar = true
            if sticky then c.sticky = true end
            if c.titlebar then awful.titlebar.remove(c) end

            c:raise()
            capi.client.focus = c
            capi.client.remove_signal("manage", spawnw)
        end

        -- Add manage signal and spawn the program
        capi.client.add_signal("manage", spawnw)
        awful.util.spawn(prog, false)
    else
        -- Get a running client
        c = dropdown[prog][screen]

        -- Switch the client to the current workspace
        if c:isvisible() == false then c.hidden = true
            awful.client.movetotag(awful.tag.selected(screen), c)
        end

        -- Focus and raise if hidden
        if c.hidden then
            -- Make sure it is centered
            if vert  == "center" then awful.placement.center_vertical(c)   end
            if horiz == "center" then awful.placement.center_horizontal(c) end
            c.hidden = false
            c:raise()
            capi.client.focus = c
        else -- Hide and detach tags if not
            c.hidden = true
            local ctags = c:tags()
            for i, t in pairs(ctags) do
                ctags[i] = nil
            end
            c:tags(ctags)
        end
    end
end

setmetatable(_M, { __call = function(_, ...) return toggle(...) end })
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [tmux] demande d'avis et comparaison avec screen

Message par Tristelune »

Salut Vlamy,

j'ai encore cherché et regardé à droite à gauche et tes exemples me sont devenus
bien plus clair à présent. Et surtout je viens de voir une utilisation dont j'aurais
très certainement l'utilité. Il m'arrive de devoir me connecter sur la machine d'un ami
pour faire divers réglages. Grâce à tmux, on pourrait se connecter sur le même terminal
et la personne pourrait voir ce que je fais. Excellent!!!!

Quand au code de teardrop, merci de le partager. Je vais y jeter un coup d'oeil
et on en rediscutera éventuellement sur un autre fil de discussion.

Merci encore pour tous tes conseils!
Avatar de l’utilisateur
cdemoulins
Chu Ko Nu
Messages : 310
Inscription : mar. 11 mars 2008, 04:15
Localisation : Paris

Re: [tmux] demande d'avis et comparaison avec screen

Message par cdemoulins »

Salut,
Pour répondre à la question initiale : comparaison entre screen et tmux, voilà (pour moi) les principaux avantages de tmux :
  • Vitesse du rendu, surtout dans le cas d'un découpage vertical.
  • L’agencement (layout) d'une fenêtre est géré côté serveur. Donc en cas de déconnexion-reconnexion, l'agencement est conservé.
  • «Scriptabilité» bien meilleur/simple/lisible qu'avec screen.
Avatar de l’utilisateur
vlamy
yeomen
Messages : 268
Inscription : ven. 20 juil. 2012, 15:19
Localisation : Grenoble

Re: [tmux] demande d'avis et comparaison avec screen

Message par vlamy »

@Tristelune : oui je pense que ton exemple doit marcher :)

@cdemoulins : merci pour ta réponse, j'ai commencé à m"y mettre et je trouve aussi que l'agencement des fenêtre est beaucoup plus facile.
Niveau scriptabilité, je n'en suis pas encore là, mais je suis content de savoir que c'est plus simple que screen, car bon.. screen n'est pas l'outil le plus simple à scripter.
Répondre