Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 08-10-2019 07:36:54

Erutluc
Membre
Lieu : Internet
Inscription : 25-12-2017

[Résolu] Afficher une image au dessus de toutes les fenêtres

Salut tous le monde.

Je voudrais savoir comment vous vous y pendriez pour
1) pour afficher une image qui resterait toujours aux dessus de toutes ce qui peut s'afficher sur l'écran.
2) pour faire varier l'opacité de l'image de 0% à X% puis X% à 0% sur un intervalle de temps donné.
3) pour recommencer le point précédent à intervalle régulier en changeant l'image
4) pour faire comme si l'image n’existait pas. On ne peut pas interagir avec elle ni avec le clavier ni avec la souris. Les fenêtres situées derrière récupèrent le focus et les événements du clavier et de la souris.

Pour le moment j'ai fait ce petit script qui fait les point 1) 2) 3)
Pour faire 1) j'utilise pqiv en mode fenêtre flottante sur tous les bureaux virtuels.
i3-msg floating enable
i3-msg sticky enable
Pour faire 2) j'utilise transset dans une boucle for
Pour faire 3) j'utilise pqiv --slideshow --slideshow-interval $interval
Pour faire 4) aucune idée sachant que lorsque la fenêtre une opacité de 0% elle continue à capturer le focus et les événements du clavier et de la souris.

J'utilise debian 10.1 et i3 4.16

#! /bin/bash

set -eu

# Paramètre
# Temps en seconde pour que la fenêtre passe d'une opacité de 0% à opacite et de opacite à 0%
delai=2
# Nombre fois par seconde où modifier la valeur de l'opacité de la fenêtre
nombre_etape_par_seconde=25
# Nombre fois pendant delai où modifier la valeur de l'opacité de la fenêtre
nombre_etape=$(($nombre_etape_par_seconde*$delai))
# Valeur d'opacité maximal
opacite=30
# Pause en seconde entre deux cycles de variation d'opacité de 0% vers opacite et de opacite vers 0%
pause=10

# Lecteur d'image
# /bin/mirage ./images/ &> /dev/null &
pqiv  -c -s -d $(($delai+2))   -i -l -t  --shuffle --low-memory images/ &
pid="$!"

# Patiente jusqu'à l'ouverture de la fenêtre et récupère son identifiant
fenetre_id=''
while : ; do
    fenetre_id="`wmctrl -lp | awk -vpid=$pid '$3==pid {print $1; exit}'`"
    [[ -z "${fenetre_id}" ]] || break
done

# Opacité à 0% puis donne le focus à la fenêtre
transset -i "${fenetre_id}" 0 > /dev/null
wmctrl -ia "${fenetre_id}"

# Fenêtre flottante sur tous les bureaux virtuels
i3-msg floating enable > /dev/null;
i3-msg sticky enable > /dev/null

# Redimensionner et centré la fenêtre
i3-msg resize set 800 600 > /dev/null;
i3-msg move position center > /dev/null;

# Temps de pause entre deux variations d'opacités
opacite_pause=$(echo "scale=6;$delai/$nombre_etape/2" | bc )
# Valeur d'opacité à ajouter après chaque pause
variation_opacite=$(echo "scale=6;$opacite/100/$nombre_etape/2" | bc)

# Diaporama
fin=false
while [ "$fin" != "true" ]
do
    # Augmentation de l'opacité de la fenêtre
    for i in $(seq 1 $nombre_etape)
    do transset -i "${fenetre_id}" --inc $variation_opacite > /dev/null
       sleep $opacite_pause
    done
   
    # Diminution de l'opacité de la fenêtre
    for i in $(seq 1 $nombre_etape)
    do transset -i "${fenetre_id}" --dec $variation_opacite > /dev/null
       sleep $opacite_pause
    done

    # Met en 'pause' le processus pour arrêter le diaporama
    kill -s SIGSTOP $pid

    # Pause entre deux images du diaporama
    sleep $pause

    # 'Redémarre' le processus pour continuer le diaporama
    kill -s SIGCONT $pid
done

Dernière modification par Erutluc (10-10-2019 14:16:15)


Répondre à une bonne question est comme donner un poisson à quelqu’un, mais enseigner comment résoudre son problème soi-même est comme lui apprendre à pêcher. (source)

Hors ligne

#2 08-10-2019 13:44:43

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : [Résolu] Afficher une image au dessus de toutes les fenêtres

Plop,

Je t'avoue que je ne sais pas si c'est possible sans modifier toi-même le code de ton afficheur d'image.

Après quelques recherches rapides, je suis tombé sur ça : https://www.x.org/releases/current/doc/ … shape.html

Les spécifications du protocole X11 permettant de définir de manière séparée le cadre d'affichage, le cadre de click, etc.
Mais de là à ce que ce puisse être paramétrable pour n'importe quelle fenêtre, je ne sais pas…

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Je suis parrain linux !

Hors ligne

#3 10-10-2019 14:03:53

Erutluc
Membre
Lieu : Internet
Inscription : 25-12-2017

Re : [Résolu] Afficher une image au dessus de toutes les fenêtres

Merci pour cette piste qui a été fructueuse.

En continuant les recherches je suis tombé sur ces sites :
https://github.com/XVilka/set_opacity
https://gist.github.com/mertyildiran/b3 … d3854d9d15
https://web.archive.org/web/20190507192 … -thru.html
dont je me suis inspiré pour le code de ghost qui désactive l'interaction avec une fenêtre.

Voilà le code final pour ceux qui veulent voir :
https://debian-facile.org/images/file-R … 35a4b70097 (la clé c'est ghost)

Dernière modification par Erutluc (10-10-2019 14:22:52)


Répondre à une bonne question est comme donner un poisson à quelqu’un, mais enseigner comment résoudre son problème soi-même est comme lui apprendre à pêcher. (source)

Hors ligne

Pied de page des forums