Wicked/fr

Wicked est une bibliothèque Lua, ce qui signifie que vous pouvez l’inclure dans rc.lua à l’aide de require et mettre en place vos widgets depuis le même fichier de configuration sans avoir à lancer un programme annexe avec des fichiers de configuration extérieurs.

Debian
Wicked est disponible pour awesome 3 via le paquet awesome-extra disponible pour testing (actuellement « Squeeze ») et sid. Pour la version stable actuelle de Debian (« Lenny »), vous pouvez utiliser un backport. Pour cela, en root : deb http://corvix.eu testing ware aptitude update aptitude safe-upgrade aptitude install awesome awesome-wicked gpg --keyserver pgpkeys.mit.edu --recv-key 974E7D68 gpg -a --export 974E7D68 | sudo apt-key add - Son empreinte devrait être : 0189 4F9A 5CFD 0242 5BEA 39E6 37A4 6DF5 974E 7D68
 * ajoutez le dépôt suivant à /etc/apt/sources.list :
 * et installez wicked par :
 * pour vous débarrasser de l’avertissement concernant la clé de signature, ajoutez la clé :

Arch Linux
Si vous utilisez Arch Linux, un PKGBUILD est déjà disponible sur aur, récupérez-le ici.

Dépôts : [awesome] Server = http://www.camazotz.de/awesome/
 * 1) awesome3

[deelab] Server = http://www.deelab.org/arch/i686
 * 1) awesome-git

Source Mage GNU–Linux
Tout ce que vous avez à faire est cast wicked.

Gentoo Linux
Un paquet pour Gentoo est disponible ici.

Manuellement
Si vous voulez récupérer la bibliothèque séparément, vous pouvez la télécharger depuis le dépôt git à l’adresse http://git.glacicle.com/?p=awesome/wicked.git;a=summary.

Pour l’installer manuellement : git clone git://git.glacicle.com/awesome/wicked.git sudo cp wicked/wicked.lua /usr/share/awesome/lib/ sudo cp wicked/wicked.7.gz /usr/share/man/man7/

Mettre en place Wicked
Pour mettre en place wicked, c’est simple ; ajoutez simplement la ligne suivante au début de votre fichier de configuration rc.lua et vous êtes prêt pour la suite : require("wicked")

Créer des widgets
Il est aisé de créer des widgets en ajouter des appels de fonction à votre rc.lua. Vous trouverez des exemples ci-dessous ; pour plus d’information sur les types et options de widgets disponibles, regardez le manuel de wicked après l’avoir installée. N’oubliez pas que vous devrez ensuite ajouter les widgets à la barre de statut.

Il est mieux d’apprendre par l’exemple ; vous pouvez récupérer la configuration actuelle de l’auteur.

Exemple de widget de date
Le widget suivant affiche la date actuelle dans la barre de statut, en ayant recours à la commande date. datewidget = widget({   type = 'textbox',    name = 'datewidget' })

wicked.register(datewidget, wicked.widgets.date,   ' Date : %c')

Exemple de « lecture en cours » pour MPD
Le widget suivant est un widget simple qui affiche la musique actuellement en cours de lecture dans Music Playing Daemon. mpdwidget = widget({   type = 'textbox',    name = 'mpdwidget' })

wicked.register(mpdwidget, wicked.widgets.mpd,   ' En cours de lecture : $1')

Si vous voulez un peu plus de fantaisie et n’afficher la musique actuelle que lorsqu’elle est effectivement diffusée, changez l’appel :

wicked.register(mpdwidget, wicked.widgets.mpd, 	function (widget, args)		  if args[1]:find("volume:") == nil then		      return ' En cours de lecture : '..args[1]		   else                      return ''                   end		end)

Exemple de moniteur d’utilisation mémoire
Le widget suivant affiche l’utilisation actuelle en pourcentage et méga-octets de la mémoire par rapport au total disponible : memwidget = widget({   type = 'textbox',    name = 'memwidget' })

wicked.register(memwidget, wicked.widgets.mem,   ' Mémoire : $1 ($2Mo/$3Mo)')

Si vous voulez que les valeurs aient deux, quatre et quatre chiffres respectivement, vous pouvez utiliser : memwidget = widget({   type = 'textbox',    name = 'memwidget' })

wicked.register(memwidget, wicked.widgets.mem,   ' Mémoire : $1 ($2Mo/$3Mo)', nil, nil, {2, 4, 4})

Exemple de barre d’utilisation de mémoire
Le widget suivant affiche l’utilisation relative de la mémoire sous forme de barre de progression : membarwidget = widget({   type = 'progressbar',    name = 'membarwidget',    align = 'right' })

membarwidget:properties_set('mem', { width = 40, height = 0.65, gap = 0, border_padding = 1, border_width = 1, ticks_count = 0, ticks_gap = 0, vertical = false })

membarwidget:bar_properties_set('mem', { bg = '#222222', fg = '#285577', fg_center = '#285577', fg_end = '#285577', fg_off = '#222222', reverse = false, min_value = 0, max_value = 100 })

wicked.register(membarwidget, wicked.widgets.mem, '$1', 1, 'mem')

Exemple d’utilisation du processeur
Le widget suivant affiche l’utilisation actuelle du processeur, en pourcentage : cpuwidget = widget({   type = 'textbox',    name = 'cpuwidget' })

wicked.register(cpuwidget, wicked.widgets.cpu,   ' CPU : $1%')

Exemple de graphe d’utilisation du processeur
Le widget suivant affiche un graphique avec l’utilisation actuelle du processeur : cpugraphwidget = widget({   type = 'graph',    name = 'cpugraphwidget',    align = 'right' })

cpugraphwidget.height = 0.85 cpugraphwidget.width = 45 cpugraphwidget.bg = '#333333' cpugraphwidget.border_color = '#0a0a0a' cpugraphwidget.grow = 'left'

cpugraphwidget:plot_properties_set('cpu', {   fg = '#AEC6D8',    fg_center = '#285577',    fg_end = '#285577',    vertical_gradient = false })

wicked.register(cpugraphwidget, wicked.widgets.cpu, '$1', 1, 'cpu')

Exemple d’utilisation d’un système de fichiers
Le widget suivant affiche l’espace utilisé sur la partition montée en / sur l’espace total, ainsi que le pourcentage utilisé : fswidget = widget({   type = 'textbox',    name = 'fswidget' })

wicked.register(fswidget, wicked.widgets.fs,   ' Système : ${/ used}/${/ size} (${/ usep} utilisé)', 120)

Exemple de moniteur d’interface réseau
Le widget suivant affiche la vitesse actuelle sur eth0, ainsi que les totaux de transfert de la connexion. Le dernier argument force l’affichage des nombres avec trois chiffres : netwidget = widget({   type = 'textbox',    name = 'netwidget' })

wicked.register(netwidget, wicked.widgets.net,    ' NET : ${eth0 down} / ${eth0 up} [ ${eth0 rx} //  ${eth0 tx} ]', nil, nil, 3)

Exemple de charge de batterie
Le widget suivant affiche la charge des batteries : batteries = 2

-- Fonction pour extraire le pourcentage de charge function read_battery_life(number) return function(format) local fh = io.popen('acpi') local output = fh:read("*a") fh:close

count = 0 for s in string.gmatch(output, "(%d+)%%") do               if number == count then return {s} end count = count + 1 end end end

-- Affiche une barre de progression verticale par batterie for battery=0, batteries-1 do  batterygraphwidget = widget({ type = 'progressbar',                                 name = 'batterygraphwidget',                                 align = 'right' }) batterygraphwidget.height = 0.85 batterygraphwidget.width = 8 batterygraphwidget.bg = '#333333' batterygraphwidget.border_color = '#0a0a0a' batterygraphwidget.vertical = true batterygraphwidget:bar_properties_set('battery',                                        { fg = '#AEC6D8',                                           fg_center = '#285577',                                           fg_end = '#285577',                                           fg_off = '#222222',                                           vertical_gradient = true,                                           horizontal_gradient = false,                                           ticks_count = 0,                                           ticks_gap = 0 })

wicked.register(batterygraphwidget, read_battery_life(battery), '$1', 1, 'battery') end

Widgets personnalisés
Vous pouvez créer vos propres widgets personnalisés en passant vos fonctions en type « paramètre ». De cette façon, vous pouvez spécifier n’importe quelle commande à sortir sous forme de widget, à n’importe quel intervalle. L’exemple suivant affiche le volume d’alsa toutes les quatre secondes ; il est récupéré en lançant la commande amixer et en en interprétant la sortie. Cet exemple nécessite alsa-utils. volumewidget = widget({   type = 'textbox',    name = 'volumewidget' })

function amixer_volume(format) local f = io.popen('amixer get PCM') local l = f:lines local v = ''

for line in l do      if line:find('Front Left:') ~= nil then pend = line:find('%]', 0, true) pstart = line:find('[', 0, true) v = line:sub(pstart+1, pend) end end

f:close

return {v} end

wicked.register(volumewidget, amixer_volume, " Volume : $1", 4)

Vous pouvez utiliser ce qui suit pour lancer n’importe quel script externe que vous avez écrit, pour récupérer des données et les afficher : mywidget = widget({   type = 'textbox',    name = 'mywidget' }) function run_script local filedescriptor = io.popen('mon_petit_script_sympa.py') local value = filedescriptor:read filedescriptor:close

return {value} end -- Exécute « mon_petit_script_sympa.py » toutes les 10 secondes et envoie sa sortie dans le widget wicked.register(mywidget, run_script, "$1", 10)

Gel d’awesome
Awesome attend que le code Lua soit fini avant de se relancer, donc si un script lent s’exécute, cela peut potentiellement ralentir ou geler awesome. Dans ce cas, vous pouvez utiliser un processus de fond et un fichier temporaire pour remédier à ce problème.

Utilisez le code suivant pour lancer un script lent de votre choix, sans geler awesome : mywidget = widget({   type = 'textbox',    name = 'mywidget' })

function run_slow_script (widget, args) -- Lit le fichier temporaire laissé par le script local filedescriptor = io.open('/tmp/script-temp-file') local value = nil

if filedescriptor ~= nil then value = filedescriptor:read end

filedescriptor:close

if value == nil then return {''} else return {value} end end

-- Lance « mon_script_lent.py » toutes les 10 secondes et envoie son résultat dans le widget wicked.register(mywidget, run_slow_script, "$1", 10)

-- Demande à ce qu’un compteur soit lancé toutes les 9 secondes awful.hooks.timer.register(9, mywidget_timer)

-- Utilise le compteur pour remplir le fichier temporaire function mywidget_timer os.execute('mon_script_lent.py > /tmp/script-temp-file &') end

Suspendre temporairement Wicked
Si vous êtes paranoïaque sur l’utilisation de la batterie et que vous préférez que wicked ne lance pas de programme en fond à chaque fois que vous êtes sur la batterie, vous pouvez suspendre temporairement toute mise à jour de wicked en utilisant wicked.suspend avec un raccourci. Vous pouvez relancer tout ce qui a été suspendu avec wicked.activate.

En utilisant awesome-client, vous pouvez appeler tout cela automatiquement, disons par exemple depuis un script Hal. Vous pouvez par exemple faire ça de cette façon : echo "wicked.suspend" | awesome-client
 * 1) !/bin/bash

Remplacez simplement « suspend » par « activate » là où il faut.