• Allgemeines
  • (Teils gelöst)Wie Downloadstatus und Audiostatus herausfinden

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.

Du könntest auch die Prozesstabelle abfragen, also ps -ef| grep ... (je nachdem wie deine Downloads normalerweise laufen).

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?

  • krisz hat auf diesen Beitrag geantwortet.

    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.

    9 Tage später

    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.

    5 Tage später
    Andy@Arch hat den Titel zu (Teils gelöst)Wie Downloadstatus und Audiostatus herausfinden geändert ().