Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/07/2014, à 12:36

Christophe C

Mutter + xfce

je test xfce avec le windows manager Mutter au lieu de Xfwm4, pour voir.

C'est plus joli aux fermetures et ouvertures de fenêtres, par contre j'ai 2 pbs / questions.

- Changement de bureau : le changement ne se fait plus par la molette souris. Il faut faire ctrle-alt-flèche gauche (ou droite). Pas très pratique.
Quelqu'un sait-il si on peut avoir un affichage des bureau en mode exposé, ou si on peut récupérer le changement via la molette ?
Je n'utilise pas cairo-dock (qui a un utilitaire pour cela). Pas la peine de me le proposer smile.

- Conky ne s'affiche pas au démarrage. Je peut le lancer à la main, mais il disparait très vite. Je le lance avec un différé de quelques secondes, mais rien.

Voilà, ce n'est pas majeur, mais si vous avez une idée ...


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#2 Le 09/07/2014, à 19:57

Compte anonymisé

Re : Mutter + xfce

Bonsoir,

Pour le changement de bureau à la molette, j'avais fait ce programme C il n'y a qq années (switch_workspace_metacity.c) :

/*
 * 15/05/2009 
 *  Change de bureau avec la molette de la souris pour le gestionaire
 *  de fenetre metacity (a la mode de compiz-fusion).
 *
 * Compile : 
 *   gcc switch_workspace_metacity.c -o switch_workspace_metacity -lX11
 *
 * (Required library : libX11-dev)
 *
 * Pour arreter : CTRL+C ou 'killall switch_workspace_metacity'
 *
 */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <signal.h>
#include <unistd.h>

#include <X11/Xlib.h>
#include <X11/Xatom.h>

#define DEBUG          0

/*--------------------------------------------------------------------------*/

unsigned int get_nb_desktop(Display *disp, Window root)
{
  Atom           a;
  Atom           xa_ret_type;
  int            ret_format;
  unsigned long  ret_nitems;
  unsigned long  ret_bytes_after;
  unsigned char  *ret_prop;
  unsigned int   nb_desktop;

  a = XInternAtom(disp, "_NET_NUMBER_OF_DESKTOPS", False);
  if (XGetWindowProperty(disp, root, a, 0,
        1, False, XA_CARDINAL, &xa_ret_type, &ret_format,
        &ret_nitems, &ret_bytes_after, &ret_prop) != Success)
  {
    fprintf(stderr,"Probleme avec _NET_NUMBER_OF_DESKTOPS (1)\n");
    return -1;
  }

  if (xa_ret_type != XA_CARDINAL)
  {
    fprintf(stderr,"Probleme avec _NET_NUMBER_OF_DESKTOPS (2)\n");
    XFree(ret_prop);
    return -1;
  }
  
  assert(ret_nitems == 1);
  assert(ret_format == 32);

  memcpy((unsigned char *) &nb_desktop, ret_prop, 4);

  XFree(ret_prop);

  return nb_desktop;
}

unsigned int get_cur_desktop(Display *disp, Window root)
{
  Atom           a;
  Atom           xa_ret_type;
  int            ret_format;
  unsigned long  ret_nitems;
  unsigned long  ret_bytes_after;
  unsigned char  *ret_prop;
  unsigned int   cur_desktop;

  a = XInternAtom(disp, "_NET_CURRENT_DESKTOP", False);
  if (XGetWindowProperty(disp, root, a, 0,
        1, False, XA_CARDINAL, &xa_ret_type, &ret_format,
        &ret_nitems, &ret_bytes_after, &ret_prop) != Success)
  {
    fprintf(stderr,"Probleme avec _NET_CURRENT_DESKTOP (1)\n");
    return -1;
  }

  if (xa_ret_type != XA_CARDINAL)
  {
    fprintf(stderr,"Probleme avec _NET_CURRENT_DESKTOP (2)\n");
    XFree(ret_prop);
    return -1;
  }
  
  assert(ret_nitems == 1);
  assert(ret_format == 32);

  memcpy((unsigned char *) &cur_desktop, ret_prop, 4);

  XFree(ret_prop);

  return cur_desktop;
}

void set_cur_desktop(Display *disp, Window root, unsigned int cur_desktop)
{
  Atom           a;
  XEvent         xevent;

  a = XInternAtom(disp, "_NET_CURRENT_DESKTOP", False);

  xevent.type                 = ClientMessage;
  xevent.xclient.type         = ClientMessage; 
  xevent.xclient.display      = disp;
  xevent.xclient.window       = root;
  xevent.xclient.message_type = a;
  xevent.xclient.format       = 32;
  xevent.xclient.data.l[0]    = cur_desktop;
  xevent.xclient.data.l[1]    = CurrentTime;
  xevent.xclient.data.l[2]    = 0;
  xevent.xclient.data.l[3]    = 0;
  xevent.xclient.data.l[4]    = 0;

  XSendEvent(disp, root, False, 
             SubstructureNotifyMask | SubstructureRedirectMask,
             &xevent);
}

void grab_buttons(Display *disp, Window win)
{
  int i;

  for(i = 4; i <= 5; i++)  /* UP (4) & DOWN (5) */
  {
    XGrabButton(disp,i,AnyModifier,win,
                False, ButtonPressMask,
                GrabModeAsync, GrabModeAsync,
                None,None);
  }
}

void ungrab_buttons(Display *disp, Window root, Window win)
{
  int i;

  XSync(disp,False);

  for(i = 4; i <= 5; i++)
  {
    XUngrabButton(disp,i,AnyModifier,win);
  }
  XUngrabButton(disp, AnyButton, AnyModifier, root);

  XSync(disp,False);
}

Window find_window(Display *disp, Window root, char *wname)
{
  Window   r;
  Window   win;
  Window   *kids;
  unsigned i,nkids;
  char     *title;

  XQueryTree(disp,root,&r,&win,&kids,&nkids);
  win = root;

  for (i = 0; i < nkids; i++)
  {
    XFetchName(disp,kids[i],&title);
    if (title && strcmp(title,wname) == 0)
    {
      win = kids[i];
      XFree(title);
      break;
    }
    if (title) 
      XFree(title);
  }
  XFree(kids);

  return win;
}

void handler_signal(int param)
{
  /* CTRL-C or KILL */
  exit(0);
}

void switch_workspace_with_mousewheel(char *desktop_name)
{
  Display        *disp;
  XEvent         xe;
  Window         root,desktop;
  unsigned int   cur_desktop;
  unsigned int   nb_desktop;
  int            wait_desktop;

  disp = XOpenDisplay(NULL);

  if (!disp)
  {
    fprintf(stdout,"Erreur XOpenDisplay()\n");
    exit(-1);
  }

  root = DefaultRootWindow(disp);

  wait_desktop = 0;
  desktop      = root;
  while ((wait_desktop < 15) && (desktop == root))
  {
    desktop = find_window(disp, root, desktop_name);
    sleep(1);
    wait_desktop++;
  }

#if DEBUG != 0
  fprintf(stdout,"Attente desktop : %d s\n",wait_desktop);
#endif

  if (desktop != root)
  {
    fprintf(stdout,
        "\n>>> Change de workspace via la molette souris pour metacity\n\n");

    nb_desktop = get_nb_desktop(disp,root);
 
    cur_desktop = get_cur_desktop(disp,root);

#if DEBUG != 0
    fprintf(stdout,"nb_desktop = %d, cur_desktop = %d\n",
        nb_desktop,cur_desktop);
#endif
 
    XAllowEvents(disp,AsyncBoth,CurrentTime);
 
    grab_buttons(disp,desktop);

    signal(SIGINT,handler_signal);
    signal(SIGTERM,handler_signal);

#if DEBUG != 0
    fprintf(stdout,"Attent la molette ...\n");
    fflush(stdout);
#endif
 
    while (1)
    {
      XNextEvent(disp,&xe);

      if(xe.type == ButtonPress)
      {
#if DEBUG != 0
        fprintf(stdout,"    %s\n",xe.xbutton.button == 5 ? "DOWN" : "UP");
        fflush(stdout);
#endif

        if (xe.xbutton.button == 5)
        {
          cur_desktop = (cur_desktop + 1) % nb_desktop;
        }
        else
        {
          if (cur_desktop)
            cur_desktop--;
          else
            cur_desktop = nb_desktop - 1;
        }
      
        set_cur_desktop(disp, root, cur_desktop);
      }
    }

    ungrab_buttons(disp,root,desktop);
  }
  else
    fprintf(stdout,"Desktop non trouve !!!\n");

  fprintf(stdout,"Bye bye\n");

  XCloseDisplay(disp);
}


int main(int na, char *arg[])
{
  if (na > 1)
    switch_workspace_with_mousewheel(arg[1]);
  else
    switch_workspace_with_mousewheel("Bureau");

  return 0;
}

Qui fonctionne sous mutter (14.04).
Pour le compiler, faut installer libx11-dev et faire :

gcc -Wall -O2 switch_workspace_metacity.c -o switch_workspace_metacity -lX11

Le programme suppose que la fenêtre du bureau se nomme "Bureau" (le cas avec nemo). Pour XFCE et thunar faut lancer dans un terminal :

xwininfo

et cliquer sur le bureau. Normalement doit apparaitre les infos de la fenêtre du style :

xwininfo: Window id: 0x200000b "Bureau"

  Absolute upper-left X:  0
  ........

Le nom de la fenêtre est la fin de la ligne Window id.
Pour exécuter le programme (dans le répertoire de compilation) :

./switch_workspace_metacity  "Le_nom_de_la_fenetre_du_bureau"

Si ok, reste à mettre le programme au démarrage de session...

Dernière modification par alx (Le 09/07/2014, à 20:40)

#3 Le 10/07/2014, à 12:44

Christophe C

Re : Mutter + xfce

Ah, c'est un peu lourd pour moi, mais merci.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#4 Le 10/07/2014, à 15:02

metalux

Re : Mutter + xfce

Bonjour Christophe C,
As-tu essayé cette extension?
Ça ne fonctionne pas directement sur le bureau, il faut se rendre sur l'un des côtés de l'écran mais ça peut être une alternative.

Hors ligne

#5 Le 11/07/2014, à 12:23

Christophe C

Re : Mutter + xfce

Mais c'est une extension gnome ? Ca ne marchera pas dans Xfce, même avec Mutter ?


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#6 Le 11/07/2014, à 22:48

metalux

Re : Mutter + xfce

Pffff...j'ai rien dis roll
Mutter seul, effectivement ça ne fonctionnera pas. Désolé du dérangement.

Hors ligne

#7 Le 12/07/2014, à 08:28

Christophe C

Re : Mutter + xfce

ya-pa-de-mal smile


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#8 Le 15/08/2014, à 16:15

fibou

Re : Mutter + xfce

Bonjour,

Je déterre le post, pour avoir des infos à propos de mutter et Xfce.
Est-ce que ça reste stable d'utiliser les deux ? Et aussi quelle manip faut-il faire pour remplacer xfwm par mutter ?
Et la dernière pour la route, est-ce que dans mutter tu as les fenêtres "côte à cote" (chacune la moitier de l'écran) ?

Merci d'avance !

Hors ligne

#9 Le 16/08/2014, à 16:49

Christophe C

Re : Mutter + xfce

1/ oui, mutter est stable. Par contre j'ai les pbs expliqués dans mon 1er post.

2/ pour activer mutter :
- sudo apt-get install mutter
- ouvrir le fichier ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml
- dans la ligne <value type="string" value="xfwm4"/>, remlacer xfwm4 par mutter
- sauvegarder puis redémarrer la session

3/ Le grid (le positionnement des fenetres en 1/2 écran) fonctionne parfaitement.

Dernière modification par Christophe C (Le 16/08/2014, à 16:52)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#10 Le 17/08/2014, à 11:58

fibou

Re : Mutter + xfce

Merci pour les renseignements. J'ai installé mutter, en effet ça fonctionne et ça a pas l'air de bugger. Par contre les décorations des fenêtres sont assez hideuse (je vais essayer de chopper les thèmes pour mutter).
Pour la configuration, elle se fait avec dconf-editor c'est bien ça ?
Aussi je trouve que ça manque légèrement de fluidité au niveau des changement de bureau, je verrai à l'usage.

Hors ligne

#11 Le 17/08/2014, à 15:51

Christophe C

Re : Mutter + xfce

dconf, oui. La clé, c'est org.gnome.mutter


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne