JAK OPTYMALIZOWAĆ GRY POD LINUXEM i MIERZYĆ WYDAJNOŚĆ?

hejto.pl

Artykuł trochę pisany pod siebie, bo słynę ze sklerozy w takich tematach, a potem muszę się przekopywać przez temat ponownie na nowych urządzeniach i tracić czas. Dzisiaj opiszę proces dodawania miernika do gier, głównie odpalanych przez Steam, wliczając w to te działające z pomocą Protona. Jak ktoś ma starszego laptopa i nawet stare gry potrafią - ciul wie czemu - działać jak pralka frania z wrzuconą cegłą do bębna, ten poradnik może wam się przydać. Użyjemy programu MangoHud , który przypomina te wszystkie mierniki obciążenia w grach, jak MSI Afterburner, ale ma coś, czego próżno szukać pod Windowsem, bez grzebania w ustawieniach karty graficznej. Ograniczanie maksymalnej liczby klatek na sekundę.


Gry - zwłaszcza stare, choć nowe indyki też - potrafią odpalać się z nierealną liczbą generowanych klatek, a nie wszędzie da się odpalić Vsync, czyli synchronizację z monitorem/wyświetlaczem. Sam miałem sporo problemów z tym, zwłaszcza używając Protona, czyli wbudowanej w Steam opcji na odpalanie tytułów windowsowych. MangoHud rozwiąże te problemy we w miarę prosty sposób.




Czego potrzebujesz?

  • Linuxa, w moim przypadku Mint, choć podobnie to działa na Ubuntu i pod Debianem. Inne dystrybucje mają własne instrukcje instalacji. Jak nie jesteś pewny, sprawdź konkretną instrukcję dla twojej dystrybucji TUTAJ .

  • nano - czyli w wielu dystrybucjach domyślnego edytora tekstu, który działa w terminalu. Jak nie macie go zainstalowanego, na pewnym etapie wyskoczy komunikat, że czegoś nie znaleziono w systemie. Można wtedy go zainstalować, użyć czegoś innego lub dodać plik konfiguracyjny ręcznie.

  • Steama, choć instrukcje da się też wrzucić w inne, pozasteamowe tytuły. Jak to się wrzuca w gry niesklepowe? Nie wiem. Może google wam pomoże.




[ 1 ] Zaczynamy od instalacji MangoHuda, w terminalu wpisujemy:

sudo apt install mangohud

i podajemy hasło administratora systemu [roota]. Gdy zostaniemy poproszeni o potwierdzenie. Wpisujemy zależnie od języka w terminalu Y lub T i klikamy ENTER. Gotowe, o ile nie wywaliło żadnych błędów, mamy nasz program. Jest gotowy do użycia, choć nie ma jeszcze naszych opcji wyświetlania, tylko domyślne, jak fps, obciążenie karty graficznej i procesora. Jeżeli potrzebujesz tylko tego, przeskocz do kroku 3.



[ 2 ] Tworzymy domyślny plik konfiguracji. W terminalu wpisz:

mkdir -p ~/.config/MangoHud

Następnie:

nano ~/.config/MangoHud/MangoHud.conf

To powinno wywołać edytor tekstu, który może trochę przytłoczyć, ale spokojnie.
Wpisujemy w nim dwa podstawowe mierniki, czyli fps i frametime, jak na obrazku niżej:W moim przypadku nazwa to nowy bufor, bo odpaliłem sam edytor, u was będziecie edytować plik MangoHud.conf.
Kombinacja CTRL + O zapisze taki plik, co powinniśmy zatwierdzić klawiszem ENTERPo wszystkim wychodzimy z nano kombinacją CTRL+X. Jeżeli zostaniecie zapytani, czy zapisać ten plik, pewnie coś w nim zmieniliście po ostatnim zapisaniu lub nie został poprawnie zapisany. Dobra pusty terminal, co teraz?



[ 3 ] Dodajemy w opcjach gry dodatkowy argument.

Wchodzimy do biblioteki Steam'a i szukamy naszej gry. Na jej karcie szukamy koła zębatego, gdzie wybieramy ostatnią opcję, czyli z moim przypadku "Properties", w waszym mogą być "Właściwości". Powinien nam się ukazać panel jak na screenie niżej.

Nas interesują zaawansowane opcje włączania, czyli pole tekstowe, które u was powinno być puste, na dole okienka ustawień ogólnych. Tak, jak w moim przypadku wrzucacie tam:

MANGOHUD=1 %command%

I zamykacie to okienko. Samo się zapisze. W innych aplikacjach powinno to działać podobnie.




[ 4 ] Testujemy czy program działa. Odpalamy grę przez zielony przycisk Steama i w lewym górnym rogu ekranu powinno się wyświetlić okienko z klatkami na sekundę i frametime. Gitarka, prawie gotowe. Zamykamy grę. Jak coś nie działa, musicie prześledzić czy wszystko zrobiliście według instrukcji. Jeżeli wasz Steam był instalowany przez Flatpacka, to musicie zainstalować MangoHuda też flatpackowego. Tam konfiguracja jest trochę inna, ale z pomocą przyjdzie program Goverlay. On graficznie zrobi wszystko to, co my robimy ręcznie.



[ 5 ] Dodajemy mój plik konfiguracyjny z większością potrzebnych opcji. Możemy to zrobić na dwa sposoby. Edytujemy plik tekstowy ponownie za pomocą nano, dosłownie wykonując tę samą kombinację jak wcześniej lub szukamy pliku konfiguracyjnego w plikach i edytujemy jak człowiek zwykłym edytorem tekstu. Ja wybieram opcję nr 2. Wasza wola co zrobicie wy.


Nasz plik zapisany jest w lokacji ./config/, a zobaczyć go możecie, wchodząc w folder domowy [ten główny], klikając na panelu górnym "Widok" i zaznaczyć "Wyświetlanie ukrytych plików". Wtedy wchodzimy w ./config/MangoHud/ i otwieramy w zwykłym edytorze tekstu plik MangoHud.conf . Wklejamy tam ten kod zamiast tego, co dodaliśmy wcześniej:

## USTAWIENIA MangoHuda by Kardynał Dziwisz

# Żeby coś wyłączyć, wystarczy zostawić # przed daną opcją. 
# np. # no_display sprawi, że panel będzie od początku widoczny
# bez potrzeby ręcznego wyświetlenia za pomocą kombinacji 
# prawego Shifta i F12

# LIMIT FPS i VSYNC
fps_limit=40
vsync=1
gl_vsync=1

# DOMYŚLNIE UKRYJ PANEL
no_display

# SKRÓT KLAWISZOWY DO WYŚWIETLANIA
toggle_hud=Shift_R+F12

# POZYCJA PANELU I WIELKOŚĆ CZCIONKI
# OPCJE: top-left (default), top-right, middle-left, middle-right, 
# bottom-left, bottom-right, top-center, bottom-center

position=top-left
font_size=16

# ZAOKRĄGLENIE TŁA
round_corners=10

# PRZEZROCZYSTOŚĆ PANELU [skala 0-1] 
alpha=0.7

# PODSTAWOWE KOLORY - TEKST i TŁO
text_color=ffffff
background_color=354f52

# KOLORY KOMPONENTÓW
cpu_color=cad2c5
gpu_color=cad2c5
vram_color=84a98c
ram_color=84a98c
frametime_color=52796f
engine_color=52796f
io_color=52796f
wine_color=52796f

# CO CHCEMY WYŚWIETLIĆ
# CZAS
time

# MIERNIKI
fps
frametime
histogram
cpu_temp
gpu_temp
cpu_stats
gpu_stats
ram
vram

Zapisujemy i odpalamy grę. Powinniście nie zobaczyć nic, bo od teraz panel wywoływany jest kombinacją PRAWY SHIFT + F12. Możecie tę kombinację zmienić według własnych potrzeb. W pliku jest też informacja gdzie sprawić, by panel był zawsze widoczny i gdzie zmieniamy opcje związane z klatkami na sekundę i vsync, który ma dwie opcje. Pod OpenGL i pod Vulkana [ten bez gl_ w nazwie]. Opcja ta nie jest idealna, bo najczęściej nadpisuje ją sama gra, ale można spróbować. Dodatkowo na githubie macie więcej opcji graficznych, ale mnie wystarczają takie.



Po odpaleniu panelu RSHIFT+F12 w grze zobaczymy to:

Kolory możecie sami edytować. Zostawiłem w kodzie informację, gdzie są. Sam brałem hexy z TEJ STRONY . Jak chcecie domyślnych MangoHuda, po prostu wywalcie tę część kodu.


Co zyskaliśmy? Od teraz nasz gruz nie generuje zbędnych 200 klatek, wykorzystując całą moc obliczeniową, mimo że wyświetlacz ma ograniczenie do 60. Czyli będzie ciszej i płynniej. Domyślnie Vsync będzie dobijał do maksymalnej wartości obsługiwanej przez monitor/wyświetlacz. W moim przypadku 60fps. Mój malutki komputerek [Beelink SER5] nawet przy Rizenie ma problem ze stabilnością i wahania były od 40 do 60 klatek. Skoki płynności. W taki sposób zawsze będzie tak samo, 40 klatek i nie muszę się wkurzać na dziwne przyspieszenia.



NA CO UWAŻAĆ?
Tak jak pisałem w punkcie 4, jeżeli macie program [STEAM/GOG/Cokolwiek co odpala gry] zainstalowany przez Flathuba, to MangoHud też musi być zainstalowany przez Flathuba. W takim wypadku konfigurację dokonuje się przez program Goverlay. Tu nie pomogę, bo bawiłem się nim chwilę, ale z moim Steamem nie działał.

Ile dystrybucji, tyle problemów. Jak coś nie pyknie, polecam szukać pomocy u ChataGPT. Wbrew pozorom jest do tego dobry, jak podacie mu wystarczająco dużo informacji. Zwłaszcza warto sobie sprawdzić, jak się to instaluje w jakiej dystrybucji. Ten poradnik na 100% powinien działać na najnowszym Mincie, Ubuntu i najprawdopodobniej Debianie. Z modyfikacjami na Fedorze, OpenSuse, Solusie i przez Flatpak.

Jak wybrać dobry limit FPS? Dużo zależy od waszego urządzenia i tego ile chcecie poświęcić, żeby było stabilnie. To też dobry sposób na dbanie o temperaturę procesora i karty. Jak chcecie niższej, bo wiatraki lecą na księżyc, warto spróbować niższych wartości. 30 to takie absolutne minimum, 60 to wartość raczej optymalna. Jak FPS skacze wam między 40, a 80, to może 50 będzie optymalne. Liczy się to, by nie było wielkiej różnicy między wartościami mimalnymi i maksymalnymi. Limit jest ważny tylko gdy chcecie zejść niżej, niż nominalna wartość obsługiwana przez monitor. Jak macie 60Hz, a klatki są na poziomie 80, to wystarczy odpalić Vsync=1 i gotowe. Bez zabawy w limity. Warto to zrobić, bo nadmiarowe klatki powodują lagi w obrazie.


Pisałem to kilka godzin, ale pewnie i tak wyjdzie ..., więc no, przepraszam. xD

Jest szansa, że zadziała na SteamDecku.


> #poradydziwena <

#linux #grykomputerowe #gry #poradnik #linuxmint #steam #linuxgaming


Nie jestem specem od linuxa. Po prostu z niego korzystam z doskokami od kilku lat. Nadal mam komputer z Windowsem 11, bo tam część gier po prostu działa, bez wazektomii jądra. xD

hejto.pl

Komentarze (49)

@Dziwen 

Mój malutki komputerek [Beelink SER5] nawet przy Rizenie ma problem ze stabilnością i wahania były od 40 do 60 klatek


kupił sobie PCta, żeby być konsolowym plebsem.


SIOSTRO, KAFTAN!

@eloyard to mój serwer. Miałem na nim np. Valheima jak grałem z innymi. Obecnie wygodniej mi z niego korzystać, niż z dużego kompa, zwłaszcza że te aktualne gry raczej ogrywam na PS5.

@Dziwen - nie gram w żadne gry na windzie już od lat - ba, windy używam tylko na laptopie pracowniczym.

Linux poszedł bardzo do przodu jeśli chodzi o codzienny użytek.

A jeśli nie gra się w gry z anticzitem to w ogóle nie spotkałem się by jakaś gra nie działała - przynajmniej z tych w które ja gram.

@koszotorobur pewne problemy są z anticzitem. Ja najmniej problemów mam ze Steamem i częściowo z Protonem. Jak instalowałem gry przez GOG'a, bo tam są też gry natywnie działające na linuxie, to miałem najwięcej problemów. Taki Neverwinter Nights daje czarne okienko na sekundę i znika.

@ErwinoRommelo można normalnie grać w CS'a na Linuxie co więcej CS ma natywną aplikację więc nie korzystasz z Protona tylko odpalasz AS IS

Zapomniałem, jak ktoś ma SteamDecka i mu to zadziała [SteamOS jest chyba na bazie Ubuntu] to wielkość panelu zmieniamy najprościej edytując wielkość czcionki. U mnie jest font_size=16 u was może być 24. Jak chciecie, by panel był zawsze widoczny, dodajecie # do linijki no_display.

[SteamOS jest chyba na bazie Ubuntu]

SteamOS bazuje na Archu. Zasadniczo to jest po prostu immutable snapshot paczek Archa z danego momentu z kilkoma ręcznie dobranymi według potrzeb.

W ogóle jak ktoś ma SteamDecka to kompozytor wbudowany w system ma wszystkie te opcje o których mówisz i możesz sterować limitami nie tylko fps, vsync itp a nawet możesz sterować wydajnością GPU i CPU z poziomu nakładki Steama.

Nie mam SteamDecka więc dorzucę jakiś losowy screen z neta jak to wygląda.

d8a3b629-6849-4551-a5c1-737a70b476c1

@ErwinoRommelo możliwe, że działa, ale jest zawsze włączony i nie może nadpisywać opcji gry. Tu mamy limit klatek, vsync, inne opcje graficzne, sami decydujemy, co wyświetla i odpalamy go kombinacją klawiszy. Czyli można go po prostu mieć w tle cały czas.

@Catharsis licznik steama nie ma opcji wyświetlenia z której karty graficznej korzysta się aktualnie na Linuxie to pomocne bo wiesz czy się wywaliły sterowniki nvidii

@MICK3Y Nie rozumiem. Jak wywaliły się stery to raczej obrazu nie będzie nie? A nawet jeśli będzie działać to przecież zobaczysz po wydajności, że coś jest nie tak. A jak mówisz o laptopie to w sumie zobaczysz różnice bo przecież pokazuje ilość VRAMU i na bank integra nie ma tyle do dedykowana więc po tym chociażby możesz poznać.

@Dziwen Generalnie propsy za poradnik i że ci się chciało.

A teraz dla leniwych, jak chcecie sobie tylko wyświetlać statystyki zużycia podczas grania to Steam od jakiegoś czasu wspiera je natywnie. Wystarczy włączyć w ustawieniach i można je przełączać skrótem klawiszowym.

W ogóle pierwsze słyszę żeby ktoś używał MangoHuda do ograniczania liczby fps i zarządzania vsync. Wydaje mi się, że lepszą opcją do tego jest używanie ustawień z gry a jako drugie używanie kompozytora od Steama czyli gamescope . Ale może tak też się da, idk.

A po trzecie to polecam wszystkie launchery do gier instalować za pomocą Flatpaka nawet jeśli są dostępne natywnie dla waszego distro. Bo wtedy znikają wszystkie problemy z różnicą pomiędzy dystrybucjami i wszystko się instaluje tak samo. Oraz ma się lepszą wydajność bo wszystkie paczki są dobrane idealnie pod siebie. Sprawdzałem to i gry odpalane na natywnym Steamie na Kubuntu oraz Archu działaja u mnie zauważalnie wolniej niż na Steamie z Flatpaka. Czasem niewiele a czasem różnica to nawet 20%.

c6120b83-d582-4672-8e95-2ea165ccd1e8
f1e76116-9b5d-4eb2-b6d3-be89e68e2d0e

@Catharsis +1 dla gamescope. Stellaris w 1080p ze skalowaniem do 4K poprzez FSR z gamescope wygląda o niebo lepiej niż natywne 1.5x czy 2x skalowanie interfejsu + natywna rozdzielczość 4K. Do starszych tytułów gdzie nie ma wsparcia czy łatek dla wyższej rozdzielczości również polecam.

@Neverius Ta, właśnie ten post mnie zainspirował aby zrobić podobny w którym wytłumaczę parę bardziej zaawansowanych sztuczek optymalizacji gier na Linuxie. Jak znajdę czas to może naskrobię coś w przyszłym tygodniu gdzie się rozpisze jak to działa i jak to włączyć.

@Catharsis chętnie przeczytam, bo sam średnio ogarniam inne opcje. Jestem w miarę szczęśliwy, że tę jedną rzecz ogarnąłem bez błędów. xD

@Catharsis czy gra pobrana ze steama flatpaka też się pobiera w sandboxie? Wydawało mi się że stream ją pobiera natywnie i nie ma to znaczenia

@MICK3Y Domyślnie pobiera się do folderu wewnątrz sandboxa, ale można ustawić swoją własną ścieżkę. Tylko że domyślnie flatpaki nie mają uprawnień do plików poza swoim sandboxem więc trzeba pobrać osobną aplikacje Flatseal i dać jej uprawnienia do danej ścieżki a następnie w Steamie utworzyć pod tą samą ścieżką folder na gry. Wspomnę o tym na pewno w tym poradniku który napiszę.

Ogólnie jak komuś się bardzo w to nie chce bawić to może instalować te wszystkie rzeczy bez flatpaka. Generalnie im bardziej "typowe" distro się ma tym mniejsze różnice w wydajności powinny być, czasem może nawet żadne. Dawno w sumie tego nie testowałem to zrobię jakieś benchmarki i porównam. Bo testowałem to tak dokładnie ostatni raz z jakieś ponad 2 lata temu i miałem wtedy jeszcze inny komputer.

@Dziwen w Steamie na Linuxie jest czasem śmieszn problem - nie działa klikanie elementów menu. Np klikamy w opcje gry (bo chcemy ją usunąć).


Menu się pokazuje, ale gdy klikamy w nim opcję "usuń grę", to działa jakbyśmy kliknęli w okno steam POD klikanym elementem menu. Nasz klik przenika przez elementy interfejsu!


Co zrobić, żeby działało? Można to naprawić i czasem działa. Ale można też klikać trzymając Ctrl. Wtedy kliknięcia nie będą przenikać i w końcu będzie można odinstalować grę, nie dziwiąc się czemu kliknięcia dziwnie działają.

@Legendary_Weaponsmith steam odpal ze wsparciem x11 możesz też sprawdzić jakie masz skalowanie ustawione co do sterowników to spróbuj w bashu ubuntu-drivers devices

Trochę ciężko stwierdzić ja też z Ubuntu nie korzystałem sporo ludzi odradza Ubuntu czy POPOS. Nie wiem jak pobierałeś steama czy z repo czy ze strony steama. Sterownikami też można sobie rozjebać jak pobrałeś i instalowałeś paczkę bezpośrednio ze strony nvidii. Jak te co wyżej napisałem nie zadziała to odinstaluj steama i zainstaluj wersję z flatpaka powinno być już w porządku bo dociagnie sobie brakujące repo w sandboxie

@Dziwen 

Ile dystrybucji, tyle problemów. Jak coś nie pyknie, polecam szukać pomocy u ChataGPT.

A ja polecam robić grę pod windowsa, tylko że z użyciem Vulkan API (które jest natywne dla linuxa) - resztą zajmie się Wine/Proton. Dobrze zoptymalizowana gra pod windows będzie dobrze zoptymalizowaną grą pod linuxem, a całą kompatybilnością ze wszystkimi dystrybucjami zajmie się Wine.

@Amebcio nie wiem do końca czy tak to działa ale możliwe że korzystając z Vulkan API już łatwiej pociągnąć i zrobić wersję natywną na Linuxa i obędzie się bez Protona/wine

@MICK3Y Linux to nie tylko API graficzne ale i masa innych, które nie są zgodne z windowsem. No i do tego dochodzą różne środowiska pracy jak KDE, Gnome i parę innych, które są nieco inne i czasami wymagają od dewelopera nieco innych rzeczy. Jeśli używasz Wine, te wszystkie drobne różnice spadają na Wine a nie na Ciebie.


Dodatkowo, Linux wprowadza zmiany, które z czasem będą wymagać od ciebie manualnego łatania zmian bo inaczej twoja gra przestanie działać. Do tego różne dystrybucje wdrażają zmiany z różnym tempem i różnym opóźnieniem. (np Arch wdraża wszystkie nowości od razu, a Debian ma czasami wręcz wieloletnie opóźnienie)


Jeśli używasz wine/proton to te wszystkie problemy są po stronie wine/protona, i tam zespół linuxowych specjalistów nad wszystkim czuwa, a ty możesz się skoncentrować na rozwijaniu gry a nie na problemach z dystrybucjami

Z mangohud korzystałem żeby zweryfikować z której karty graficznej korzysta proces. Mogę dopisać jeżeli chodzi o gaming na Linuxie z laptopem swoje doświadczenie:

  • Dystrybucje mają problem z obsługą integry i dedyka i ogólnym przełączaniem kart między AMD a nvidią

  • Fedora ma problem ogólny z obsługą hybrydową często po instalacji miałem Waylanda odpalonego na NVIDIi po instalacji sterowników i późniejszy problem z wymuszaniem pracy amd. Wkurzało mnie to szybko zmieniłem distro

  • Cachy OS jest super nie licząc że system jest rolling release. Oczywiście nie ma przełączania out of the box więc gry odpalasz z 2 parametrami wymuszającymi sterowniki NVIDIA, reszta śmiga sama na najnowszych sterownikach

  • Nix OS który aktualnie używam ma przygotowane konfiguracje pod niektóre laptopy i działa to mega https://github.com/NixOS/nixos-hardware wystarczy zainstalować w configuration.nix i śmiga tak jak cachy przy zachowaniu systemu atomowego. Generalnie wrzuciłem tylko to i zainstalowałem steama i mogłem grać w natywnego CS2, oczywiście dodajesz dwa parametry __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia

  • Oraz jak masz zainstalowane to gamemode

  • Możesz dodać nvidia-offload i ogarnąć przełączanie kart automatycznie ale szkoda mi na to czasu skoro można wymusić pracę nvidii może kiedyś

  • Jak ktoś chce optymalizować gry na Linuxie to dwie sprawy

  1. Używasz jądra cachy os w swojej dystrybucji (nie jest wymagane można w nix korzystać z gamemode różnice czasami są czasami nie)

  2. Używasz protona GE w nixie dodaję po prostu proton-ge następnie we właściwościach gry ustawiam proton-ge zamiast stosowania wersji enterprise steama bo dev ogarnia go z najnowszymi featurami i jest robiony typowo pod wydajność bez patrzenia na stabilność

@Legendary_Weaponsmith

Pobierasz proton-qt interfejs graficzny z np aur albo innego repo zależy z czego korzystasz później robisz instalacje najnowszego proton-ge pod steama a we właściwościach samej gry wybierasz te instancje

Zaloguj się aby komentować