A válasz egyszerű! Írjunk egy bash szkriptet! Sokat gondolkodtam, mire végül rájöttem arra, hogy filmezés közben legjobb a processzor (CPU) terhelését mérni és ha a terhelés magasabb egy átlagos nyugalmi állapotban levő CPU terhelési értékétől, akkor a bash szkript 1 pixellel elmozdítja az egeret, majd visszaállítja, ezzel újraindítva az X grafikai szerver nyugalmi állapot számlálóját, ami méri, hogy mennyi idő maradt a számítógép alvó állapotba való helyezéséig (ugyanez igaz a monitor kikapcsolására is, hibernációra, azaz az Energiakezelő opciójaira).
Sajnos a bash nem tud parancsokat küldeni az X szervernek (amin az Xfce, MATE, Cinnamon felület is fut), ezért a következő csomagot kell telepíteni
sudo apt install xautomation
Ez a csomag tartalmazza az xte parancsot, ami szimulálni tudja az egér és a billentyűzet műveleteket. Így pl. meg tudjuk mozdítani az egeret egy pixelnyire:
xte 'mousermove 1 1'
Majd visszaállítani:
xte 'mousermove -1 -1'
Wayland-en nem hiszem, hogy működnek a fenti parancsok.
A CPU terhelésének kiszámítását nem taglalom részletesen, mert ez benne van a bash szkriptben, csak annyit, hogy a /proc/stat adatai alapján minden másodpercben kiszámolja a szkript a CPU terhelését és ezen értékek 1 perces átlagát ezrelékekben, majd ha a ez az érték magasabb egy megadott alapértéknél akkor megmozdítja az egérmutatót.
A cat /proc/stat a következőket adja:
cpu 7757438 883 1432948 10899182 7618 0 237391 0 0 0 cpu0 1954763 246 343614 10608611 7474 0 88845 0 0 0 cpu1 1975930 210 312963 97441 25 0 66092 0 0 0 cpu2 1824151 193 435734 96054 69 0 37003 0 0 0 cpu3 2002593 232 340637 97075 48 0 45450 0 0 0 ...
A bash szkript csak az első (cpu) sor összesített cpu magok adataival számol.
Tapasztalat útján arra jöttem rá, hogy ezrelékekben könnyebb számolni és precízebb CPU terhelési adatokat kapok, elkerülve ezzel a lebegőpontos (nem egész, tört számokkal) való műveleteket.
Továbbá meghatároztam, hogy a saját gépemen a CPU nyugalmi állapotának a terhelése átlagosan 15 ezrelék percenként, azaz 1,5%. Ennek dupláját, tehát 30 ezreléket használok mint határértéket a bash szkriptben, mert egy egyszerű offline zenelejátszás a háttérben nem eredményez kevesebb mint 40 ezrelékes CPU terhelést. Az offline/online rádiózás, zenehallgatás, filmezés, letöltések, fájl másolások, frissítések és egyéb intenzív folyamatok garantáltan meghaladják a CPU 30 ezrelékes leterhelését percenkénti átlagban.
Végső soron mindenki határozza meg a saját gépén levő Linuxon a CPU nyugalmi állapotának terhelését az alábbi bash szkript segítségével, majd változtasson a határértéken. A szkript kiírja a percenkénti átlagos terhelést ezrelékekben.
Majd ha a határérték meg van állapítva és ennek megfelelően módosítva a szkript, akkor egy tetszőleges nevű, pl. cputerh.sh fájlban kell elmenteni az alábbi bash szkriptet, majd sudo chmod +x ~/cputerh.sh. A fájlnak a felhasználó gyökérkönyvtárában (~) kell lennie, mert ott található a .bashrc amit megnyitunk, majd hozzáadjuk a végén a következő sort, elmentjük, hogy automatikusan fusson a bash szkriptünk rendszerindításkor a háttérben a szöveges kimenetének átirányításával a semmibe (null).
. ~/cputerh.sh >/dev/null &
Hogy fut-e a szkriptünk, megnézhetjük a jobs paranccsal, ami az alábbi választ kell hogy kiírja:
[1]+ Running . ~/cputerh.sh > /dev/null &
Végül is az alábbiakban található a teljes bash szkript, kommentekkel ellátva:
#!/bin/bash #A másodperc számlálót 0-ra állítjuk sleep_time=0 #Egy végtelen While-do (Ameddig valami, csináld) ciklust indítunk while :; do # Get the first line with aggregate of all CPUs # Vegyük a /proc/stat táblázatának első vonalát, ami a CPU teljes terhelését mutatja cpu_now=($(head -n1 /proc/stat)) # Get all columns but skip the first (which is the "cpu" string) # Vegyük az összes oszlopot, de átugorjuk az elsőt, mert az nem tartalmaz adatot cpu_sum="${cpu_now[@]:1}" # Replace the column seperator (space) with + # Az oszlop elválasztó üres helyeket + jellel helyettesítjük (összeadjuk az értékeket) cpu_sum=$((${cpu_sum// /+})) # Get the delta between two reads #Vegyük a kettő leolvasott CPU terhelési érték különbségét (mostani mínusz előző) cpu_delta=$((cpu_sum - cpu_last_sum)) # Get the idle time Delta # Vegyük a CPU kettő leolvasott nyugalmi értékének különbségét (mostani mínusz előző) cpu_idle=$((cpu_now[4]- cpu_last[4])) # Calc time spent working # Kiszámoljuk a CPU munkaidejét cpu_used=$((cpu_delta - cpu_idle)) # Calc percentage # Kiszámoljuk a CPU terhelését százalékban cpu_usage=$((100 * cpu_used / cpu_delta)) # Keep this as last for our next read # A jelenleg kiszámolt értékeket megvigyázzuk a következő ciklusra mint régi értékek cpu_last=("${cpu_now[@]}") cpu_last_sum=$cpu_sum #Az alábbi kikommentelt vonal kiírja másodpercenként a CPU terhelését százalékban ha a # jelet eltávolítjuk # echo -n " CPU $cpu_usage%" # Minden kiszámolt CPU terhelési százalékot összeadunk és tárolunk 1 percig cpu_all=$((cpu_all + cpu_usage)) #Ha a lefutott ciklusok száma elérte az 59-et, azaz 1 percet akkor: if [ $sleep_time = 59 ]; then #Kiszámoljuk a CPU 1 perces terhelési átlagát ezrelékekben és kiírjuk az echo paranccsal cpu_avg=$((10 * cpu_all / sleep_time)) echo -n " -> 1perces CPU terhelési átlag: $cpu_avg‰ |" #Ha a terhelési átlag nagyobb 30 ezreléknél (HATÁRÉRTÉK!), megmozgatjuk az egeret 1 pixellel, majd visszaállítjuk if [ $cpu_avg -ge 30 ]; then xte 'mousermove 1 1' xte 'mousermove -1 -1' echo "egérmozgás" fi #Nullára állítjuk az alábbi értékeket az újabb ciklusra sleep_time=0 cpu_all=0 fi # Wait a second before the next read #Várunk 1 másodpercet sleep 1 #Összeadjuk a másodperceket sleep_time=$((sleep_time + 1)) #Itt a ciklus vége, indulhatunk újra done
Remélem hasznosnak bizonyul ez a kis szkript és ha van benne hiba, nyugodtan lehet írni és javítom. Jó kisérletezést!
Hozzászólások
Cinnamon
Beküldte T.István -
Értékelés:
Cinnamon alatt nem megy alvóba a gép, képernyővédő sem indul, ha videós alkalmazás fut. Legalábbis VLC, meg OBS studio futtatásakor tuti. Egyik általam telepített gépen sem.
Caffeine-indicator
Beküldte csuhas32 -
Értékelés:
Én a Caffeine-indicator-t szoktam elindítani és aktiválni, ha arra van szükségem, hogy ne induljon el a képernyővédő, ne zároljon a fiók és kapcsoljon ki a kijelző. Deaktiválni is kézzel kell, ez is igaz, de nekem azért megfelel.
Cinnamon
Beküldte dmaraci90 -
Értékelés: