Natywny monitor systemu dla Linuksa napisany w Rust + GTK4, inspirowany Mission Center. Pokazuje na żywo: obciążenie procesora (ogólne i per-rdzeń), zużycie pamięci RAM/swap, pojemność dysków, przepustowość sieci oraz sortowalną, filtrowalną listę procesów.
Projekt skompilowano i przetestowano (uruchomienie pod Xvfb, brak paniki, zero ostrzeżeń kompilatora) w tym środowisku na Ubuntu 24.04 / GTK 4.14; architektura i zależności są identyczne dla Debiana 12 (bookworm) i Debiana 13 (trixie).
sudo apt update
sudo apt install -y build-essential pkg-config libgtk-4-dev cargo rustcUwaga dot. wersji Rusta: pakiet
rustcz Debiana 12 (1.63) jest za stary dla części zależności. Zalecane jest zainstalowanie toolchaina przez rustup (curl https://sh.rustup.rs -sSf | sh), który da Ci aktualny stabilny Rust. Ten projekt buduje się od Rusta 1.75 wzwyż (dokładnie taką wersję zweryfikowano podczas budowy w tym środowisku). Jeśli używasz rustup, powyższyCargo.lockmożesz odświeżyć poleceniemcargo update— zostały w nim celowo przypięte nieco starsze wersjehashbrown/indexmap/rayon, potrzebne tylko dla toolchaina 1.75.
cargo build --releaseBinarka powstaje w target/release/mission-monitor.
./target/release/mission-monitorsrc/
main.rs punkt wejścia
app.rs okno główne, pasek boczny, pętla odświeżania (1 Hz)
stats.rs model stanu systemu (sysinfo) + bufory historii
graph.rs lekki widget wykresu liniowego (DrawingArea + cairo)
process_object.rs GObject opakowujący wiersz procesu dla ColumnView
style.css arkusz stylów (ciemne karty, akcenty kolorystyczne)
views/
overview.rs zakładka "Przegląd"
cpu.rs zakładka "Procesor" (ogólny + per-rdzeń)
memory.rs zakładka "Pamięć" (RAM + swap)
disk.rs zakładka "Dyski" (paski pojemności)
network.rs zakładka "Sieć" (przepustowość + interfejsy)
processes.rs zakładka "Procesy" (ColumnView, sortowanie, filtr)
resources/
mission-monitor.desktop wpis dla menu aplikacji
icons/mission-monitor.svg
Najprostsza droga to cargo-deb:
cargo install cargo-deb
cargo deb # tworzy target/debian/mission-monitor_0.1.0_amd64.deb
sudo dpkg -i target/debian/mission-monitor_*.debMetadane pakietu (zależności runtime, opis, instalowane pliki — binarka,
.desktop, ikona) są już zdefiniowane w [package.metadata.deb] w
Cargo.toml. Wygenerowany pakiet zależy od libgtk-4-1, więc na czystym
Debianie instaluje się przez zwykłe apt/dpkg bez dodatkowych kroków.
- Odświeżanie danych:
glib::timeout_add_localco 1000 ms odświeżasysinfo::System/Disks/Networksi przepycha nowe próbki do buforów pierścieniowych (stats::History), które napędzają wykresy. - Wykresy: zwykły
gtk::DrawingArea+cairo, bez subklasowania widgetu — mniej kodu, ta sama płynność. - Lista procesów:
gtk::ColumnViewnadgio::ListStore<ProcessObject>, gdzieProcessObjectto lekkiglib::Object(subclass) bez pełnego systemu property GObject — czytane są zwykłe gettery w fabrykach kolumn. Sortowanie i filtrowanie tekstowe działają natywnie przezSortListModel/FilterListModel. - UI: pasek boczny (
ListBox+ ikony symboliczne z motywu Adwaita) igtk::Stackz przejściem "crossfade" między zakładkami — układ 1:1 z ideą Mission Center (stały sidebar, karty z wykresami, tabela procesów).
- Brak wykresu GPU (Mission Center czyta go przez własną bibliotekę C;
dodanie wymagałoby integracji z
nvml/vulkan/drm, celowo pominięte dla przejrzystości kodu bazowego). - Kolumna „Użytkownik” w tabeli procesów jest obecnie pusta na Linuksie,
ponieważ
sysinfozwraca tylko suroweUid; można ją uzupełnić, mapującUidna nazwę przezsysinfo::Users. - Zamykanie/zabijanie procesu z poziomu UI nie jest zaimplementowane —
łatwo dodać jako akcję kontekstową na wierszu
ColumnView(process.kill()zsysinfo).