diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2013-05-27 17:51:58 +0200 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2013-05-27 17:51:58 +0200 |
commit | fac688ec4be9892c2c5e64977e8d25cc0b3dd341 (patch) | |
tree | 6b32ef7d8a4cd76ad7bdaafaa8f439ad1f4ad6b3 /widgets/wifi.lua | |
parent | f7fdd909ee36570a64b8f91ce69dd1c51d42d054 (diff) | |
download | vicious-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
Diffstat (limited to 'widgets/wifi.lua')
-rw-r--r-- | widgets/wifi.lua | 29 |
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() |