# [FVWM] Bling à la E17

## Gronono

Bonjour,

Si vous aimez comme moi le module bling à la E17 alors vous allez être interresser par le script FVWM suivant.

1 - Qu'est-ce que le module bling d'e17 ?

Pour ceux qui n'ont jamais utiliser E17, le module bling permet de rendre une fenêtre transparente lorsqu'elle perd le focus, et la rendre opaque lorsqu'elle a le focus.

2 - Comme le faire sous FVWM ?

Pour commencer, il faut activer la transparence au niveau de X.org en suivant le HOW-TO : TIP Xorg X11 et transparence.

Pensez à installer xcompmgr et transset-df.

Puis ajoutez les lignes suivantes à votre fichier de configuration de FVWM :

```

# Déclenchée lorsque la fenêtre reçoit le focus

DestroyFunc FvwmFocusChange

AddToFunc FvwmFocusChange

+ I ThisWindow (!"Panel", !"FvwmPagerPanel", "!Root") Exec transset-df -i $[LastFocus] -m 0.5 -x 0.5

+ I ThisWindow (Focused, !"Panel", !"FvwmPagerPanel", "!Root") Exec transset-df -i $[w.id] -m 1 -x 1

+ I ThisWindow (!"Panel", !"FvwmPagerPanel", "!Root") SetEnv LastFocus $[w.id]

# Configuration des changements de focus

DestroyModuleConfig FvwmFocusChangeEvent: *

*FvwmFocusChangeEvent: focus_change FvwmFocusChange

# Lancement du changement de focus au demarrage

AddToFunc StartFunction

+ I Module FvwmEvent FvwmFocusChangeEvent

+ I Exec xcompmgr &

```

3 - Détail du code : 

Si vous êtes habitué à modifier votre configuration de Fvwm, le code ci-dessus devrait vous être familier et passez à la section 4.

Sinon, vous pouvez lire la suite.

On commence par définir la fonction qui sera appelée lors d'un changement de focus FvwmFocusChange :

```

DestroyFunc FvwmFocusChange

AddToFunc FvwmFocusChange

```

Si la fenêtre qui change de focus n'est ni "Panel"  (ma barre des tâches), ni "FvwmPagerPanel" (mon pager), ni "Root" (le bureau) alors on rend transparente à 50% la dernière fenêtre qui a eu le focus (la fenêtre que l'on vient de quitter):

```

+ I ThisWindow (!"Panel", !"FvwmPagerPanel", "!Root") Exec transset-df -i $[LastFocus] -m 0.5 -x 0.5

```

Ensuite, si la fenêtre a le focus et n'est pas une des trois fenêtre alors on la rend opaque :

```

+ I ThisWindow (Focused, !"Panel", !"FvwmPagerPanel", "!Root") Exec transset-df -i $[w.id] -m 1 -x 1

```

Et enfin, la fenêtre courante devient la dernière fenêtre avec le focus :

```

+ I ThisWindow (!"Panel", !"FvwmPagerPanel", "!Root") SetEnv LastFocus $[w.id]

```

A chaque fois, j'ignore ma barre des tâches, le pager et le bureau car je ne souhaite pas qu'elles deviennent transparentes.

Ensuite, on définit le module FvwmFocusChangeEvent se chargeant de détecter le changement de focus et d'appeler notre fonction :

```

DestroyModuleConfig FvwmFocusChangeEvent: *

*FvwmFocusChangeEvent: focus_change FvwmFocusChange

```

Et enfin on le charge au demarrage de Fvwm et on en profite pour lancer xcompmgr:

```

AddToFunc StartFunction

+ I Module FvwmEvent FvwmFocusChangeEvent

+ I Exec xcompmgr &

```

4 - Commentaires :

Je ne suis pas un spécialiste de Fvwm, mais j'essaye. Donc si vous avez des commentaires, des remarques, des améliorations, je suis preneur.

5 - Bugs connus :

Pour l'instant, j'en ai vu qu'un seul. Lors de la lecture des vidéos Flash dans Firefox, il arrive que Firefox devienne transparent. Le problème doit venir du fait que la vidéo prend le focus alors qu'elle est dans une fenêtre Firefox.

Merci de votre attention.

----------

## anigel

Intéressant et bien expliqué : merci beaucoup !

----------

## Gronono

Bonjour,

En fait mon script était vraiment buggé à mort.

Je le corrige donc.

J'ai changé de méthode car j'ai un peu de mal avec les fonctions FVWM. Maintenant à chaque changement de focus, j'appelle script bash qui lui met à jour la transparence:

```

#! /bin/sh

#

# Script de mise à jour de la transparence en fonction du focus.

# Le premier argument contient l'identifiant de la dernière fenêtre ayant le focus

# Le second est l'identifiant de la fenêtre qui reçoit le focus.

#

if [ "$1" != "$2" ]; then

        transset-df -i $1 -m 0.5 -x 0.5

        transset-df -i $2 -m 1   -x 1

fi

```

Et l'appel :

```
# Déclenchée lorsque la fenêtre reçoit le focus

DestroyFunc FvwmFocusChange

AddToFunc FvwmFocusChange

+ I ThisWindow Exec $[FVWM_SCRIPT]/change_transparence.sh $[LastFocus] $[w.id]

+ I ThisWindow SetEnv LastFocus $[w.id]

# Configuration des changements de focus

DestroyModuleConfig FvwmFocusChangeEvent: *

*FvwmFocusChangeEvent: focus_change FvwmFocusChange

# Lancement du changement de focus au demarrage

AddToFunc StartFunction

+ I Module FvwmEvent FvwmFocusChangeEvent

```

La variable $[FVWM_SCRIPT] contient le dossier contenant les scripts de ma configuration.

A+

Gronono

----------

## Biloute

J'ai essayé mais j'ai un problème :

Si je lance xcompmgr le fond d'écran (qui est une image png) est effacé par un fond gris.

Voilà mon .fvwm/config :

```
Key   Tab   A   M   WindowList Root c c NoCurrentDeskTitle, NoGeometry, CurrentDesk, NoGeometry, CurrentAtEnd

DestroyMenu Main

AddToMenu Main

+ "xterm" Exec xterm -geometry 65x30 -bg midnightblue -fg white

+ "kill" destroy

...

+ "Restart" Restart

+ "Quit" Quit

DeskTopSize 3x1 # hxv = horiz*vert

EdgeResistance 1000 20

EwmhBaseStruts 20 20 20 0

DestroyModuleConfig FvwmBacker*

*FvwmBacker: Command (Desk 0, Page * *) Exec fvwm-root /home/vince/wp1.png

Module FvwmBacker

MenuStyle * PopupImmediately, BorderWidth 1, Background White, MenuColorset 0, ActiveColorset 1

Style * TileCascadePlacement, FPGrabFocus, FPReleaseFocus, !Title, !Borders

Style gimp* SkipMapping, StartsOnPage 0 2 0

Style opera* StartsOnPage 0 1 0

AddToFunc StartFunction 

+ I Exec xcompmgr &

```

----------

## Gronono

Bonjour Biloute,

Je n'ai pas rencontré ce problème. Mais avant de mettre en place la configuration Fvwm, j'ai fait des tests en ligne de commande. Essaye de lancer la commande transset-df et vois si le problème persiste.

Pour la transparence, j'ai utilisé le TIP : TIP Xorg X11 et transparence. Vérifie que tu as bien suivi tous les étapes. Regarde aussi la version anglaise qui à l'air de contenir plus de détails.

Désolé je ne peux pas d'aider plus que ça.

A+

Gronono

----------

## Biloute

Salut Gronono merci pour la réponse

Pour l'instant j'utilise FvwmBacker qui execute fvwm-root pour avoir le fond.

Alors gentoo-wiki conseille d'utiliser feh pour avoir un wallpaper.

Est-ce que tu utilise feh ou bien as-tu une autre astuce pour afficher ton fond d'écran?

Sinon j'ai bien des fenetres transparentes sauf que derrière c'est tout gris.

----------

## Gronono

Je n'utilise plus Fvwm (ça prend trop de temps, mais je vais m'y remettre dès que je peux *).

J'utilisais l'utilitaire de Fluxbox : fbsetbg.

A+

Gronono

* en fait j'ai cassé mon grub et ma partition / en installer windows pour pouvoir jouer à COD4   :Embarassed:  . 

----------

## truc

vous pouvez aussi utiliser fvwm-root directement pour le fond d'écran:

```
+ I Schedule 100 Exec exec fvwm-root -r $[fvwm_wallpapers]/$0
```

----------

## Gronono

Bonjour,

Je préciserai que fvwn-root à un gros inconvénient. Il ne supporte pas le jpeg :

 *Man-Page wrote:*   

> 
> 
> The supported image formats are XBM, XPM, PNG and SVG if appropriated libraries are compiled in. 
> 
> 

 

Gronono (bientôt de retour sous Gentoo)

----------

## Biloute

Oui j'utilise fvwm-root, je converti le jpg en png et roulez les petits bolides.

Mais si on tape

```
xcompmgr
```

Il y a une couche de gris qui vient cacher le wallpaper.

Du coup j'ai installé window-maker pour remplacer fvwm-root par wmsetbg et là ça marche.

----------

## geekounet

```
feh --bg-scale wallpaper.png
```

 :Wink: 

----------

## Dominique_71

Sujet intéressant. Je suis en train de relancer Fvwm-Crystal. Pour un ebuild à jour, voir Bug 468680.

Parmi les nouveautés, il y a le support rufimentaire de la transparence. Elle peut être dés/activée depuis le menu des préférences, et la molette de la souris sur les barres de titre permet de l'ajuster pour chaque fenêtre.

Ce bling à la E17 est une bonne idée. Je vais voir comment je peux incorporer quelque chose de ce style dans Fvwm-Crystal.

Comme autre nouveauté, beaucoup plus mature celle-là, la fonction Fullscreen qui permet de mettre en plein écran n'importe quelle application (un peu comme F11 dans Firefox, mais géré par Fvwm) a été étendue avec une fonction Disappear qui permet de faire disparaître et réapparaître les fenêtres plein écran, ainsi que de circuler entre les différentes fenêtres plein écran d'une page de bureau et le bureau.

C'est l'Amiga OS qui m'a inspiré cette fonction et le résultat est bluffant, Fvwm-Crystal propose ainsi la pile d'applications plein-écran de l'Amiga OS sans compromettre le bureau à pages multiples de X. Le meilleur des deux façons de naviguer dans l'espace du bureau se retrouve ainsi dans le même bureau.

----------

## Dominique_71

Il n'y a pas eu grand chose à modifier. Juste deux lignes:

```
+ I ThisWindow (!FvwmButtons*, !ApplicationPanel, !FvwmPager*) Exec $[FVWM_SYSTEMDIR]/scripts/SetTranslucency $[LastFocus] $[w.id]

+ I ThisWindow (!FvwmButtons*, !ApplicationPanel, !FvwmPager*) SetEnv LastFocus $[w.id]
```

Cela marche super bien avec les fenêtres, par contre sur les icônes, c'est pas terrible, celles de Thunar perdent la transparence, les autres comme les thumbnails le deviennent, mais je suppose qu'il n'y a pas grand chose à faire là.

----------

## bivittatus

Salut!

Je n'avais pas vu ce post (qui pourtant n'est pas bien loin du début... :Wink: ). Il répond certainement à l'un de mes principaux problèmes: la vraie transparence!

PAr contre, j'ai beau essayer un peu toutes les combinaisons par rapport au premier message et à ton denier (modifications), mais rien ne fonctionne! La seule solution qui me donne un semblant de vraie transparence est d'utiliser la toute première version (donnée par Gronono), mais les fenâtres passent leur temps à s'afficher et à disparaitre (ainsi que le menu). Ce qui rend donc crystal totalement inutilisable!

Il va de soi que dans ce script, j'ai modifié le "transset-df" en "transset"...

Est-ce que tu as une explication? Est-ce que tu peux poster la config qui fonctionne si bien chez toi?

Merci d'avance  :Wink: 

----------

## Dominique_71

J'utilise transset-1.0.1 de portage. Donc la commande est bien transset.

Le bling bling : ..../functions/BlingBling.

Pour le mettre en fonction, il suffit d'aller dans le menu des préférences de Crystal. Je parle de FVWM-Crystal >= 3.2.0.

Les fonctions qui démarrent et arrêtent le BlingBling sont dans ..../functions/Preferences-Menu.

Quand le BlingBling est en fonction, tu peux aussi changer individuellement la translucidité avec la mollette de la souris sur les barres de titres des fenêtres. Cette fonction peut aussi être mise en service depuis les préférences quand le bling est off. 

Je ne me rapelle plus où elle est. Il faut regarder dans bindings/MouseBindings pour trouver son nom, et ensuite utiliser searchstring dans $prefix/addons pour la trouver facilement. Ou plus simple, comme elle utilise aussi transset, faire un 'searchstring transset'.

----------

## bivittatus

Salut et merci pour ta réponse!

Alors le truc, c'est qu'il me dit que FVWM ne supporte pas la translucidité et que des problèmes peuvent apparaître (ce qui est le cas du coup!  :Smile: ).

Je vais essayer d'installer la 3.2.1 et te tiens au courant  :Wink: 

----------

## Dominique_71

C'est seulement un message d'avertissement qui te dit aussi que tu as été averti. La FAQ de fvwm dit que cela peut causer des problèmes. Fvwm ne supporte pas la translucidité veut simplement dire qu'il n'y a pas de support natif dans fvwm. ça ne veut pas dire que ça ne marche pas. C'est xrandr et transset qui la créent.

Aussi, la translucidité (ou vraie transparence) et le bling, sont les deux seules préférences qui ne sont pas permanentes. J'ai fait comme ça parce que chez moi des fois, mplayer merde et se retrouve en premier plan et plein écran sur toutes les pages du bureau. Quand ça m'arrive, le seul moyen pour m'en débarasser est d'aller dans une des consoles primaires avec Ctrl+Alt+Fn et de faire un killall -9 mplayer.

Ce message indique que la transparence est en fonction. Avec le bling, c'est automatique quand le focus change de fenêtre. Pour que ce soit visible, il faut donc avoir au moins deux fenêtres visibles. 

Avec l'option translucidité, c'est la molette de la souris sur la barre de titre d'une fenêtre qui te change sa transparence. Je n'ai pas mis de limite, donc tu peux la faire disparaître complètement. Si tu arrêtes la translucidité et la remets en marche, elle repart avec les valeurs de quand tu l'as arrêtée.

La molette marche aussi avec le bling, mais les valeurs de la molette sont écrasées par le bling.

Si ces deux options sont présentes dans les préférences mais que ça ne marche pas, c'est que xorg n'utilise pas randr. Il faut vérifier dans son log:

```
$ cat /var/log/Xorg.0.log|grep -i randr

[882851.038] Initializing built-in extension RANDR

[882851.749] (II) fglrx(0): RandR 1.2 support is enabled!

[882851.749] (II) fglrx(0): RandR 1.2 rotation support is enabled!

[882852.012] (II) fglrx(0): RandR 1.2 enabled, ignore the following RandR disabled message.

[882852.089] (--) RandR disabled

[882853.072] (II) fglrx(0): Restoring Recent Mode via PCS is not supported in RANDR 1.2 capable environments

```

----------

## bivittatus

Salut!

Alors version 3.2.1 installée et, tout fonctionnait, la translucidité, le bling...TOUT!

Du coup, je me suis dit que je te ferais part de tout ça ce matin, et là, après avoir redémarré le PC...et bien exactement le même problème qu'avant! Pour voir les fenêtres, ou un bout de fenêtre une fois l'un des deux activé, je dois passer dessus, tout clignote...c'est assez étrange!

Pour xrandr:

```
cat /var/log/Xorg.0.log|grep -i randr

[   784.302] Initializing built-in extension RANDR

[   784.590] (II) NOUVEAU(0): RandR 1.2 enabled, ignore the following RandR disabled message.

[   784.591] (--) RandR disabled
```

Nouveau l'active apparemment, donc pas de soucis.

Etrange ce fait que hier, tout fonctionnait, et aujourd'hui...niet!

----------

## Dominique_71

Si tu sort de Crystal, tue kdm et démarre Crystal avec startx, il se passe quoi?

----------

## bivittatus

Le fait est que je le démarre déjà avec startx (depuis une bonne semaine).

----------

## Dominique_71

Dans  ~/.xinitrc, tu peux rajouter "2>~/.errors_fvwm-crystal" à la fin de la commande qui démarre fvwm-crystal, si c'est pas déjà fait.

Dans ce fichier, tu trouveras les messages d'erreurs de fvwm. L'option "opérations silencieuses" permet de ne rediriger que les errerus de fvwm-crystal, et pas celles de programmes très bavards comme certains programmes kde. ça filtre pas tout, mais ça rend ce fichier beucoup plus petit et lisible.

Mais bon, je ne pense pas que tu trouves grand chose pour ce problème de clignotement. Il doit s'agir d'une interaction entre Nouveau, transset et les autres programmes.

Autrement, tu peux essayer de lancer des commandes transset depuis la ligne de commande ou FvwmConsole et voir ce qui se passe.

Aussi, transset nécessite les extensions composite, xfixes et damage, pas randr. Randr est pour changer la résolution et ce genre de chose.

```
$ cat /var/log/Xorg.0.log|grep -i composite

[882851.039] Initializing built-in extension COMPOSITE

[882851.853] (II) fglrx(0): Sync:  Separate  Composite

[882852.011] (II) fglrx(0): Enable composite support successfully

dom@tuxstudio ~ $ cat /var/log/Xorg.0.log|grep -i xfixes

[882851.038] Initializing built-in extension XFIXES

dom@tuxstudio ~ $ cat /var/log/Xorg.0.log|grep -i composite

[882851.039] Initializing built-in extension COMPOSITE

[882851.853] (II) fglrx(0): Sync:  Separate  Composite

[882852.011] (II) fglrx(0): Enable composite support successfully

```

----------

## bivittatus

Salut!

Alors voilà le résultat:

```
$ cat /var/log/Xorg.0.log|grep -i composite

[ 42258.175] (**) Extension "Composite" is enabled

[ 42258.182] Initializing built-in extension COMPOSITE

[ 42258.269] (II)         Composite (RENDER acceleration)

$ cat /var/log/Xorg.0.log|grep -i xfixes

[ 42258.180] Initializing built-in extension XFIXES

$  cat /var/log/Xorg.0.log|grep -i damage

[ 42258.182] Initializing built-in extension DAMAGE
```

Le la,cement de transset à la mano ne donne rien par contre...

Pour le .xinitrc, j'ai bien activé cette option, mais j'ai mes logs gmail de conky qui viennent se greffer dessus chaque minute avec trois adresses mails synchro...difficile d'y voir quelque chose!  :Wink: 

----------

## Dominique_71

Pour que transset fonctionne, il faut activer la translucidité depuis les préférences. Ou à la main avec

```
xcompmgr
```

Après tu peux utiliser la mollette de la souris sur les barres de titre ou

```
transset -c 0.5
```

Le bling est un peu différent, il lance xcompmgr, ainsi qu'un FvwmEvent qui utilise transset pour changer automatiquement la translucidité avec les changements de focus.

Pour ton conky, tu dois pouvoir rajouter "2>/dev/null" à la fin de la commande qui le lance pour le rendre silencieux.

----------

## bivittatus

Salut!

Je copnfirme, c'est bien xcompmgr qui me met le foin là-dedans. Dès que je le lance, ça clignote de partout, c'est noël!  :Very Happy: 

Ce que je ne m'explique pas, c'est pourquoi, juste après l'install, tout fonctionnait à merveille...  :Confused: 

----------

## Dominique_71

J'ai juste trouvé qu'il y a un autre compositeur dans portage. "emerge compton" pour l'installer, "compton" pour le lancer, la translucidité doit alors marcher avec la mollette de la souris sur les barres de titres.

Peux-tu l'essayer et me dire si pour toi ça marche aussi.

EDIT: Pour le bling, le lancer, faire un "killall -9 xcompmgr" et "compton". Un test rapide me montre aucun problème avec mplayer, donc je vais voir comment je peux le mettre comme compositeur par défaut. Il y a aussi comton-trans qu'il faut que je teste.

----------

## bivittatus

Ok je teste ça de suite...j'étais en train de voir ce que je pouvais obtenir avec cairo-compmgr, mais l'autogen me sort une erreur avec vala-1.0 que je n'arrive pas à solutionner...

----------

## bivittatus

Bon, je dois avoir un autre problème, ça me fait la même chose...sapin de noël!!!   :Evil or Very Mad: 

----------

## Dominique_71

Redémarrer Crystal.

----------

## bivittatus

Après redémarrage, exactement pareil!

----------

## Dominique_71

Je viens aussi de trouver que xinerama et compositing semblent être incompatibles. Mon fvwm est compilé sans la support de xinerama. Aussi, goggle montre que pour la même carte, le compositing peut varier grandement d'un driver à l'autre. Perso, avec nvidia, j'ai toujours utilisé le driver nvidia, en fait uniquement parce que je n'ai jamais réussis à faire un kernel qui fonctionne bien avec nouveau.

----------

## Dominique_71

Il y a une commande fvwm. Dans FvwmConsole:

```
Xinerama off
```

----------

## bivittatus

Mon fvwm est lui aussi compilé sans xinerama:

```
$ eix -I fvwm

[I] x11-wm/fvwm

     Available versions:  2.6.2 2.6.3 (~)2.6.5 {bidi debug doc gtk2-perl lock netpbm nls perl png readline rplay stroke svg tk truetype (+)vanilla xinerama}

     Installed versions:  2.6.5(21:55:39 03/06/2013)(nls perl png readline svg truetype vanilla -bidi -debug -doc -gtk2-perl -lock -netpbm -rplay -stroke -tk -xinerama)

     Homepage:            http://www.fvwm.org/

     Description:         An extremely powerful ICCCM-compliant multiple virtual desktop window manager

```

Je vais essayer de repasser sous les drivers nvidia...on va voir ce que ça donne!

----------

## bivittatus

Bon, ben...exactement pareil avec les drivers nvidia!!! C'est quand même quelque chose...Grrrrrr

----------

