network: refactors and fixes
This commit is contained in:
parent
d9aaddb462
commit
2af58ef8ea
@ -344,4 +344,4 @@ class WifiChannels:
|
|||||||
elif 6455 <= freq <= 7115:
|
elif 6455 <= freq <= 7115:
|
||||||
return "6", str(int((freq - 5950) / 5))
|
return "6", str(int((freq - 5950) / 5))
|
||||||
else:
|
else:
|
||||||
return None
|
return "?", "?"
|
||||||
|
@ -228,7 +228,7 @@ class WifiManager:
|
|||||||
with suppress(NetworkManager.ObjectVanished):
|
with suppress(NetworkManager.ObjectVanished):
|
||||||
netinfo.update({
|
netinfo.update({
|
||||||
"mac": ap.HwAddress,
|
"mac": ap.HwAddress,
|
||||||
"channel": WifiChannels.lookup(str(ap.Frequency))[1],
|
"channel": WifiChannels.lookup(ap.Frequency)[1],
|
||||||
"configured": ssid in self.known_networks,
|
"configured": ssid in self.known_networks,
|
||||||
"frequency": str(ap.Frequency),
|
"frequency": str(ap.Frequency),
|
||||||
"flags": ap.Flags,
|
"flags": ap.Flags,
|
||||||
|
@ -43,25 +43,23 @@ class Panel(ScreenPanel):
|
|||||||
if 'lo' in ints:
|
if 'lo' in ints:
|
||||||
ints.pop(ints.index('lo'))
|
ints.pop(ints.index('lo'))
|
||||||
self.interface = ints[0] if len(ints) > 0 else 'lo'
|
self.interface = ints[0] if len(ints) > 0 else 'lo'
|
||||||
res = netifaces.ifaddresses(self.interface)
|
|
||||||
if netifaces.AF_INET in res and len(res[netifaces.AF_INET]) > 0:
|
|
||||||
ip = res[netifaces.AF_INET][0]['addr']
|
|
||||||
else:
|
|
||||||
ip = None
|
|
||||||
|
|
||||||
self.labels['networks'] = {}
|
self.labels['networks'] = {}
|
||||||
|
|
||||||
self.labels['interface'] = Gtk.Label(hexpand=True)
|
self.labels['interface'] = Gtk.Label(hexpand=True)
|
||||||
self.labels['interface'].set_text(f' {_("Interface")}: {self.interface} ')
|
self.labels['interface'].set_text(f' {_("Interface")}: {self.interface} ')
|
||||||
|
|
||||||
self.labels['ip'] = Gtk.Label(hexpand=True)
|
self.labels['ip'] = Gtk.Label(hexpand=True)
|
||||||
reload_networks = self._gtk.Button("refresh", None, "color1", .66)
|
ifadd = netifaces.ifaddresses(self.interface)
|
||||||
|
if ifadd.get(netifaces.AF_INET):
|
||||||
|
self.labels['ip'].set_text(f"IP: {ifadd[netifaces.AF_INET][0]['addr']} ")
|
||||||
|
|
||||||
|
reload_networks = self._gtk.Button("refresh", None, "color1", self.bts)
|
||||||
reload_networks.connect("clicked", self.reload_networks)
|
reload_networks.connect("clicked", self.reload_networks)
|
||||||
reload_networks.set_hexpand(False)
|
reload_networks.set_hexpand(False)
|
||||||
|
|
||||||
sbox = Gtk.Box(hexpand=True, vexpand=False)
|
sbox = Gtk.Box(hexpand=True, vexpand=False)
|
||||||
sbox.add(self.labels['interface'])
|
sbox.add(self.labels['interface'])
|
||||||
if ip is not None:
|
|
||||||
self.labels['ip'].set_text(f"IP: {ip} ")
|
|
||||||
sbox.add(self.labels['ip'])
|
sbox.add(self.labels['ip'])
|
||||||
sbox.add(reload_networks)
|
sbox.add(reload_networks)
|
||||||
|
|
||||||
@ -95,13 +93,15 @@ class Panel(ScreenPanel):
|
|||||||
self.labels['main_box'] = box
|
self.labels['main_box'] = box
|
||||||
self.initialized = True
|
self.initialized = True
|
||||||
|
|
||||||
def load_networks(self):
|
def load_networks(self, widget=None):
|
||||||
networks = self.wifi.get_networks()
|
networks = self.wifi.get_networks()
|
||||||
if not networks:
|
if not networks:
|
||||||
return
|
return
|
||||||
for net in networks:
|
for net in networks:
|
||||||
self.add_network(net, False)
|
self.add_network(net, False)
|
||||||
self.update_all_networks()
|
self.update_all_networks()
|
||||||
|
if widget:
|
||||||
|
GLib.timeout_add_seconds(10, self._gtk.Button_busy, widget, False)
|
||||||
self.content.show_all()
|
self.content.show_all()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -124,16 +124,14 @@ class Panel(ScreenPanel):
|
|||||||
connected_ssid = self.wifi.get_connected_ssid()
|
connected_ssid = self.wifi.get_connected_ssid()
|
||||||
if netinfo is None:
|
if netinfo is None:
|
||||||
logging.debug("Couldn't get netinfo")
|
logging.debug("Couldn't get netinfo")
|
||||||
if connected_ssid == ssid:
|
netinfo = {'connected': connected_ssid == ssid}
|
||||||
netinfo = {'connected': True}
|
|
||||||
else:
|
|
||||||
netinfo = {'connected': False}
|
|
||||||
|
|
||||||
if connected_ssid == ssid:
|
|
||||||
display_name += " (" + _("Connected") + ")"
|
|
||||||
|
|
||||||
name = Gtk.Label(hexpand=True, halign=Gtk.Align.START, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR)
|
name = Gtk.Label(hexpand=True, halign=Gtk.Align.START, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR)
|
||||||
|
if connected_ssid == ssid:
|
||||||
|
display_name += " (" + _("Connected") + ")"
|
||||||
name.set_markup(f"<big><b>{display_name}</b></big>")
|
name.set_markup(f"<big><b>{display_name}</b></big>")
|
||||||
|
else:
|
||||||
|
name.set_label(display_name)
|
||||||
|
|
||||||
info = Gtk.Label(halign=Gtk.Align.START)
|
info = Gtk.Label(halign=Gtk.Align.START)
|
||||||
labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True,
|
labels = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True,
|
||||||
@ -141,19 +139,18 @@ class Panel(ScreenPanel):
|
|||||||
labels.add(name)
|
labels.add(name)
|
||||||
labels.add(info)
|
labels.add(info)
|
||||||
|
|
||||||
connect = self._gtk.Button("load", None, "color3", .66)
|
connect = self._gtk.Button("load", None, "color3", self.bts)
|
||||||
connect.connect("clicked", self.connect_network, ssid)
|
connect.connect("clicked", self.connect_network, ssid)
|
||||||
connect.set_hexpand(False)
|
connect.set_hexpand(False)
|
||||||
connect.set_halign(Gtk.Align.END)
|
connect.set_halign(Gtk.Align.END)
|
||||||
|
|
||||||
delete = self._gtk.Button("delete", None, "color3", .66)
|
delete = self._gtk.Button("delete", None, "color3", self.bts)
|
||||||
delete.connect("clicked", self.remove_wifi_network, ssid)
|
delete.connect("clicked", self.remove_wifi_network, ssid)
|
||||||
delete.set_hexpand(False)
|
delete.set_hexpand(False)
|
||||||
delete.set_halign(Gtk.Align.END)
|
delete.set_halign(Gtk.Align.END)
|
||||||
|
|
||||||
network = Gtk.Box(spacing=5, hexpand=True, vexpand=False)
|
network = Gtk.Box(spacing=5, hexpand=True, vexpand=False)
|
||||||
network.get_style_context().add_class("frame-item")
|
network.get_style_context().add_class("frame-item")
|
||||||
|
|
||||||
network.add(labels)
|
network.add(labels)
|
||||||
|
|
||||||
buttons = Gtk.Box(spacing=5)
|
buttons = Gtk.Box(spacing=5)
|
||||||
@ -188,14 +185,10 @@ class Panel(ScreenPanel):
|
|||||||
if show:
|
if show:
|
||||||
self.labels['networklist'].show()
|
self.labels['networklist'].show()
|
||||||
|
|
||||||
def add_new_network(self, widget, ssid, connect=False):
|
def add_new_network(self, widget, ssid):
|
||||||
self._screen.remove_keyboard()
|
self._screen.remove_keyboard()
|
||||||
psk = self.labels['network_psk'].get_text()
|
result = self.wifi.add_network(ssid, self.labels['network_psk'].get_text())
|
||||||
result = self.wifi.add_network(ssid, psk)
|
|
||||||
|
|
||||||
self.close_add_network()
|
self.close_add_network()
|
||||||
|
|
||||||
if connect:
|
|
||||||
if result:
|
if result:
|
||||||
self.connect_network(widget, ssid, False)
|
self.connect_network(widget, ssid, False)
|
||||||
else:
|
else:
|
||||||
@ -243,14 +236,7 @@ class Panel(ScreenPanel):
|
|||||||
self.check_missing_networks()
|
self.check_missing_networks()
|
||||||
|
|
||||||
def connect_network(self, widget, ssid, showadd=True):
|
def connect_network(self, widget, ssid, showadd=True):
|
||||||
|
isdef = any(net['ssid'] == ssid for netid, net in self.wifi.get_supplicant_networks().items())
|
||||||
snets = self.wifi.get_supplicant_networks()
|
|
||||||
isdef = False
|
|
||||||
for netid, net in snets.items():
|
|
||||||
if net['ssid'] == ssid:
|
|
||||||
isdef = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if not isdef:
|
if not isdef:
|
||||||
if showadd:
|
if showadd:
|
||||||
self.show_add_network(widget, ssid)
|
self.show_add_network(widget, ssid)
|
||||||
@ -263,7 +249,7 @@ class Panel(ScreenPanel):
|
|||||||
|
|
||||||
scroll = self._gtk.ScrolledWindow()
|
scroll = self._gtk.ScrolledWindow()
|
||||||
self.labels['connecting_info'] = Gtk.Label(
|
self.labels['connecting_info'] = Gtk.Label(
|
||||||
label=_("Starting WiFi Association"), halign=Gtk.Align.START, valign=Gtk.Align.START)
|
label=_("Starting WiFi Association"), halign=Gtk.Align.START, valign=Gtk.Align.START, wrap=True)
|
||||||
scroll.add(self.labels['connecting_info'])
|
scroll.add(self.labels['connecting_info'])
|
||||||
self._gtk.Dialog(_("Starting WiFi Association"), buttons, scroll, self._gtk.remove_dialog)
|
self._gtk.Dialog(_("Starting WiFi Association"), buttons, scroll, self._gtk.remove_dialog)
|
||||||
self._screen.show_all()
|
self._screen.show_all()
|
||||||
@ -315,12 +301,12 @@ class Panel(ScreenPanel):
|
|||||||
|
|
||||||
label = Gtk.Label(label=_("PSK for") + ' ssid', hexpand=False)
|
label = Gtk.Label(label=_("PSK for") + ' ssid', hexpand=False)
|
||||||
self.labels['network_psk'] = Gtk.Entry(hexpand=True)
|
self.labels['network_psk'] = Gtk.Entry(hexpand=True)
|
||||||
self.labels['network_psk'].connect("activate", self.add_new_network, ssid, True)
|
self.labels['network_psk'].connect("activate", self.add_new_network, ssid)
|
||||||
self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard)
|
self.labels['network_psk'].connect("focus-in-event", self._screen.show_keyboard)
|
||||||
|
|
||||||
save = self._gtk.Button("sd", _("Save"), "color3")
|
save = self._gtk.Button("sd", _("Save"), "color3")
|
||||||
save.set_hexpand(False)
|
save.set_hexpand(False)
|
||||||
save.connect("clicked", self.add_new_network, ssid, True)
|
save.connect("clicked", self.add_new_network, ssid)
|
||||||
|
|
||||||
box = Gtk.Box()
|
box = Gtk.Box()
|
||||||
box.pack_start(self.labels['network_psk'], True, True, 5)
|
box.pack_start(self.labels['network_psk'], True, True, 5)
|
||||||
@ -342,43 +328,32 @@ class Panel(ScreenPanel):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def update_network_info(self, ssid):
|
def update_network_info(self, ssid):
|
||||||
|
|
||||||
info = freq = encr = chan = lvl = ipv4 = ipv6 = ""
|
info = freq = encr = chan = lvl = ipv4 = ipv6 = ""
|
||||||
|
|
||||||
if ssid not in list(self.networks) or ssid not in self.labels['networks']:
|
if ssid not in list(self.networks) or ssid not in self.labels['networks']:
|
||||||
logging.info(f"Unknown SSID {ssid}")
|
logging.info(f"Unknown SSID {ssid}")
|
||||||
return
|
return
|
||||||
netinfo = self.wifi.get_network_info(ssid)
|
netinfo = self.wifi.get_network_info(ssid)
|
||||||
if "connected" in netinfo:
|
if netinfo.get('connected') or self.wifi.get_connected_ssid() == ssid:
|
||||||
connected = netinfo['connected']
|
|
||||||
else:
|
|
||||||
connected = False
|
|
||||||
|
|
||||||
if connected or self.wifi.get_connected_ssid() == ssid:
|
|
||||||
stream = os.popen('hostname -f')
|
|
||||||
hostname = stream.read().strip()
|
|
||||||
ifadd = netifaces.ifaddresses(self.interface)
|
ifadd = netifaces.ifaddresses(self.interface)
|
||||||
if netifaces.AF_INET in ifadd and len(ifadd[netifaces.AF_INET]) > 0:
|
if ifadd.get(netifaces.AF_INET):
|
||||||
ipv4 = f"<b>IPv4:</b> {ifadd[netifaces.AF_INET][0]['addr']}"
|
ipv4 = f"<b>IPv4:</b> {ifadd[netifaces.AF_INET][0]['addr']}"
|
||||||
self.labels['ip'].set_text(f"IP: {ifadd[netifaces.AF_INET][0]['addr']} ")
|
self.labels['ip'].set_text(f"IP: {ifadd[netifaces.AF_INET][0]['addr']} ")
|
||||||
if netifaces.AF_INET6 in ifadd and len(ifadd[netifaces.AF_INET6]) > 0:
|
if ifadd.get(netifaces.AF_INET6):
|
||||||
ipv6 = f"<b>IPv6:</b> {ifadd[netifaces.AF_INET6][0]['addr'].split('%')[0]}"
|
ipv6 = f"<b>IPv6:</b> {ifadd[netifaces.AF_INET6][0]['addr'].split('%')[0]}"
|
||||||
info = '<b>' + _("Hostname") + f':</b> {hostname}\n{ipv4}\n{ipv6}\n'
|
info = f'<b>{_("Hostname")}:</b> {os.uname().nodename}\n{ipv4}\n{ipv6}'
|
||||||
elif "psk" in netinfo:
|
else:
|
||||||
|
self.labels['networks'][ssid]['name'].set_label(_("Hidden") if ssid.startswith("\x00") else f"{ssid}")
|
||||||
|
if "psk" in netinfo:
|
||||||
info = _("Password saved")
|
info = _("Password saved")
|
||||||
if "encryption" in netinfo:
|
if "encryption" in netinfo and netinfo['encryption'] != "off":
|
||||||
if netinfo['encryption'] != "off":
|
|
||||||
encr = netinfo['encryption'].upper()
|
encr = netinfo['encryption'].upper()
|
||||||
if "frequency" in netinfo:
|
if "frequency" in netinfo:
|
||||||
freq = "2.4 GHz" if netinfo['frequency'][0:1] == "2" else "5 Ghz"
|
freq = "2.4 GHz" if netinfo['frequency'][:1] == "2" else "5 Ghz"
|
||||||
if "channel" in netinfo:
|
if "channel" in netinfo:
|
||||||
chan = _("Channel") + f' {netinfo["channel"]}'
|
chan = f'{_("Channel")} {netinfo["channel"]}'
|
||||||
if "signal_level_dBm" in netinfo:
|
if "signal_level_dBm" in netinfo:
|
||||||
lvl = f'{netinfo["signal_level_dBm"]} '
|
lvl = f'{netinfo["signal_level_dBm"]} {"%" if self.use_network_manager else _("dBm")}'
|
||||||
if self.use_network_manager:
|
|
||||||
lvl += '%'
|
|
||||||
else:
|
|
||||||
lvl += _("dBm")
|
|
||||||
icon = self.signal_strength(int(netinfo["signal_level_dBm"]))
|
icon = self.signal_strength(int(netinfo["signal_level_dBm"]))
|
||||||
if 'icon' not in self.labels['networks'][ssid]:
|
if 'icon' not in self.labels['networks'][ssid]:
|
||||||
self.labels['networks'][ssid]['row'].add(icon)
|
self.labels['networks'][ssid]['row'].add(icon)
|
||||||
@ -386,7 +361,7 @@ class Panel(ScreenPanel):
|
|||||||
self.labels['networks'][ssid]['icon'] = icon
|
self.labels['networks'][ssid]['icon'] = icon
|
||||||
self.labels['networks'][ssid]['icon'] = icon
|
self.labels['networks'][ssid]['icon'] = icon
|
||||||
|
|
||||||
self.labels['networks'][ssid]['info'].set_markup(f"{info} <small>{encr} {freq} {chan} {lvl}</small>")
|
self.labels['networks'][ssid]['info'].set_markup(f"{info}\n<small>{encr} {freq} {chan} {lvl}</small>")
|
||||||
self.labels['networks'][ssid]['row'].show_all()
|
self.labels['networks'][ssid]['row'].show_all()
|
||||||
|
|
||||||
def signal_strength(self, signal_level):
|
def signal_strength(self, signal_level):
|
||||||
@ -405,26 +380,19 @@ class Panel(ScreenPanel):
|
|||||||
return self._gtk.Image('wifi_weak')
|
return self._gtk.Image('wifi_weak')
|
||||||
|
|
||||||
def update_single_network_info(self):
|
def update_single_network_info(self):
|
||||||
|
|
||||||
stream = os.popen('hostname -f')
|
|
||||||
hostname = stream.read().strip()
|
|
||||||
ifadd = netifaces.ifaddresses(self.interface)
|
ifadd = netifaces.ifaddresses(self.interface)
|
||||||
ipv4 = ""
|
ipv6 = f"{ifadd[netifaces.AF_INET6][0]['addr'].split('%')[0]}" if ifadd.get(netifaces.AF_INET6) else ""
|
||||||
ipv6 = ""
|
if netifaces.AF_INET in ifadd and ifadd[netifaces.AF_INET]:
|
||||||
if netifaces.AF_INET in ifadd and len(ifadd[netifaces.AF_INET]) > 0:
|
ipv4 = f"{ifadd[netifaces.AF_INET][0]['addr']} "
|
||||||
ipv4 = f"<b>IPv4:</b> {ifadd[netifaces.AF_INET][0]['addr']} "
|
|
||||||
self.labels['ip'].set_text(f"IP: {ifadd[netifaces.AF_INET][0]['addr']} ")
|
self.labels['ip'].set_text(f"IP: {ifadd[netifaces.AF_INET][0]['addr']} ")
|
||||||
if netifaces.AF_INET6 in ifadd and len(ifadd[netifaces.AF_INET6]) > 0:
|
else:
|
||||||
ipv6 = f"<b>IPv6:</b> {ifadd[netifaces.AF_INET6][0]['addr'].split('%')[0]} "
|
ipv4 = ""
|
||||||
connected = (
|
self.labels['networkinfo'].set_markup(
|
||||||
f'<b>{self.interface}</b>\n\n'
|
f'<b>{self.interface}</b>\n\n'
|
||||||
f'<small><b>' + _("Connected") + f'</b></small>\n'
|
f'<b>{_("Hostname")}:</b> {os.uname().nodename}\n'
|
||||||
+ '<b>' + _("Hostname") + f':</b> {hostname}\n'
|
f'<b>IPv4:</b> {ipv4}\n'
|
||||||
f'{ipv4}\n'
|
f'<b>IPv6:</b> {ipv6}'
|
||||||
f'{ipv6}\n'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.labels['networkinfo'].set_markup(connected)
|
|
||||||
self.labels['networkinfo'].show_all()
|
self.labels['networkinfo'].show_all()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -432,8 +400,10 @@ class Panel(ScreenPanel):
|
|||||||
self.networks = {}
|
self.networks = {}
|
||||||
self.labels['networklist'].remove_column(0)
|
self.labels['networklist'].remove_column(0)
|
||||||
if self.wifi is not None and self.wifi.initialized:
|
if self.wifi is not None and self.wifi.initialized:
|
||||||
|
if widget:
|
||||||
|
self._gtk.Button_busy(widget, True)
|
||||||
self.wifi.rescan()
|
self.wifi.rescan()
|
||||||
GLib.idle_add(self.load_networks)
|
GLib.idle_add(self.load_networks, widget)
|
||||||
|
|
||||||
def activate(self):
|
def activate(self):
|
||||||
if self.initialized:
|
if self.initialized:
|
||||||
|
@ -160,6 +160,7 @@ create_policy()
|
|||||||
|
|
||||||
echo_text "Installing KlipperScreen PolicyKit Rules"
|
echo_text "Installing KlipperScreen PolicyKit Rules"
|
||||||
sudo groupadd -f klipperscreen
|
sudo groupadd -f klipperscreen
|
||||||
|
sudo groupadd -f netdev
|
||||||
sudo groupadd -f tty
|
sudo groupadd -f tty
|
||||||
if [ ! -x "$(command -v pkaction)" ]; then
|
if [ ! -x "$(command -v pkaction)" ]; then
|
||||||
echo "PolicyKit not installed"
|
echo "PolicyKit not installed"
|
||||||
@ -195,7 +196,7 @@ polkit.addRule(function(action, subject) {
|
|||||||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
|
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
|
||||||
action.id == "org.freedesktop.login1.halt" ||
|
action.id == "org.freedesktop.login1.halt" ||
|
||||||
action.id == "org.freedesktop.login1.halt-multiple-sessions" ||
|
action.id == "org.freedesktop.login1.halt-multiple-sessions" ||
|
||||||
action.id == "org.freedesktop.NetworkManager.wifi.scan" ||
|
action.id == "org.freedesktop.NetworkManager.*" ||
|
||||||
action.id.startsWith("org.freedesktop.packagekit.")) &&
|
action.id.startsWith("org.freedesktop.packagekit.")) &&
|
||||||
subject.user == "$USER") {
|
subject.user == "$USER") {
|
||||||
// Only allow processes with the "klipperscreen" supplementary group
|
// Only allow processes with the "klipperscreen" supplementary group
|
||||||
@ -222,7 +223,7 @@ create_policy_legacy()
|
|||||||
ACTIONS="${ACTIONS};org.freedesktop.login1.reboot-multiple-sessions"
|
ACTIONS="${ACTIONS};org.freedesktop.login1.reboot-multiple-sessions"
|
||||||
ACTIONS="${ACTIONS};org.freedesktop.login1.halt"
|
ACTIONS="${ACTIONS};org.freedesktop.login1.halt"
|
||||||
ACTIONS="${ACTIONS};org.freedesktop.login1.halt-multiple-sessions"
|
ACTIONS="${ACTIONS};org.freedesktop.login1.halt-multiple-sessions"
|
||||||
ACTIONS="${ACTIONS};org.freedesktop.NetworkManager.wifi.scan"
|
ACTIONS="${ACTIONS};org.freedesktop.NetworkManager.*"
|
||||||
sudo /bin/sh -c "cat > ${RULE_FILE}" << EOF
|
sudo /bin/sh -c "cat > ${RULE_FILE}" << EOF
|
||||||
[KlipperScreen]
|
[KlipperScreen]
|
||||||
Identity=unix-user:$USER
|
Identity=unix-user:$USER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user