This wiki will shut down!
Please note that this wiki will be made read-only and eventually be taken offline.
A replacement is being discussed at https://github.com/awesomeWM/awesome-www/issues/7. We'd be happy to have more input for that discussion and volunteers who help us migrate the content of this wiki to its replacement.
Volume control and display
This tutorial will get you a small inconspicious square which fades in and out. When muted a red M will display:
volume_widget = widget({ type = "textbox", name = "tb_volume", align = "right" }) function update_volume(widget) local fd = io.popen("amixer sget Master") local status = fd:read("*all") fd:close() local volume = tonumber(string.match(status, "(%d?%d?%d)%%")) / 100 -- volume = string.format("% 3d", volume) status = string.match(status, "%[(o[^%]]*)%]") -- starting colour local sr, sg, sb = 0x3F, 0x3F, 0x3F -- ending colour local er, eg, eb = 0xDC, 0xDC, 0xCC local ir = math.floor(volume * (er - sr) + sr) local ig = math.floor(volume * (eg - sg) + sg) local ib = math.floor(volume * (eb - sb) + sb) interpol_colour = string.format("%.2x%.2x%.2x", ir, ig, ib) if string.find(status, "on", 1, true) then volume = " <span background='#" .. interpol_colour .. "'> </span>" else volume = " <span color='red' background='#" .. interpol_colour .. "'> M </span>" end widget.text = volume end update_volume(volume_widget) awful.hooks.timer.register(1, function () update_volume(volume_widget) end)
Save that file in ~/.config/awesome/volume.lua
In rc.lua at the top add:
require("volume")
Add the widget to your taskbar:
mywibox[s].widgets = { -- .... volume_widget, -- ... ^ don't forget to add the widget to your taskbar! }
Finally add the keyboard keys for controlling/muting your volume:
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 9%+") end), awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 9%-") end), awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer sset Master toggle") end),
Should work now.
If you are annoyed by the stopwatch/busy mouse cursor, give the second parameter a false value to disable the startup-notification.[1]
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 9%+", false) end), awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 9%-", false) end), awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Master toggle", false) end),
If you have pulse installed (Ubuntu users) change this line:
awful.util.spawn("amixer set Master toggle", false) end),
Too:
awful.util.spawn("amixer -q -D default sset Master toggle", false) end),
This works for Ubuntu 14.04
awful.util.spawn("amixer -D pulse set Master 1+ toggle", false) end),
For awesome 3.5.x
volume.lua
local wibox = require("wibox") local awful = require("awful") volume_widget = wibox.widget.textbox() volume_widget:set_align("right") function update_volume(widget) local fd = io.popen("amixer sget Master") local status = fd:read("*all") fd:close() local volume = tonumber(string.match(status, "(%d?%d?%d)%%")) / 100 -- volume = string.format("% 3d", volume) status = string.match(status, "%[(o[^%]]*)%]") -- starting colour local sr, sg, sb = 0x3F, 0x3F, 0x3F -- ending colour local er, eg, eb = 0xDC, 0xDC, 0xCC local ir = math.floor(volume * (er - sr) + sr) local ig = math.floor(volume * (eg - sg) + sg) local ib = math.floor(volume * (eb - sb) + sb) interpol_colour = string.format("%.2x%.2x%.2x", ir, ig, ib) if string.find(status, "on", 1, true) then volume = " <span background='#" .. interpol_colour .. "'> </span>" else volume = " <span color='red' background='#" .. interpol_colour .. "'> M </span>" end widget:set_markup(volume) end update_volume(volume_widget) mytimer = timer({ timeout = 1 }) mytimer:connect_signal("timeout", function () update_volume(volume_widget) end) mytimer:start()
rc.lua
At the top add
require("volume")
Before "right_layout:add(mytextclock)" paste
right_layout:add(volume_widget)
For a numeric volume display:
There are a few things to change to the code:
local wibox = require("wibox") local awful = require("awful") volume_widget = wibox.widget.textbox() volume_widget:set_align("right") function update_volume(widget) local fd = io.popen("amixer sget Master") local status = fd:read("*all") fd:close() -- local volume = tonumber(string.match(status, "(%d?%d?%d)%%")) / 100 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 -- For the volume numbers volume = volume .. "%" else -- For the mute button volume = volume .. "M" end widget:set_markup(volume) end update_volume(volume_widget) mytimer = timer({ timeout = 0.2 }) mytimer:connect_signal("timeout", function () update_volume(volume_widget) end) mytimer:start()
https://github.com/esn89/volumetextwidget