Fórum Root.cz

Hlavní témata => Software => Téma založeno: panRajce 26. 06. 2019, 11:50:21

Název: Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 26. 06. 2019, 11:50:21
Ahoj,
snažím se najít, jestli pro Conky (nebo samostatně) existuje skript, který umožní při určité události vypnout PC?

Přesněji potřebuji
- při sledování hodnoty nvidia-settings - GPU Utilization bude nižší jak 10% po dobu např. 60sec, pak vypnout počítač
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: Ondra Satai Nekola 26. 06. 2019, 13:30:16
Do conky bych urcite nic takoveho nerval, to slouzi k necemu uplne jinemu.

Nejprimocarejsi reseni je asi napsat si script + unitu do systemd.
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 26. 06. 2019, 13:57:14
Chápu  :) částečně.
Citace
napsat si script + unitu do systemd.
... prostě samostatně bežící proces.

No já jsem uvažoval, že když už mi běží jako jeden proces Conky, který neustále v intervalech sleduje zvolené hodnoty, tak bych "ušetřil" na funkci zacyklování.

Ale na rovinu říkám, že skriptovat neumím. Spíše kdyby byl nějak příklad s danou funkcí ("vypnutí PC když"), který bych svépomocí nebo jinou pomocí modifikoval.
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: LarryLin 26. 06. 2019, 16:11:09
https://www.reddit.com/r/Ubuntu/comments/2vz6tz/suspend_on_inactivity_where_inactivity_is/

Řešili tam suspend při nízké aktivitě CPU. Snad ti to pomůže.
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 12. 07. 2019, 13:33:46
Takže se snažím dál .... přes doporučený Cron.
Vše je relativně funkční, včetně vypnutí ...... ale jen pokud skript pustím přes terminál nebo dvojklikem!
Z Cronu prostě odmítá. Zkusil jsem zaměnit nvidia-settings za nvidia-smi se sledováním rychlosti větráku (nvidia-settings mi nešel výpis do logu). U SMI funguje i výpis hodnot do logu přes Cron. Ale i když proběhne celý proces, tak na konci se PC nevypne.

Trochu to tu zahltím kódy. Třeba někdo bude mít ještě nějaký nápad, nebo odhalí mojí začátečnickou chybu.

PS: .... ano, uživatelské jméno mám "uzivatel"  :-X

1) Cron tabulka (cronetab -l)
Kód: [Vybrat]
*/5 * * * * /home/uzivatel/Install/Octane/Crontab/GPU-off.sh
2) script (včetně nastavení spustitelnosti), rozhodně by šel napsat úhledněji a pro zfunkčnění z něj lecos ještě vyhážu :) .... ECHO mám kvůli kontrole průběhu skriptu
Kód: [Vybrat]
#!/bin/bash
echo "1) prvni overeni" >> $HOME/Install/Octane/Crontab/GPU-off.log
GPU1=$(exec nvidia-smi --format=csv,noheader,nounits --id=0 --query-gpu=fan.speed)
echo $GPU1 >> $HOME/Install/Octane/Crontab/GPU-off.log

if [[ ${GPU1} -le 40 ]]; then
sleep 60
echo "2) druheee overeni" >> $HOME/Install/Octane/Crontab/GPU-off.log
GPU2=$(exec nvidia-smi --format=csv,noheader,nounits --id=0 --query-gpu=fan.speed)
echo $GPU2 >> $HOME/Install/Octane/Crontab/GPU-off.log
if [[ ${GPU2} -le 40 ]]; then
sleep 60
echo "3) VYPNUTI" >> $HOME/Install/Octane/Crontab/GPU-off.log
GPU3=$(exec nvidia-smi --format=csv,noheader,nounits --id=0 --query-gpu=fan.speed)
echo $GPU3 >> $HOME/Install/Octane/Crontab/GPU-off.log
if [[ ${GPU3} -le 40 ]]; then
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.PowerOff boolean:false
fi
fi
fi

... všechno proběhne .... usuzuji z toho, že postupně dochází k výpisům do logu. Kdyby nebyl schopen vzít hodnotu pro fan.speed, tak by skončil prvním výpisem a ten by se stále opakoval, tak jak by Cron spouštěl script po 5min. Ale po výpisu do logu VYPNUTI stejně nedojde k vypnutí PC.

zkoušel jsem dát i řádek
Kód: [Vybrat]
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.PowerOff boolean:false
jo a v /var/log/syslog je tohle
Kód: [Vybrat]
Jul 12 13:15:01 Ubuntu CRON[16400]: (uzivatel) CMD (/home/uzivatel/Install/Octane/Crontab/GPU-off.sh)
Jul 12 13:17:01 Ubuntu CRON[19916]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jul 12 13:17:01 Ubuntu CRON[16399]: (CRON) info (No MTA installed, discarding output)

Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: k3dAR 12. 07. 2019, 16:16:44
mas nejakej duvod vypnuti provadet pres dbus misto prikazu: poweroff ?
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 12. 07. 2019, 20:54:50
toto je jedna z verzí
zkoušel jsem i
Kód: [Vybrat]
poweroffbohužel nefunguje nic ........ dokonce i když na konec zadám třeba shutdown nebo blender nebo gedit, prostě asi nic se na konci nespustí
Na Ubuntu.cz už jsou ze mne také na prášky  ;D
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: k3dAR 12. 07. 2019, 22:40:25
tak blender nebo gedit se pocitam nepustej, over si ze ta posledni vetev se opravdu pousti
Kód: [Vybrat]
if [[ ${GPU3} -le 40 ]]; then
echo  vypnu >> /tmp/GPU-off.log
poweroff
fi
pripadne ten poweroff poustej s presmerovanim stdout i stderr do souboru
poweroff &>/tmp/GPU-off.poweroff.log

edit: zmena $HOME/Install/Octane/Crontab/ => /tmp/ protoze pokud nepoustit v user cron, tak $HOME nezna
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 13. 07. 2019, 12:49:38
mám tam něco podobného
Kód: [Vybrat]
if [[ ${GPU3} -le 40 ]]; then
echo $(date +"%T") >> $HOME/Install/Octane/Crontab/GPU-off.log
poweroff
fi
čas to do logu vypíše, ale PC běží dál, nevypne se.
Jaký jiný příkaz mohu ještě vyzkoušet, zda je schopen se spustit ?
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 13. 07. 2019, 13:43:51
Ještě mi poradili v daném skriptu spustit samostatný skript pro vypnutí ......... ale to také nefunguje.

Tak mne ještě napadlo. Co ten/ty skripty přesunout někam jinam ? Který umístění by pro ně bylo vhodné?
Ta moje cesta "$HOME/Install/Octane/Crontab/" asi není moc šťastné řešení.
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: veskotskujehnusne 13. 07. 2019, 14:12:30
sudo visudo

a přidej si tam:
%sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot

Dej si toho uživatele do sudo skupiny a potom to jen spouštěj se sudem.

Důvod, proč se to chová tak jak se to chová si můžeš přečíst zde:
https://askubuntu.com/questions/361988/why-do-we-need-to-be-root-in-terminal-for-shutdown-and-restart (https://askubuntu.com/questions/361988/why-do-we-need-to-be-root-in-terminal-for-shutdown-and-restart)
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: k3dAR 13. 07. 2019, 19:10:28
az ted mi doslo (kdyz uz si neodpovedel) ze to asi poustit user cronem, pak tedy jak pise veskotskujehnusne, nebo jak si zkousel pres dbus...

nicmene mas nejaky duvod PROC to poustit v user cronu a ne system cronu? tam by samozrejme poweroff bez sudo a bez nastaveni sudoers musel fungovat...

a mas nejake duvod (krome toho ze chces aby ten kdo ti radi byl z tebe na prasky ;-) ze kdyz napisu zkus A a B, ze zkusis jen A a napises co mas zkusit dal? aneb:
pripadne ten poweroff poustej s presmerovanim stdout i stderr do souboru
poweroff &>/tmp/GPU-off.poweroff.log

pripadne si zprovozni mail pro local roota aby ti error cronu (resp. jakejkoliv vystup skriptu pousteneho cronem) chodil do mailu (nebo bez zprovozneni zkouknout zda mas neco v /root/dead.letter a/nebo v /var/mail/root ?
Název: Re:Skript pro vypnutí PC: v Conky nebo jinak?
Přispěvatel: panRajce 14. 07. 2019, 15:16:37
@k3dAR

a měl jsi pravdu? (jako vždycky)
zrušil jsem user crontab a zadal jsem úkol do sudo crontab
před poweroff ve skriptu jsem dal také sudo a už to maká !!!!

včera jsem chtěl psát, že i když jsem do dal do sudo crontab, tak mi vůbec nejde ani ten script, protože se mi nic nezapisovalo do logu, ale asi jsem tam měl něco blbě. Dneska jsem na to sednul s čistou hlavou a první test proběhl zatím bez problému.