Debian-facile

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

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

#1 13-08-2018 15:15:18

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

i3bar et processeur

Salut à tout le monde !

Je suis sur i3 et j'ai voulu me faire une barre de statut un petit peu jolie qui m'affiche quelques infos que n'affiche pas de base i3status (ou pas convenablement). Bref, une barre de statut inutile, donc indispensable !
J'ai suivi les spécifications de la doc d'i3 concernant le "protocole i3bar" (pour reprendre l'expression de la doc) et j'ai sorti ce script. Il s'agit juste de faire passer les informations à afficher au format JSON à la commande status_command (dans le fichier de conf d'i3). C'est la même chose que font i3status et i3bar, sauf que là, on rédige le JSON à la main.

Et un truc que j'ai remarqué, c'est que ça fait pas mal bosser le processeur !

J'ai remarque ça d'abord sur mon petit pc portable (intel lattitude e4310). Le processeur travaille à fond, ça chauffe beaucoup, le ventilateur tourne à toute berzingue. Sur htop, le processeur tape à fond dans le rouge.
Je viens de tester le script à l'instant sur mon pc fixe, qui lui est plutôt costaud. Évidemment ça n'a pas les mêmes conséquences, mais ça travaille anormalement beaucoup.
J'ai pris une capture d'écran d'htop après un démarrage. Avec I3status, htop affiche normalement 2%-3%...

Capture d'écran : https://framapic.org/Gbin29Ixb3Mn/Wm91YIdPCFpS.png

À votre avis, le script est en cause ou est-ce i3bar lui-même le problème ?

Hors ligne

#2 13-08-2018 16:13:26

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Raspbian
Inscription : 12-08-2015

Re : i3bar et processeur

Ton script fait appel à plein de commandes (grep, awk, cut),.... C'est normal qu'il est lent.

Tu devrais ajouter une temporisation d'une seconde  (sleep 1) dans la boucle "while", histoire de décharger un peu le cpu.

Par contre, comment interfaces-tu ce script à i3 ?

Dernière modification par Beta-Pictoris (13-08-2018 16:19:47)

Hors ligne

#3 13-08-2018 16:58:23

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

Re : i3bar et processeur

Mais justement, il n'est pas lent, d'où mon étonnement.
Par exemple, je m’étais servi de la doc pour faire un script qui affiche dans i3status ce que joue le lecteur MOC. Et là, c'est vrai que sur le laptop seulement, i3status n'était plus très fluide (pour afficher le volume du son qui monte ou qui descend par exemple). Mais ça ne posait pas de problème de consommation processeur, puisque je l'ai même conservé sur le pc fixe.

Et là justement, avec le script i3bar, la barre de statut est fluide alors que le processeur travaille beaucoup. C'est ça surtout que je trouve étrange. Une telle consommation pour un script pareil qui affiche juste quelques retours de commandes.
J'ai pas lu de retour disant que i3blocks consomme beaucoup (le plus utilisé, quasiment aucun retour sur i3bar). Pourtant, il fait la même chose, juste que les tâches sont séparées en scripts distincts : en suivant la structure de i3blocks, on écrit un petit bloc et on lui dit de jouer tel script, 1 script par fonction (afficher la date, la musique, etc).

Je vais tester en rajoutant un sleep 1 ! wink  Mais j'ai peur que ça ne soit plus fluide forcément.  Si c'est le cas, je testerai i3blocks, ou je virerai ce qui ne sert à rien, ou je reviendrai à i3status.

Sinon par afficher le script i3bar, c'est dans la section concernant la barre de statut du fichier de config (~/.config/i3/config)


bar {
        status_command  ~/.config/i3bar/monScript.sh   # bar.sh dans la capture d'écran htop
}
 


La doc précisait qu'on pouvait utiliser la forme :

status_command  shell -c chemin/vers/le/script

en donnant l'exemple sh -c, mais ça n'a pas fait de différence.

Dernière modification par Nsyo (13-08-2018 17:27:43)

Hors ligne

#4 13-08-2018 17:32:56

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

Re : i3bar et processeur

Le rafraichissement du volume est pas super fluide, mais la consommation a beaucoup baissé !

Capture d’écran après redémarrage: https://framapic.org/gMHpdcHiQgh1/VtmIX1b1g0ux.png

Hors ligne

#5 13-08-2018 17:55:42

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Raspbian
Inscription : 12-08-2015

Re : i3bar et processeur

Sans temporisation, le cpu de ta machine est beaucoup chargé car il essaye d'exécuter ton script un maximum de fois par seconde. D'ailleurs, il y a une temporisation dans "i3status"  (Directive interval).

Tu peux mettre une temporisation plus courte. Par exemple:

sleep .5

Hors ligne

#6 13-08-2018 18:08:39

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Raspbian
Inscription : 12-08-2015

Re : i3bar et processeur

Sinon, dans ton script, tu pourrais faire en sorte que les sections MOC, Disk, Ram, Swap, Battery, Date et Time s’exécutent tous les n cycles pour donner un max de priorité aux commandes echo et à la section Volume.

Dernière modification par Beta-Pictoris (13-08-2018 18:11:55)

Hors ligne

#7 13-08-2018 19:10:01

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

Re : i3bar et processeur

C'est vrai que dans i3 on peut choisir l'intervalle de répétition de chaque module.

Je vais faire ce que tu as dit. C'est reproduire le comportement de temporisation d'i3status en fait.

Faut que je trouve comment faire ça, je débute dans le scripting bash. C'est l'occasion d'en apprendre plus cool

Hors ligne

#8 13-08-2018 19:37:09

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Raspbian
Inscription : 12-08-2015

Re : i3bar et processeur

Tu créé une variable appelée, par exemple, cycle.

Tu mets la variable à zéro avant ta boucle "while":

cycle=0
while .....


Tu exécutes la partie de code, non prioritaire, uniquement quand cycle=0

if [ cycle == 0 ]; then
# code non prioritaire
fi


Tu incrémentes, ensuite, ta variable, à chaque itération, avec un modulo 10.

((cycle=(cycle+1)%10))


Et tu mets une temporisation à un dizième de secondes:

sleep .1

Dernière modification par Beta-Pictoris (13-08-2018 19:37:49)

Hors ligne

#9 13-08-2018 22:32:12

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

Re : i3bar et processeur

Merci pour l'astuce ! Je ne m'étais pas encore penché sur l'incrémentation ! La suite demain wink

Hors ligne

#10 17-09-2018 14:22:04

Nsyo
Membre
Distrib. : Debian Stretch
Noyau : Linux 4.9.0-8-amd64
(G)UI : KDE Plasma
Inscription : 02-08-2018

Re : i3bar et processeur

Je me suis absenté un moment !

Finalement j'ai conservé i3status. Utiliser i3bar sans conky, c'est pas une bonne idée. Il faut écrire un script long et compliqué pour prioriser les différents modules ainsi que la fréquences de rafraichissement. C'est bien pour ça qu'il y a i3block d'ailleurs...

Merci pour le coup de main en tout cas !

Hors ligne

Pied de page des forums