Source code for libqtile.widget.wlan

import iwlib

from libqtile.log_utils import logger
from libqtile.widget import base
from libqtile.widget.wlaniw import process_essid_and_quality


def get_status(interface_name: str):
    interface = iwlib.get_iwconfig(interface_name)
    if "stats" not in interface:
        return None, None

    quality = interface["stats"]["quality"]
    if not isinstance(quality, int):
        quality = None

    essid = bytes(interface["ESSID"]).decode()

    return essid, quality


[docs] class Wlan(base.InLoopPollText): """ Displays Wifi SSID and quality. Widget requirements: iwlib_. .. _iwlib: https://pypi.org/project/iwlib/ """ orientations = base.ORIENTATION_HORIZONTAL defaults = [ ("interface", "wlan0", "The interface to monitor"), ( "ethernet_interface", "eth0", "The ethernet interface to monitor, NOTE: If you do not have a wlan device in your system, ethernet functionality will not work, use the Net widget instead", ), ("update_interval", 1, "The update interval."), ("disconnected_message", "Disconnected", "String to show when the wlan is diconnected."), ( "ethernet_message_format", "eth", "String to show when ethernet is being used. For IP of ethernet interface use {ipaddr}.", ), ( "use_ethernet", False, "Activate or deactivate checking for ethernet when no wlan connection is detected", ), ( "format", "{essid} {quality}/70", 'Display format. For percents you can use "{essid} {percent:2.0%}". For IP of wlan interface use {ipaddr}.', ), ] def __init__(self, **config): if "ethernet_message" in config: logger.warning( "`ethernet_message` parameter is deprecated. Please rename to `ethernet_message_format`" ) config["ethernet_message_format"] = config.pop("ethernet_message") base.InLoopPollText.__init__(self, **config) self.add_defaults(Wlan.defaults) self.ethernet_interface_not_found = False def poll(self): essid, quality = get_status(self.interface) return process_essid_and_quality( self, essid=essid, quality=quality, )