示例#1
0
 def get_status(interface):
     interface = iwlib.get_iwconfig(interface)
     if 'stats' not in interface:
         return None, None
     quality = interface['stats']['quality']
     essid = bytes(interface['ESSID']).decode()
     return essid, quality
 def step(self) -> Tuple[Optional[float], Optional[dict]]:
     try:
         data = iwlib.get_iwconfig(WIFI_DEVICE)
         data = {k: v.decode('utf-8') if isinstance(v, bytes) else v for k, v in data.items()}
         return time.time(), data
     except (Exception, OSError):
         return None, None
示例#3
0
文件: wlan.py 项目: 20after4/qtile
 def get_status(interface):
     interface = iwlib.get_iwconfig(interface)
     if 'stats' not in interface:
         return (None, None)
     quality = interface['stats']['quality']
     essid = bytes(interface['ESSID']).decode()
     return (essid, quality)
示例#4
0
文件: wlan.py 项目: tusqasi/qtile
def get_status(interface_name):
    interface = iwlib.get_iwconfig(interface_name)
    if "stats" not in interface:
        return None, None
    quality = interface["stats"]["quality"]
    essid = bytes(interface["ESSID"]).decode()
    return essid, quality
示例#5
0
def GetFreq(interface):
    try:
        import iwlib
        freq = iwlib.get_iwconfig(interface)['Frequency']
        slogger.debug("Main Wi-Fi interface (%s) in Freq: %s" %
                      (interface, freq))
        freq = ''.join(x for x in freq if x.isdigit())
        return freq
    except:
        return 0
def getDeviceType(devname, module=None):
    if devname in deviceTypes:
        return devname

    if module == "qeth":
        return QETH

    if module == "lcs":
        return LCS

    UNKNOWN = _('Unknown')

    mtype = UNKNOWN

    if not devname or devname == "":
        return mtype

    for i in __deviceTypeDict.keys():
        if re.search(i, devname):
            mtype = __deviceTypeDict[i]

    if mtype == UNKNOWN:
        try:
            # if still unknown, try to get a MAC address
            hwaddr = ethtool.get_hwaddr(devname)
            if hwaddr:
                mtype = ETHERNET
        except:
            pass

    if mtype == ETHERNET:
        try:
            import iwlib
            # test for wireless
            iwlib.get_iwconfig(devname)
            mtype = WIRELESS
        except:
            pass

    return mtype
示例#7
0
 def format_wifi(self, statuses: List[str], iface: str):
     interface = iwlib.get_iwconfig(iface)
     if "stats" not in interface:
         return
     quality = interface["stats"]["quality"]
     essid = bytes(interface["ESSID"]).decode()
     addresses = self.get_addresses(iface)
     if addresses:
         statuses.append(
             self.wifi_format.format(
                 essid=essid,
                 quality=quality / 70,
                 iface=iface,
                 addresses=",".join(addresses),
             )
         )
示例#8
0
    def on_wireless_config_page_prepare(self, druid_page, druid):
        if self.hwPage:
            self.device.Device = self.hwDruid.hw.Name
            self.device.Alias = None

        if self.device.Device != None:
            try:
                import iwlib
                info = iwlib.get_iwconfig(self.device.Device)
            except:
                pass
            else:
                if info.has_key("Mode"):
                    values = [r[1].lower() for r in self.modestore]
                    match_row = values.index(info["Mode"].lower())
                    self.xml.get_widget("modeCombo").set_active(match_row)

                if info.has_key("ESSID") and info["ESSID"] != "":
                    self.xml.get_widget("essidSpecButton").set_active(True)
                    self.xml.get_widget("essidEntry").set_sensitive(True)
                    self.xml.get_widget("essidEntry").set_text(info["ESSID"])
                else:
                    self.xml.get_widget("essidAutoButton").set_active(True)
                    self.xml.get_widget("essidEntry").set_sensitive(False)

                if info.has_key("Frequency") and info["Frequency"] < 1000:
                    self.xml.get_widget("channelCombo").set_text(
                        int(info["Frequency"]))

                if info.has_key("BitRate"):
                    self.xml.get_widget("rateEntry").set_text(
                        _(info["BitRate"]))

                if info.has_key("Key") and info["Key"] != "off":
                    self.xml.get_widget("keyEntry").set_text(info["Key"])

        self.on_modeChanged(self.xml.get_widget("modeCombo"))
        self.on_essidAutoButton_toggled(self.xml.get_widget("essidAutoButton"))

        self.xml.get_widget("modeCombo").connect("changed",
                                                 self.on_modeChanged)
示例#9
0
文件: config.py 项目: stefur/qtile
def notification(qtile: Qtile, request: str) -> None:
    """Used for mouse callbacks and keybinds to send notifications"""
    title: str = ""
    message: str = ""
    try:
        if request == "wifi":
            try:
                iface = iwlib.get_iwconfig(WIFI_INTERFACE)
                quality = iface["stats"]["quality"]
                quality = round((quality / 70) * 100)
                ssid = str(iface["ESSID"], encoding="utf-8")
                title = "Wifi"
                message = f"{ssid}\nSignal strength: {quality}%"
            except KeyError:
                title = "Disconnected"
                message = ""

        elif request == "date":
            today = datetime.today()
            todaysdate = today.strftime("%-d %B")
            weekday = today.strftime("%A")
            week = datetime.today().isocalendar()[1]
            title = f"{todaysdate} ({weekday})"
            message = f"Week {week}"

        elif request == "battery":
            if HAS_BATTERY:
                battery = psutil.sensors_battery()
                assert battery is not None, "Battery must be found by psutil"
                title = "Battery"
                message = f"{round(battery.percent)}%"
            else:
                return

        send_notification(title, message, timeout=2500, urgent=False)

    except Exception as err:
        logger.warning(f"Failed to send notification: {err}")
示例#10
0
    def poll(self):
        gws = netifaces.gateways()

        try:
            # Try to figure out if we're connected normally
            iface = gws['default'][netifaces.AF_INET][1]
        except (IndexError, KeyError):
            # We might be on a VPN
            for iface in netifaces.interfaces():
                if iface == 'lo':
                    continue
                adr = netifaces.ifaddresses(iface)
                try:
                    adr[netifaces.AF_INET][0]['peer']
                    return "\uf023"
                except (KeyError, IndexError):
                    pass
            return "\uf127"

        try:
            c = get_iwconfig(iface)
        except AttributeError:
            if iface[:3] == "usb":
                return "\uf287"
            else:
                return "\uf0e8"

        quality = c[b'stats'][b'quality']
        if quality >= 53:
            wifi_quality = 4
        elif quality >= 35:
            wifi_quality = 3
        elif quality >= 17:
            wifi_quality = 2
        else:
            wifi_quality = 1

        return "\uf1eb " + c[b'ESSID'].decode()
示例#11
0
文件: net.py 项目: mickdupreez/temp
def wireless(pl,
             segment_info,
             device=None,
             format='{quality:3.0%} at {essid}',
             short_format='{quality:3.0%}',
             format_down=None,
             auto_shrink=False):
    '''Returns the current connection quality.

    :param string device:
        the device to use. Per default this segment will try to be smart.
    :param string format:
        the output format
    :param string short_format:
        optional shorter format when the powerline needs to shrink segments
    :param string format_down:
        if set to any other value than ``None``, it will be shown when no wireless connection is
        present.
    :param bool auto_shrink:
        if set to true, this segment will use ``short_format`` per default,
        only using ``format`` when any message is present on the ``net.wireless``
        message channel.

    Highlight groups used: ``wireless:quality`` (gradient), ``wireless:down`` alternatively ``wireless:quality`` (gradient)

    Click values supplied: ``quality`` (int), ``essid`` (string)
    '''
    payload_name = 'net.wireless'

    if not device:
        for interface in os.listdir('/sys/class/net'):
            if interface.startswith('wl'):
                device = interface
                break

    try:
        import iwlib
    except ImportError:
        pl.info("Couldn't load iwlib")
        return None if not format_down else [{
            'contents':
            format_down.format(quality=0, essid=None, frequency=0),
            'highlight_groups':
            ['wireless:down', 'wireless:quality', 'quality_gradient'],
            'gradient_level':
            100,
            'payload_name':
            payload_name
        }]

    stats = iwlib.get_iwconfig(device)
    stats = {
        a.lower():
        stats[a].decode() if isinstance(stats[a], bytes) else stats[a]
        for a in stats
    }

    quality = 0
    essid = ''
    if 'essid' in stats:
        essid = stats['essid']
        if 'stats' in stats and 'quality' in stats['stats']:
            quality = stats['stats']['quality']

    if essid == '' or quality == 0:
        return None if not format_down else [{
            'contents':
            format_down.format(quality=0, essid=None, **stats),
            'highlight_groups':
            ['wireless:down', 'wireless:quality', 'quality_gradient'],
            'gradient_level':
            100,
            'payload_name':
            payload_name
        }]

    if not auto_shrink or ('payloads' in segment_info
                           and payload_name in segment_info['payloads']
                           and segment_info['payloads'][payload_name]):
        return [{
            'contents': format.format(quality=quality / 70, **stats),
            'highlight_groups': ['wireless:quality', 'quality_gradient'],
            'gradient_level': 100 * (70 - quality) / 70,
            'click_values': {
                'essid': essid,
                'quality': quality * 100 / 70
            },
            'payload_name': payload_name
        }]
    return [{
        'contents':
        short_format.format(quality=quality / 70, **stats),
        'highlight_groups': ['wireless:quality', 'quality_gradient'],
        'gradient_level':
        100 * (70 - quality) / 70,
        'click_values': {
            'essid': essid,
            'quality': quality * 100 / 70
        },
        'payload_name':
        payload_name,
        'truncate':
        lambda a, b, c: short_format.format(quality=quality / 70, **stats)
    }]
示例#12
0
def poll():
    config = iwlib.get_iwconfig(device)
    if config["Access Point"] == "00:00:00:00:00:00":
        # connection lost, set ssid again and hope for the best
        print("kicking")
        iwlib.iwconfig.set_essid(device, ssid)
示例#13
0
def usage():
    print("wi-watch.py [device] [SSID]")
    print("example: wi-watch.py wlan0 Home")


if len(sys.argv) != 3:
    usage()
    sys.exit(1)

device = sys.argv[1]
ssid = sys.argv[2]

# do it once to make sure the interface is right
try:
    iwlib.get_iwconfig(device)
except Exception as ex:
    print(ex)
    sys.exit(1)


def poll():
    config = iwlib.get_iwconfig(device)
    if config["Access Point"] == "00:00:00:00:00:00":
        # connection lost, set ssid again and hope for the best
        print("kicking")
        iwlib.iwconfig.set_essid(device, ssid)


while True:
    poll()
示例#14
0
 def get_status(interface):
     interface = iwlib.get_iwconfig(interface)
     quality = interface['stats']['quality']
     essid = bytes(interface['ESSID']).decode()
     return (essid, quality)