Wicked

From awesome
Jump to: navigation, search

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.

Contents

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.

Personal tools