Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

nombre réponses : 23

#0 -1 »  Installation de airoscript sur ubuntu 12.04 » Le 19/10/2012, à 14:56

Detah-Pixel
Réponses : 3

Bonjour,

Dans le cadre de mes études, je me vois dans l'obligation d'installer airoscript.
Cependant, je ne trouve pas ce paquet dans ma logithèques ni dans le dépôts de Ubuntu.
J'ai donc visité leur site mais lors de l'installation, on me signale qu'un signal survient avec aircrack.
Avez vous donc une idée de la procédure pour installer airoscript ?

Merci beaucoup.

#1 Re : -1 »  Installation de airoscript sur ubuntu 12.04 » Le 20/10/2012, à 09:53

Detah-Pixel
Réponses : 3

je vais me permettre un petit UP svp

#2 -1 »  Ecrire des PDF en console » Le 04/10/2012, à 19:48

Detah-Pixel
Réponses : 3

Bonsoir,

J'aimerais savoir si il existe, en console, un moyen (une commande) afin de transcrire du texte dans un document au format pdf.

Mon but est en fait de retranscrire via un shell script des notes, dans un document au format sus-cité et ce via le crontab.

Merci beaucoup à vous.

Death-Pixel.

#3 -1 »  Se connecter sur un FTP en crontab » Le 26/09/2012, à 15:42

Detah-Pixel
Réponses : 2

Bonjour,

Je vous écris pour demander votre aide concernant un certain problème que je m'empresse de vous expliquer.

Je me vois dans l'obligation de très régulièrement récupérer des fichiers en FTP sur un serveur.
J'ai donc eu l'idée d'automatiser cette tâche via un shell script dans le crontab.

Voici donc mes interrogations:
1. Comment (avec quel commande) puis-je m'authentifier (nom utilisateur mot de passe) automatiquement ?
2. Comment (toujours automatiquement) puis-je entrer des commandes sur ce serveur FTP (Linux) ?

PS: Une doc me propose de me diriger vers lftp mais je n'en connais pas l'utilisation

Merci beaucoup.
Bien à vous.

#4 Re : -1 »  Se connecter sur un FTP en crontab » Le 27/09/2012, à 08:32

Detah-Pixel
Réponses : 2

J'investiguerai la dessus.
Merci beaucoup.

#5 -1 »  Backup incrémental avec tar » Le 24/09/2012, à 08:31

Detah-Pixel
Réponses : 6

Bonjour à tous et à toute,

Je vous écris une fois de plus pour poser une colle qui me bloque dans mon travail depuis 2 bon jours.

Je m'explique. Etant étudiant, j'effectue régulièrement des opérations de backup et compression de mes données avec la commande:

tar -jcvf archive.tar.bz2 Dossier_a_backuper

Cependant, le nombre de fichier augmentant, je m'intéresse de plus en plus au backup incrémental avec tar...
Quelqu'un aurait-il une idée pour ajouter les fichiers récemment  créé ou modifié du dossier Dossier_a_backuper dans archive.tar.bz2 sans devoir refaire complètement la compression de ce dossier ?
Mon but étant évidement de gagner un maximum de temps.

Merci beaucoup.

#6 Re : -1 »  Backup incrémental avec tar » Le 24/09/2012, à 16:29

Detah-Pixel
Réponses : 6

Je viens d'essayer ce que tu me dis de faire c'est à dire:

tar -juvf archive.tar.bz2 Dossier

Et j'ai le résultat suivant:

Une archive compressée ne peut pas être mise à jour.

Peut-être ma combinaison de paramètres ne fonctionne t'elle pas ?

#7 Re : -1 »  Backup incrémental avec tar » Le 26/09/2012, à 15:36

Detah-Pixel
Réponses : 6

Mon but étant de gagner du temps, décompresser pour recompresser n'est-il pas au contraire une perte de temps ?
Ne ferais-je pas mieux de faire :

rm archive.tar.bz2
tar -jcvf archive.tar.bz2 Dossier

#8 Re : -1 »  Backup incrémental avec tar » Le 27/09/2012, à 08:29

Detah-Pixel
Réponses : 6

Merci :-)

#9 -1 »  Rhythmbox et synchronisation apple » Le 19/08/2012, à 08:32

Detah-Pixel
Réponses : 10

Bonjour,
Après un ras le bol total d'un certain système d'exploitation payant et connu de tous, je suis passé sous Linux (Ubuntu) définitivement.
Cependant,disposant d'un Ipod Touch 4g sous IOS 5.1.1, j'aimerai synchroniser des musiques sur celui-ci.
En effet, et pour l'histoire, après un accord machiavélique entre Windows et Itunes, ils ont décidés de supprimer mes 2000 musiques de mon Ipod et de refuser de les y remettre.
La crise de nerfs passée, j'ai décidé de synchroniser mon Ipod avec Rhythmbox.
J'ai en effet lu que cela pouvait ce faire et que cela fonctionne très bien.
Donc, après une loooooooooooooooongue synchronisation, je me suis précipité dans mes musiques pour remarquer que ... elles n'étaient pas là et/ou que mon Ipod ne les reconnait pas.
L'un d'entre vous aurait-il une idée ou une piste de recherche pour moi ?
Ou bien est-ce que Rhythmbox (que j'apprécie tant) à lié un pacte avec les entités démoniaques sus-citées pour m'empêcher de profiter de mes musiques ? tongue
Ou alors suis-je complètement paranoïaque ? roll
Merci beaucoup
Laurent

#10 Re : -1 »  Rhythmbox et synchronisation apple » Le 19/08/2012, à 08:50

Detah-Pixel
Réponses : 10

Il me semble déjà avoir lu cette rubrique.
Ma question est pourquoi la synchronisation n à t elle pas fonctionné ?

#11 Re : -1 »  Rhythmbox et synchronisation apple » Le 20/08/2012, à 10:03

Detah-Pixel
Réponses : 10

Je suis désolé de faire le lourd mais quelqu'un a t il une idée?
Ce problème est vraiment handicapant...

#12 Re : -1 »  Rhythmbox et synchronisation apple » Le 20/08/2012, à 14:46

Detah-Pixel
Réponses : 10

Hello,
Pour ma part, la synchronisation fonctionne c'est après que ça plante.
L'ipod ne voit pas les fichiers qui ont été insérés.
Quand tu parles de vérifier si j'ai des .wma parles-tu dans mes fichier (

find -name"*.wma"

) ou à la main dans la bibli de RhythmBox ?

#13 Re : -1 »  Rhythmbox et synchronisation apple » Le 20/08/2012, à 15:04

Detah-Pixel
Réponses : 10

Je viens d'essayer avec Banshee et rien...

#14 Re : -1 »  Rhythmbox et synchronisation apple » Le 07/09/2012, à 13:31

Detah-Pixel
Réponses : 10

Bon je reviens dans ce sujet pour le signaler comme toujours non résolu.
Cependant il peut être fermé.
Merci beaucoup
Death-Pixel

#15 -1 »  pas d'affichage des fenêtres avec cron » Le 07/09/2012, à 13:14

Detah-Pixel
Réponses : 7

Bonjour,
Je me permet de vous écrire car, dans le but d'un script d'affichage du niveau de la batterie j'utilise le code suivant:

  
  1 #!/bin/bash
  2 complet=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'`
  3 hour=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'|cut     -d : -f 1`
  4 min=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'|cut     -d : -f 2`
  5 date >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  6 echo $complet >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  7 echo "" >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  8 if [ $hour = 00 ] && [ $min -le 50 ]
  9 then
 10         zenity --info --title="Niveau de batterie" --text="Il reste moins de 50     minutes de batterie"
 11 fi
 12 if [ $hour = 00 ] && [ $min = 20 ]
 13 then
 14         zenity --info --title="Niveau de batterie" --text="Il reste 20 minutes d    e batterie"
 15 fi
 16 
 17 if [ $hour = 00 ] && [ $min = 30 ]
 18 then
 19         zenity --info --title="Niveau de batterie" --text="Il reste 30 minutes d    e batterie"
 20 fi
 21 if [ $hour = 01 ] && [ $min = 00 ]
 22 then
 23         zenity --info --title="Niveau de batterie" --text="Il reste une heure de     batterie"
 24 fi
 25 
 26 if [ $hour = 02 ] && [ $min = 00 ]
 27 then
 28         zenity --info --title="Niveau de batterie" --text="Il reste 2 heures de     batterie"
 29 fi
 30 
 31 if [ $hour = 03 ] && [ $min = 00 ]
"battery.sh" [lecture-seule] 39L, 1432C                           1,1          Haut

La commande info.sh est une code home made qui me donne quelques informations dont la batterie et j'extrais ces informations avec sed, cut, ...
dans les lignes 2,3 et 4. Ce script exécuté dans la console fonctionne parfaitement et m'ouvre en effet (quand la nécessité s'en fait ressentir) des fenêtres l'indiquant le temps restant de batterie.
Le problème est que ce script, je demande au crontab de l'exécuter tout les quarts d'heure et, dans ce cas là, aucune fenêtre ne s'ouvre.
Hors, le sript s'effectue car je le vois dans le fichier de log que je remplis en ligne 6 et 7.
Pouvez-vous m'aider ?

Death-Pixel

edit modo : titre plus explicite

#16 Re : -1 »  pas d'affichage des fenêtres avec cron » Le 07/09/2012, à 13:29

Detah-Pixel
Réponses : 7

J'avoue que je ne sais pas cela. Je pense que c'est mon user. Cependant, ce script ne demande aucun droit particulier et est placé dans /bin ainsi que info.sh. Tout le monde peut donc l'exécuter non ?

#17 Re : -1 »  pas d'affichage des fenêtres avec cron » Le 07/09/2012, à 14:36

Detah-Pixel
Réponses : 7

Au risque de paraître ennuyant, que veux tu dire par non ?
Je sais et j'ai la preuve que la commande s'exécute.
Le problème est que je ne vois aucune fenêtre alors qu'il devrait y en avoir une. Pourquoi ?
Je ne comprends pas le rapport avec les droits d'administration...
Merci beaucoup.

#18 Re : -1 »  pas d'affichage des fenêtres avec cron » Le 11/09/2012, à 14:37

Detah-Pixel
Réponses : 7

Merci beaucoup Nesthib big_smile

#19 -1 »  Transparence de la console dans Awesome » Le 07/09/2012, à 14:30

Detah-Pixel
Réponses : 2

Bonjour, je me permet de vous écrire (encore) pour vous poser une (autre) question concernant awesome.
J'aimerai arriver à activer la transparence de la console.
Dois-je changer de console ?
Si oui laquelle prendre et quels sont les modifications à faire pour que cela fonctionne ?
Merci beaucoup.

#21 -1 »  Widget dans Awesome » Le 07/09/2012, à 13:26

Detah-Pixel
Réponses : 3

Bonjour à tous,
Je me permet de vous écrire car je suis un peu bloqué au niveau de awesome.
Je me permet pour commencer de vous mettre mon fichier rc.lua :

  
1 -- Standard awesome library
  2 require("awful")
  3 require("awful.autofocus")
  4 require("awful.rules")
  5 -- Theme handling library
  6 require("beautiful")
  7 -- Notification library
  8 require("naughty")
  8' require("precious.battery")
  9 
 10 -- Load Debian menu entries
 11 require("debian.menu")
 12 -- {{{ Error handling
 13 -- Check if awesome encountered an error during startup and fell back to
 14 -- another config (This code will only ever execute for the fallback config)
 15 if awesome.startup_errors then
 16     naughty.notify({ preset = naughty.config.presets.critical,
 17                      title = "Oops, there were errors during startup!",
 18                      text = awesome.startup_errors })
 19 end
 20 
 21 -- Handle runtime errors after startup
 22 do
 23     local in_error = false
 24     awesome.add_signal("debug::error", function (err)
 25         -- Make sure we don't go into an endless error loop
 26         if in_error then return end
 27         in_error = true
 28 
 29         naughty.notify({ preset = naughty.config.presets.critical,
 30                          title = "Oops, an error happened!",
 31                          text = err })
 32         in_error = false
 33     end)
 34 end
 35 -- }}}
 36 
 37 -- {{{ Variable definitions
 38 -- Themes define colours, icons, and wallpapers
 39 --beautiful.init("/usr/share/awesome/themes/default/theme.lua")
 40 beautiful.init("/home/laurent/.config/awesome/themes/default/theme.lua")
"rc.lua" 379L, 15676C                                             1,1          Haut

Voila, comme je le déclare en ligne 8'(j'ai ajouté cette ligne à la main à la seconde même :-)) j'aimerai utiliser le widget de batterie présenté ici : Widget Awesome. Cependant et après de multiple essais, je n'arrive pas à juste ajouter un affichage du niveau de la batterie à la gauche de l'heure (située elle même en haut à droite.)
Pouvez vous reprendre mon rc.lua et le modifier dans ce but ? Et si possible m'expliquer pour m'éclairer quelque peu et que je puisse sans aide extérieure continuer à modifier mon awesome ?
Merci beaucoup
Death-Pixel

#22 Re : -1 »  Widget dans Awesome » Le 07/09/2012, à 13:36

Detah-Pixel
Réponses : 3

Salut à toi, et je confirme dans mon crâne j'ai en effet quelques pixels mort ;-). D'où le pseudo :-).
Que veux tu dires par :"Essaye en un autre " ?
J'ai également lu pas mal de doc et de tuto mais aucun n'est vraiment clair sur le sujet et je dois dire que j'en ai quelques peu ras le bol de ne pas comprendre...
Merci encore.

PS: le code n'était pas complet. je le remet.

-- Standard awesome library
require("awful")
require("awful.autofocus")
require("awful.rules")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
require("precious.battery")

-- Load Debian menu entries
require("debian.menu")
-- {{{ Error handling
-- Check if awesome encountered an error during startup and fell back to
-- another config (This code will only ever execute for the fallback config)
if awesome.startup_errors then
    naughty.notify({ preset = naughty.config.presets.critical,
                     title = "Oops, there were errors during startup!",
                     text = awesome.startup_errors })
end

-- Handle runtime errors after startup
do
    local in_error = false
    awesome.add_signal("debug::error", function (err)
        -- Make sure we don't go into an endless error loop
        if in_error then return end
        in_error = true

        naughty.notify({ preset = naughty.config.presets.critical,
                         title = "Oops, an error happened!",
                         text = err })
        in_error = false
    end)
end
-- }}}

-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
--beautiful.init("/usr/share/awesome/themes/default/theme.lua")
beautiful.init("/home/laurent/.config/awesome/themes/default/theme.lua")

-- This is used later as the default terminal and editor to run.
terminal = "x-terminal-emulator"
editor = os.getenv("EDITOR") or "editor"
editor_cmd = terminal .. " -e " .. editor

-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"

-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
    awful.layout.suit.floating,
    awful.layout.suit.tile,
    awful.layout.suit.tile.left,
    awful.layout.suit.tile.bottom,
    awful.layout.suit.tile.top,
    awful.layout.suit.fair,
    awful.layout.suit.fair.horizontal,
    awful.layout.suit.spiral,
    awful.layout.suit.spiral.dwindle,
    awful.layout.suit.max,
    awful.layout.suit.max.fullscreen,
    awful.layout.suit.magnifier
}
-- }}}

-- {{{ Tags
-- Define a tag table which hold all screen tags.
tags = {}
for s = 1, screen.count() do
    -- Each screen has its own tag table.
    tags[s] = awful.tag({ "Principal", "Internet", "Musique","Python" ,"Shell","PHP", 7, 8, 9}, s, layouts[2])
end
-- }}}

-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
   { "manual", terminal .. " -e man awesome" },
   { "edit config", editor_cmd .. " " .. awesome.conffile },
   { "restart", awesome.restart },
   { "quit", awesome.quit }
}

mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                    { "Debian", debian.menu.Debian_menu.Debian },
                                    { "open terminal", terminal }
                                  }
                        })

mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
                                     menu = mymainmenu })
-- }}}

-- {{{ Wibox
-- Create a textclock widget
--mytextclock = awful.widget.textclock({ align = "right" })
os.setlocale("fr_FR.UTF-8") -- Français
mytextclock = awful.widget.textclock({ align = "right" }," %a %d %b  %H:%M ")
-- Create a systray
mysystray = widget({ type = "systray" })

-- Create a wibox for each screen and add it
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(
                    awful.button({ }, 1, awful.tag.viewonly),
                    awful.button({ modkey }, 1, awful.client.movetotag),
                    awful.button({ }, 3, awful.tag.viewtoggle),
                    awful.button({ modkey }, 3, awful.client.toggletag),
                    awful.button({ }, 4, awful.tag.viewnext),
                    awful.button({ }, 5, awful.tag.viewprev)
                    )
mytasklist = {}
mytasklist.buttons = awful.util.table.join(
                     awful.button({ }, 1, function (c)
                                              if c == client.focus then
                                                  c.minimized = true
                                              else
                                                  if not c:isvisible() then
                                                      awful.tag.viewonly(c:tags()[1])
                                                  end
                                                  -- This will also un-minimize
                                                  -- the client, if needed
                                                  client.focus = c
                                                  c:raise()
                                              end
                                          end),
                     awful.button({ }, 3, function ()
                                              if instance then
                                                  instance:hide()
                                                  instance = nil
                                              else
                                                  instance = awful.menu.clients({ width=250 })
                                              end
                                          end),
                     awful.button({ }, 4, function ()
                                              awful.client.focus.byidx(1)
                                              if client.focus then client.focus:raise() end
                                          end),
                     awful.button({ }, 5, function ()
                                              awful.client.focus.byidx(-1)
                                              if client.focus then client.focus:raise() end
                                          end))

for s = 1, screen.count() do
    -- Create a promptbox for each screen
    mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
    -- We need one layoutbox per screen.
    mylayoutbox[s] = awful.widget.layoutbox(s)
    mylayoutbox[s]:buttons(awful.util.table.join(
                           awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
                           awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
                           awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
                           awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
    -- Create a taglist widget
    mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)

    -- Create a tasklist widget
    mytasklist[s] = awful.widget.tasklist(function(c)
                                              return awful.widget.tasklist.label.currenttags(c, s)
                                          end, mytasklist.buttons)

    -- Create the wibox
    mywibox[s] = awful.wibox({ position = "top", screen = s })
    -- Add widgets to the wibox - order matters
    mywibox[s].widgets = {
        {
            mylauncher,
            mytaglist[s],
            mypromptbox[s],
            layout = awful.widget.layout.horizontal.leftright
        },
        mylayoutbox[s],
        mytextclock,
        s == 1 and mysystray or nil,
        mytasklist[s],
        layout = awful.widget.layout.horizontal.rightleft
    }
end
-- }}}

-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
    awful.button({ }, 3, function () mymainmenu:toggle() end),
    awful.button({ }, 4, awful.tag.viewnext),
    awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}

-- {{{ Key bindings
globalkeys = awful.util.table.join(
    awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
    awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
    awful.key({ modkey,           }, "Escape", awful.tag.history.restore),

    awful.key({ modkey,           }, "j",
        function ()
            awful.client.focus.byidx( 1)
            if client.focus then client.focus:raise() end
        end),
    awful.key({ modkey,           }, "k",
        function ()
            awful.client.focus.byidx(-1)
            if client.focus then client.focus:raise() end
        end),
    awful.key({ modkey,           }, "w", function () mymainmenu:show({keygrabber=true}) end),

    -- Layout manipulation
    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end),
    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end),
    awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
    awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
    awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
    awful.key({ modkey,           }, "Tab",
        function ()
            awful.client.focus.history.previous()
            if client.focus then
                client.focus:raise()
            end
        end),

    -- Standard program
    awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
    awful.key({ modkey, "Control" }, "r", awesome.restart),
    awful.key({ modkey, "Shift"   }, "q", awesome.quit),

    awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)    end),
    awful.key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)    end),
    awful.key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1)      end),
    awful.key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1)      end),
    awful.key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1)         end),
    awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1)         end),
    awful.key({ modkey,           }, "space", function () awful.layout.inc(layouts,  1) end),
    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(layouts, -1) end),

    awful.key({ modkey, "Control" }, "n", awful.client.restore),

    -- Prompt
    awful.key({ modkey },            "r",     function () mypromptbox[mouse.screen]:run() end),

    awful.key({ modkey }, "x",
              function ()
                  awful.prompt.run({ prompt = "Run Lua code: " },
                  mypromptbox[mouse.screen].widget,
                  awful.util.eval, nil,
                  awful.util.getdir("cache") .. "/history_eval")
              end)
)

clientkeys = awful.util.table.join(
    awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
    awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end),
    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
    awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
    awful.key({ modkey, "Shift"   }, "r",      function (c) c:redraw()                       end),
    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
    awful.key({ modkey,           }, "n",
        function (c)
            -- The client currently has the input focus, so it cannot be
            -- minimized, since minimized clients can't have the focus.
            c.minimized = true
        end),
    awful.key({ modkey,           }, "m",
        function (c)
            c.maximized_horizontal = not c.maximized_horizontal
            c.maximized_vertical   = not c.maximized_vertical
        end)
)

-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screen.count() do
   keynumber = math.min(9, math.max(#tags[s], keynumber));
end

-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, keynumber do
    globalkeys = awful.util.table.join(globalkeys,
        awful.key({ modkey }, "#" .. i + 9,
                  function ()
                        local screen = mouse.screen
                        if tags[screen][i] then
                            awful.tag.viewonly(tags[screen][i])
                        end
                  end),
        awful.key({ modkey, "Control" }, "#" .. i + 9,
                  function ()
                      local screen = mouse.screen
                      if tags[screen][i] then
                          awful.tag.viewtoggle(tags[screen][i])
                      end
                  end),
        awful.key({ modkey, "Shift" }, "#" .. i + 9,
                  function ()
                      if client.focus and tags[client.focus.screen][i] then
                          awful.client.movetotag(tags[client.focus.screen][i])
                      end
                  end),
        awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
                  function ()
                      if client.focus and tags[client.focus.screen][i] then
                          awful.client.toggletag(tags[client.focus.screen][i])
                      end
                  end))
end

clientbuttons = awful.util.table.join(
    awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
    awful.button({ modkey }, 1, awful.mouse.client.move),
    awful.button({ modkey }, 3, awful.mouse.client.resize))

-- Set keys
root.keys(globalkeys)
-- }}}

-- {{{ Rules
awful.rules.rules = {
    -- All clients will match this rule.
    { rule = { },
      properties = { border_width = beautiful.border_width,
                     border_color = beautiful.border_normal,
                     focus = true,
                     keys = clientkeys,
                     buttons = clientbuttons } },
    { rule = { class = "MPlayer" },
      properties = { floating = true } },
    { rule = { class = "pinentry" },
      properties = { floating = true } },
    { rule = { class = "gimp" },
      properties = { floating = true } },
    -- Set Firefox to always map on tags number 2 of screen 1.
    -- { rule = { class = "Firefox" },
    --   properties = { tag = tags[1][2] } },
}
-- }}}

-- {{{ Signals
-- Signal function to execute when a new client appears.
client.add_signal("manage", function (c, startup)
    -- Add a titlebar
    -- awful.titlebar.add(c, { modkey = modkey })

    -- Enable sloppy focus
    c:add_signal("mouse::enter", function(c)
        if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
            and awful.client.focus.filter(c) then
            client.focus = c
        end
    end)

    if not startup then
        -- Set the windows at the slave,
        -- i.e. put it at the end of others instead of setting it master.
        -- awful.client.setslave(c)

        -- Put windows in a smart way, only if they does not set an initial position.
        if not c.size_hints.user_position and not c.size_hints.program_position then
            awful.placement.no_overlap(c)
            awful.placement.no_offscreen(c)
        end
    end
end)

client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
os.execute("dropbox start")