I also have this non-root user/wifi-radar problem. If I open wifi-radar through vwifi-connect as non-root user, then I get asked for root password. The etc/sudoers file explicitly has:
Cmnd_Alias WIFI=/sbin/iwconfig,/sbin/vwifi2,/sbin/modprobe,/usr/sbin/wifi-radar,/sbin/dhcpcd,/sbin/ifconfig
# anyone in the group 'users' can run some programs without a password
%users ALL=NOPASSWD:WIFI
Which should've taken care of it, but it doesn't. Running wifi-radar as regular user from console gives this error:
mute:$ wifi-radar
Traceback (most recent call last):
File "/usr/sbin/wifi-radar", line 1619, in ?
(DHCP_COMMAND, DHCP_PIDFILE, DHCP_ARGS, DHCP_KILL_COMMAND) = configure_dhcp_client()
File "/usr/sbin/wifi-radar", line 193, in configure_dhcp_client
return (DHCP_COMMAND, DHCP_PIDFILE, DHCP_ARGS, DHCP_KILL_COMMAND)
UnboundLocalError: local variable 'DHCP_PIDFILE' referenced before assignment
This error doesn't appear if run as root (in console). So, still a permissions problem on some miscellaneous file /somewhere/. Following the error message, the most relevant line is the return of that configure_dhcp_client function, which is here in its entirety:
# Configure dhcp client commands
# Returns a 4-tuple of strings: (DHCP_COMMAND, DHCP_PIDFILE, DHCP_ARGS, DHCP_KILL_COMMAND)
def configure_dhcp_client():
global POSSIBLE_DHCP_CLIENTS, DHCP_TIMEOUT, HOSTNAME
global INTERFACE
for i in POSSIBLE_DHCP_CLIENTS.split():
DHCP_COMMAND = which( i )
if DHCP_COMMAND:
if i == "dhcpcd":
DHCP_PIDFILE = "/var/run/dhcpcd-%s.pid" % INTERFACE
#
# See "man dhcpcd-bin" or "man dhcpcd" for additional options.
#
# Additional options can be set in the dhcpcd config file, which
# often lives here: "/etc/dhcpc/config".
#
DHCP_ARGS = "-h %s -t %s" % (HOSTNAME, DHCP_TIMEOUT)
DHCP_KILL_COMMAND = DHCP_COMMAND + " -k " + INTERFACE
break
elif (i == "dhclient") or (i == "dhclient3"):
#
# dhclient v2 or v3?
#
#f = os.popen( scan_command, "r" )
cmd = i + ' --version 2>&1'
if __debug__:
print "%s" % cmd
f = os.popen( cmd , 'r' )
s = f.read()
f.close()
if re.search('-V3\.', s):
#
# dhclient v3
#
# Usage: dhclient [-1dqr] [-nw] [-p <port>] [-s server]
# [-cf config-file] [-lf lease-file][-pf pid-file] [-e VAR=val]
# [-sf script-file] [interface]
#
DHCP_PIDFILE = "/var/run/dhclient.%s.pid" % INTERFACE
DHCP_ARGS = "-1 -pf " + DHCP_PIDFILE + " -lf /var/run/dhclient.%s.leases" % INTERFACE
DHCP_KILL_COMMAND = DHCP_COMMAND + " -r " + DHCP_ARGS
if __debug__:
print 'Using dhclient v3 syntax'
else:
#
# dhclient v2
#
# Usage: dhclient [-c] [-d] [-e] [-p <port>] [-lf lease-file]
# [-pf pidfile] [interface]
#
# Example: dhclient -e -pf /var/run/dhclient.eth1.pid -lf /var/run/dhclient.eth1.leases eth1
#
DHCP_PIDFILE = "/var/run/dhclient.%s.pid" % INTERFACE
DHCP_ARGS = "-e -pf " + DHCP_PIDFILE + " -lf /var/run/dhclient.%s.leases" % INTERFACE
# There is no dhcp kill command for dhclient v2. Let the "disconnect_interface" function handle it via pid.
DHCP_KILL_COMMAND = ""
if __debug__:
print 'Using dhclient v2 syntax'
break
elif i == "pump":
DHCP_PIDFILE = "" # no pid file for pump
DHCP_ARGS = "-i"
DHCP_KILL_COMMAND = DHCP_COMMAND + " -r " + DHCP_ARGS + " " + INTERFACE
break
return (DHCP_COMMAND, DHCP_PIDFILE, DHCP_ARGS, DHCP_KILL_COMMAND)
Blahblahblah. It defines the DHCP_PIDFILE like so:
DHCP_PIDFILE = "/var/run/dhcpcd-%s.pid" % INTERFACECheck permissions on this file...
File doesn't exist! Checked while running wifi-radar as root during non-root GUI session. And with wifi-radar off as root during non-root GUI session.
Am I missing something else?