Wicked
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.
Récupérer Wicked
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 :
- ajoutez le dépôt suivant à /etc/apt/sources.list :
deb http://corvix.eu testing ware
- et installez wicked par :
aptitude update aptitude safe-upgrade aptitude install awesome awesome-wicked
- pour vous débarrasser de l’avertissement concernant la clé de signature, ajoutez la clé :
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
Arch Linux
Si vous utilisez Arch Linux, un PKGBUILD est déjà disponible sur aur, récupérez-le ici.
Dépôts :
[awesome] #awesome3 Server = http://www.camazotz.de/awesome/
[deelab] #awesome-git Server = http://www.deelab.org/arch/i686
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,
' <span color="white">Date :</span> %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,
' <span color="white">En cours de lecture :</span> $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 ' <span color="white">En cours de lecture :</span> '..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,
' <span color="white">Mémoire :</span> $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,
' <span color="white">Mémoire :</span> $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,
' <span color="white">CPU :</span> $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,
' <span color="white">Système :</span> ${/ 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,
' <span color="white">NET</span> : ${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, "<span color='white'>Volume</span> : $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 :
#!/bin/bash echo "wicked.suspend()" | awesome-client
Remplacez simplement « suspend » par « activate » là où il faut.