#1 Le 27/03/2009, à 07:17
- Guizmo.7
awesome : widgets info système
Bonjour,
Je voudrais montrer sur mon bureau des petites barres symbolisant la charge processeur, la ram utilisé et le réseau utilisé.
C'est pourquoi je voudrais récupérer avec une simple commande le taux de processeur utilisé. Ensuite je voudrais aussi récupéré la ram puis le réseau.
Pour cela j'ai cherché un peu sur internet et dans /proc/acpi mais je n'ai rien trouvé de satisfaisant.
Savez-vous où trouvez ces informations ?
Merci d'avance.
Dernière modification par Guizmo.7 (Le 27/03/2009, à 19:26)
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#2 Le 27/03/2009, à 08:19
- herberts
Re : awesome : widgets info système
Bonjour, pourquoi ne pas utiliser conky ?
Hors ligne
#4 Le 27/03/2009, à 08:50
- herberts
Re : awesome : widgets info système
Sinon pour gnome et xfce, tu as des applets pour le tableau de bord qui présentent ces infos, et sous kde il me semble qu'il existe des plasmoïds pour ça également.
Hors ligne
#5 Le 27/03/2009, à 16:47
- Guizmo.7
Re : awesome : widgets info système
Merci de vos réponses
Je souhaite le récupérer et le traiter moi même car j'utilise awesome et je voudrais faire un peu comme cette capture (voir la barre de status du haut) mais pour le proc, ram et réseau.
J'ai récupéré la ram avec free et le proc avec
top -b -n 1
mais c'est lourd pour pas grand chose …
D'autres idées ?
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#6 Le 27/03/2009, à 18:05
- herberts
Re : awesome : widgets info système
Ben justement, sur cette capture les infos dans la barre du haut ce sont des applets à mon avis. Tu utilises quoi comme panel ?
Hors ligne
#7 Le 27/03/2009, à 18:26
- Guizmo.7
Re : awesome : widgets info système
Comme panel ?
Quel panel ? je ne sais pas ce que tu entends par panel.
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#8 Le 27/03/2009, à 18:26
- herberts
Re : awesome : widgets info système
ben la barre où tu as le menu, la zone de notification, la liste des fenêtres... Mais peut être que tu n'en utilise pas.
Edit : je viens de jeter un oeil à la doc d'awesome : pour toi, ça s'appelle la barre de statut est c'est intégré au WM. Les applets correspondent aux widgets pour awesome apparemment. Il suffit maintenant de trouver les bons widgets.
Hors ligne
#9 Le 27/03/2009, à 18:56
- Guizmo.7
Re : awesome : widgets info système
Mais je n'ai jamais trouvé un widget tout fait.
Je les ai toujours fait moi même. C'est pour ça que je voulais en faire un pour le proc.
En fait un widget sous awesome c'est juste ça dans la conf :
textbox cpuText {
text = "cpu : "
text_align = "left"
align = "left"
width = "0" # 0 pour automatique
}
Et après tu lui envoies le text a afficher avec echo "tralalala" | awesome-client.
Donc il me faut le texte : en l'occurence le réseau occupé et si possible le proc et la ram.
Y'a pas un truc avec acpi-quelquechose ?
EDIT : scuse tu réponds trop vite pour moi :s
Dernière modification par Guizmo.7 (Le 27/03/2009, à 18:58)
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#10 Le 27/03/2009, à 19:12
- herberts
Re : awesome : widgets info système
ok, je comprend mieux la problématique maintenant. Je vais voir si je trouve des commandes qui pourraient te convenir.
Sinon, tu aurais peut être plus de réponse dans la partie "Openbox, Windowmaker, Enlightenment et autres..." non, qu'en penses tu. Car tu y trouverais peut être d'autres utilisateurs d'awesome, et vouloir afficher des infos systèmes dans la barre des tâches est une problématique assez courante.
Hors ligne
#11 Le 27/03/2009, à 19:23
- Guizmo.7
Re : awesome : widgets info système
Merci
faut que je re précise dans le premier message ?
Un pas après l'autre, la petite créature verte avance !
Hors ligne
#12 Le 27/03/2009, à 19:24
- herberts
Re : awesome : widgets info système
oui, change peut être le titre en "awesome : widgets info système" ou un truc du genre, et précise effectivement dans ton premier message que tu cherches les commandes pour ces widgets.
Hors ligne
#13 Le 04/09/2010, à 11:00
- Rolinh
Re : awesome : widgets info système
Salut,
tu as abandonné?
Pour ma part, je peaufine encore et toujours mon rc.lua. Mais pour les infos systèmes, j'ai écrit plusieurs widgets (dès que j'ai finis mes exas, je met à jours la doc sur awesome).
Il y a donc:
- charge CPU
- temperature CPU
- RAM utilisée
- % de la RAM utilisée
- état de la batterie
- statut de la batterie
- applet volume
Tous ces widgets changent de couleurs en fonction des infos qu'ils fournissent. Par exemple, si le CPU montent à 60 degré, il sera jaune et rouge au-dessus de 75 etc pour les autres widget.
Le widget du son permet de monter/descendre le volume en passant la souris au-dessus et scrollant (il affiche le % du volume et devient rouge avec un M quand on le mute). Et sinon, si tu as des touches multimédia pour le son, j'ai rajouté dans le rc.lua ce qu'il faut pour qu'elles fonctionnent.
Bon, il me reste encore plusieurs choses à configurer (notamment widget pour mocp) mais tu peux peut-être t'en inspirer
Voilà à quoi cela ressemble:
Et voilà le rc.lua actuel (qui contient donc le code des widgets).
-- Standard awesome library
require("awful")
require("awful.autofocus")
require("awful.rules")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
-- Sound Widget
cardid = 0
channel = "Master"
function volume (mode, widget)
if mode == "update" then
local fd = io.popen("amixer -c " .. cardid .. " -- sget " .. channel)
local status = fd:read("*all")
fd:close()
local volume = string.match(status, "(%d?%d?%d)%%")
volume = string.format("% 3d", volume)
status = string.match(status, "%[(o[^%]]*)%]")
if string.find(status, "on", 1, true) then
volume = "| Vol: <span color='green'>" .. volume .. "</span>% "
else
volume = "| Vol: <span color='red'>" .. volume .. "</span>M "
end
widget.text = volume
elseif mode == "up" then
io.popen("amixer -q -c " .. cardid .. " sset " .. channel .. " 5%+"):read("*all")
volume("update", widget)
elseif mode == "down" then
io.popen("amixer -q -c " .. cardid .. " sset " .. channel .. " 5%-"):read("*all")
volume("update", widget)
else
io.popen("amixer -c " .. cardid .. " sset " .. channel .. " toggle"):read("*all")
volume("update", widget)
end
end
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/usr/share/awesome/themes/shertheme/theme.lua")
-- This is used later as the default terminal and editor to run.
--terminal = "xterm"
terminal = "urxvtc"
editor = os.getenv("EDITOR") or "vim"
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 = {
names = { "sec", "main", "dev", "web", "im", "mus" },
layout = { layouts[2], layouts[2], layouts[2], layouts[1], layouts[2], layouts[1]}
}
for s = 1, screen.count() do
tags[s] = awful.tag(tags.names, s, tags.layout)
end
--for s = 1, screen.count() do
-- Each screen has its own tag table.
-- tags[s] = awful.tag({ "sec", "main","dev", "web","chat", "music" }, s, layouts[1])
--end
-- }}}
-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal },
}
})
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- }}}
-- {{{ Wibox
-- Create Volume Control Widget
tb_volume = widget({ type = "textbox", name = "tb_volume", align = "right" })
tb_volume:buttons({
button({ }, 4, function () volume("up", tb_volume) end),
button({ }, 5, function () volume("down", tb_volume) end),
button({ }, 1, function () volume("mute", tb_volume) end)
})
volume("update", tb_volume)
-- refresh the Volume Control Widget
awful.hooks.timer.register(10, function () volume("update", tb_volume) end)
-- Create a CPU widget
jiffies = {}
function activecpu()
local s, str
for line in io.lines("/proc/stat") do
local cpu,newjiffies = string.match(line, "(cpu)\ +(%d+)")
if cpu and newjiffies then
if not jiffies[cpu] then
jiffies[cpu] = newjiffies
end
-- The string.format prevents your task list from jumping around
-- When CPU usage goes above/below 10%
str = string.format("%02d", newjiffies-jiffies[cpu])
if str < "31" then
str = '<span color="green">' .. str .. '</span>'
elseif str < "51" then
str = '<span color="yellow">' .. str .. '</span>'
elseif str < "70" then
str = '<span color="orange">' .. str .. '</span>'
else
str = '<span color="red">' .. str .. '</span>'
end
s = '| CPU: ' .. str .. '% '
jiffies[cpu] = newjiffies
end
end
return s
end
cpuinfo = widget({ type = "textbox", name = "cpuinfo" })
-- register the hook to update the display
awful.hooks.timer.register(1, function() cpuinfo.text = activecpu() end)
-- Create CPU Temp Widget
function activecputemp()
local temp
for line in io.lines("/proc/acpi/thermal_zone/THM/temperature") do
temp = string.match(line, "temperature:\ +(%d+)")
end
if temp < "46" then
temp = '<span color="turquoise">' .. temp .. '</span>'
elseif temp < "61" then
temp = '<span color="yellow">' .. temp .. '</span>'
elseif temp < "76" then
temp = '<span color="orange">' .. temp .. '</span>'
else
temp = '<span color="red">' .. temp .. '</span>'
end
return temp
end
cputemp = widget({ type = "textbox" , name = "cputemp" })
-- Assign a hook to update temperature
awful.hooks.timer.register(1, function() cputemp.text = "@ " .. activecputemp() .. "°C | RAM: " end)
-- Create a battery status Widget
-- get the full capacity of the battery
for line in io.lines("/proc/acpi/battery/BAT0/info") do
bat_stat = string.match(line, "last full capacity:\ +(%d+)")
if bat_stat then
-- define stat_tot for reuse later for battery status
stat_tot = bat_stat
end
end
function activebat()
local stat_actu, res
for line in io.lines("/proc/acpi/battery/BAT0/state") do
local status = string.match(line, "remaining capacity:\ +(%d+)")
local state = string.match(line, "charging state:\ +(%a+)")
if status then
stat_actu = status
end
if state then
stat_bat = state
end
end
res = string.format("%.2f", (stat_actu/stat_tot) * 100);
if ((stat_actu/stat_tot) * 100) < 10 then
res = '<span color="red">' .. res .. '</span>'
elseif ((stat_actu/stat_tot) * 100) < 20 then
res = '<span color="orange">' .. res .. '</span>'
elseif ((stat_actu/stat_tot) * 100) < 30 then
res = '<span color="yellow">' .. res .. '</span>'
else
res = '<span color="green">' .. res .. '</span>'
end
res = res .. '% ' .. stat_bat
return res
end
batinfo = widget({ type = "textbox" , name = "batinfo" })
-- Assign a hook to update info
awful.hooks.timer.register(1, function() batinfo.text = "BAT: " .. activebat() .. " |" end)
-- Create a RAM widget giving the MB used by the RAM
-- declare memtot for reuse below
memtot = 2056100
function activeram()
local active, ramusg, res
for line in io.lines("/proc/meminfo") do
for key , value in string.gmatch(line, "(%w+):\ +(%d+).+") do
if key == "Active" then active = tonumber(value)
end
end
end
ramusg = (active/memtot)*100
res = string.format("%.2f", (active/1024))
if ramusg < 51 then
res = '<span color="green">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)'
elseif ramusg < 71 then
res = '<span color="yellow">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)'
elseif ramusg < 86 then
res = '<span color="orange">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)'
else
res = '<span color="red">' .. res .. '</span>MB (<span color="green">' .. string.format("%.2f",ramusg) .. '</span>%)'
end
return res
end
meminfo = widget({ type = "textbox", name = "meminfo" })
-- Assign a hook to update info
awful.hooks.timer.register(1, function() meminfo.text = activeram() .. " | " end)
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" })
-- 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 not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
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],
s == 1 and mysystray or nil,
tb_volume,
mytextclock,
batinfo,
meminfo,
cputemp,
cpuinfo,
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(true) end),
-- Multimedia keys
awful.key({ }, "XF86AudioRaiseVolume", function () volume("up", tb_volume) end),
awful.key({ }, "XF86AudioLowerVolume", function () volume("down", tb_volume) end),
awful.key({ }, "XF86AudioMute", function () volume("mute", tb_volume) 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),
-- 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, }, "n", function (c) c.minimized = not c.minimized end),
awful.key({ modkey, }, "m",
function (c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end)
)
-- Keybindings for the Volume Keys
-- 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 = clientkeysl,
floating = false,
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)
-- }}}
-- Launch the wicd applet
awful.util.spawn('wicd-client')
Hors ligne
#14 Le 04/09/2010, à 15:18
- Rolinh
Re : awesome : widgets info système
Je viens de me faire un widget de contrôle/affichage pour mocp
Et un widget de notification pour gmail!
(faudra vraiment que je mette à jours la doc sur awesome)
Hors ligne