aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2013-05-27 17:51:58 +0200
committerAdrian C. (anrxc) <anrxc@sysphere.org>2013-05-27 17:51:58 +0200
commitfac688ec4be9892c2c5e64977e8d25cc0b3dd341 (patch)
tree6b32ef7d8a4cd76ad7bdaafaa8f439ad1f4ad6b3
parentf7fdd909ee36570a64b8f91ce69dd1c51d42d054 (diff)
downloadvicious-legacy-fac688ec4be9892c2c5e64977e8d25cc0b3dd341.tar.xz
wifi: add support for /usr/bin binary path
Years ago iwconfig started its life in /sbin. Then some distributions moved it to /usr/bin. Then in 2012 some projects started pushing for deprecation of /usr/sbin and merging everything into /usr/bin. We now search paths including /usr/bin for the iwconfig binary. This is because sbin paths are not usually in non privileged user PATH, so we help io.popen locate the binary on the file-system. We do this search in the following way: - default to basename only, 'iwconfig' for the iwconfig variable - search paths one by one once and redeclare variable iwconfig with full path if binary is found in any - avoid searching paths on next execution if iwconfig variable already contains a path
-rw-r--r--widgets/wifi.lua29
1 files changed, 20 insertions, 9 deletions
diff --git a/widgets/wifi.lua b/widgets/wifi.lua
index 80dcdee..15666e5 100644
--- a/widgets/wifi.lua
+++ b/widgets/wifi.lua
@@ -9,11 +9,11 @@ local math = { ceil = math.ceil }
local setmetatable = setmetatable
local helpers = require("vicious.helpers")
local io = {
- open = io.open,
+ open = io.open,
popen = io.popen
}
local string = {
- find = string.find,
+ find = string.find,
match = string.match
}
-- }}}
@@ -24,6 +24,12 @@ local string = {
local wifi = {}
+-- {{{ Variable definitions
+local iwconfig = "iwconfig"
+local iwcpaths = { "/sbin", "/usr/sbin", "/usr/local/sbin", "/usr/bin" }
+-- }}}
+
+
-- {{{ Wireless widget type
local function worker(format, warg)
if not warg then return end
@@ -39,14 +45,19 @@ local function worker(format, warg)
["{sign}"] = 0
}
- -- Get data from iwconfig where available
- local iwconfig = "/sbin/iwconfig"
- local f = io.open(iwconfig, "rb")
- if not f then
- iwconfig = "/usr/sbin/iwconfig"
- else
- f:close()
+ -- Sbin paths aren't in user PATH, search for the binary
+ if iwconfig == "iwconfig" then
+ for _, p in ipairs(iwcpaths) do
+ local f = io.open(p .. "/iwconfig", "rb")
+ if f then
+ iwconfig = p .. "/iwconfig"
+ f:close()
+ break
+ end
+ end
end
+
+ -- Get data from iwconfig where available
local f = io.popen(iwconfig .." ".. warg .. " 2>&1")
local iw = f:read("*all")
f:close()