Wie kann ich im Terminal den Status einer Netzwerkkarte und von PulseAudio abfragen?
Oder anders gesagt ich will wissen ob auf dem Rechner irgend ein Download oder Audiostream läuft, bevor ich ihn per Fernwartung ausschalte.
(Teils gelöst)Wie Downloadstatus und Audiostatus herausfinden
Du könntest auch die Prozesstabelle abfragen, also ps -ef| grep ... (je nachdem wie deine Downloads normalerweise laufen).
- Bearbeitet
Bzgl. Audio: Wenn du pulseoudio nutzt, ist pactl
dein Freund. Im Speziellen pactl list
.
Bzgl: Downloads. Dies ist viel zu vage. Was ist ein Download? Es werden ja laufend Daten über die Netzwerkkarten übertragen, wie z.B. Keepalive Pakete von etwaigen VPN Verbindungen oder für Internetverbindungschecks bei NetworkManager-wait-online.service
oder Browser Extensions. Sind das Downloads? Technisch ja. Willst du auf diese warten? Wahrscheinlich nicht. Hier müsstest du ergo genauer differenzieren, welche Protokolle / Verbindungen du überwachen möchtest.
Prima mit pactl list sinks short
kann ich den Audiostatus abgreifen.
Was den Downloadstatus betrifft hatte ich die Idee das mit der gerade benötigte Bandbreite zu machen. Also wenn er weniger Bandbreite wie z.B. Webradiostream braucht wird er ausgeschaltet. Nur wie ermittel ich die Bandbreite?
- Bearbeitet
Oder du trackst /sys/class/net/<interface>/statistics/rx_bytes
über einen gewissen Zeitraum.
PS: Mir war langweilig:
#! /usr/bin/env python3
"""Measure network speed on interfaces."""
from argparse import ArgumentParser, Namespace
from functools import partial
from multiprocessing import Pool
from pathlib import Path
from time import sleep
INTERFACES = Path('/sys/class/net')
def measure_and_print(interface: str, *, seconds: int | float = 10) -> None:
"""Print measured interface speed."""
print(f'{interface}:', measure(interface, seconds=seconds), 'bytes/sec')
def measure(interface: str, *, seconds: int | float = 10) -> float:
"""Measure interface over the given time in bytes / sec."""
start = rx_bytes(interface)
sleep(seconds)
end = rx_bytes(interface)
return (end - start) / seconds
def rx_bytes(interface: str) -> int:
"""Return the recived bytes of the respective interface."""
with rx_bytes_file(interface).open('r', encoding='utf-8') as file:
return int(file.read())
def rx_bytes_file(interface: str) -> Path:
"""Return the path to the rx_bytes file of the given interface."""
return INTERFACES / interface / 'statistics/rx_bytes'
def get_args(description: str = __doc__) -> Namespace:
"""Return the parsed command line arguments."""
parser = ArgumentParser(description=description)
parser.add_argument('interface', nargs='+')
parser.add_argument(
'-i', '--interval', type=float, default=10,
help='tracking interval in seconds'
)
return parser.parse_args()
def main() -> None:
"""Run the script."""
args = get_args()
with Pool() as pool:
pool.map(partial(measure_and_print, seconds=args.interval), args.interface)
if __name__ == '__main__':
main()
/home/rne〉./speed.py wlo1 lo 2023-04-22 12:44:47
wlo1: 782.5 bytes/sec
lo: 0.0 bytes/sec
/home/rne〉 2023-04-22 12:44:58
Schau dir mal ss
mit seinen Optionen an.
-t zeigt nur die TCP-Verbindungen an, ESTAB sind aktive Verbindungen
-p zeigt dir auch den Prozess dazu an
Damit müsste sich feststellen lassen, ob noch ein Download läuft, oder der Stream eines Prozesses die Soundkarte bedient.
@Martin-MS ss steht schon länger auf meine Agenda siehe hier es scheitert wieder mal an der Sprachbarriere.
- Bearbeitet
Mit dem Downloadstatus bin ich nicht wirklich weitergekommen. Alles was mir die momentane Auslastung von Eth0 anzeigt hat irgendeine Oberfläche und lässt sich nicht per Einzelabfrage auslesen. Werde das erstmal ruhen lassen, vielleicht fällt mir noch eine sinnvolle Lösung ein.
Vielleicht musst du (besser) beschreiben was du genau sehen willst? Die genannten Tools zeigen alle deinen Up/Downstream.
Vielleicht bringt dir vnstat -l
oder ethtool -S <device>
die Ausgabe die du haben möchtest?
ifstat (im Paket iproute2) liefert dir ggf. auch das Gewünschte ohne "Oberfläche". (Stichwort Rate bei RX/TX). Auch ohne root sein zu müssen.
Dirks Skript reicht dir nicht?
Selbst mit conky läßt sich was zimmern um upspeed/downspeed einmalig im Terminal auszugeben.