14.8.2022, 9:36
(Tento příspěvek byl naposledy změněn: 15.8.2022, 7:40 uživatelem JiRo.
Důvod úpravy: Překlepy, doplnění informace.
)
Často potřebujeme, aby systém s Kodi postavený na *ELEC instalaci běžel trvale. Můžeme k tomu mít dva důvody:
Vypínání celého Kodi.
Předesílám, že to, co tu popisuji, není nijak dokonalé. A také, že není určené pro úplné laiky. Zvolil jsem nástroje a prostředky, které mi to řešení umožnily navrhnout a dostat do funkční podoby za minimálních časových nákladů. V první řadě jsem vytvořil dva sh scripty. Prvním se Kodi (a TV) vypne, to je kodioff.sh, a druhým zase zapne, tedy kodion.sh. Zatímco vypnutí Kodi je celkem jasné a jednoduché, při zapnutí jsem musel počítat s tím, že vše ovládám jen jedním tlačítkem a proto musím respektovat kontext. Pro zapnutí je tedy nutný test, zda už Kodi neběží. Pokud běží, tak script skončí bez jakékoliv akce. Je to nutné také proto, že pokud Kodi vypínáme, trvá to řádově několik vteřin, než se aplikace skutečně ukončí. Pro interakci s Kodi používám v uvedených scriptech standardní *ELEC aplikaci kodi-send. Není to úplně ideální, ale funguje to, a to je důležité.
Kodioff.sh
Součástí scriptu je vypnutí eventuálního přehrávání, zobrazení splash screen a nakonc zastavení skinu. Zobrazení splash screen je spíše jen pro efekt, u mého Kodi je tak jeho spuštění i zastavení doprovázeno vždy stejnou obrazovkou (zapnu Kodi, zapne se TV a téměř okamžitě se zobrazí splash screen, vypnu Kodi, zobrazí se na pár vteřin splash screen a vypne se TV). Zastavení skinu také nutné není, ale vyhnete se tak při následném spuštěním poblikávání obrazovky. Ono vlastně ani není třeba zastavovat přehrávání, ale dává to čas k tomu, aby se Kodi a případně i addon, které přehrávání spustil, před tím, než Kodi začneme "odstavovat", snadněji konsolidovaly.
Kodion.sh
Tady je to o krapet složitější, protože je třeba kontrolovat, zda Kodi, které chceme spustit, neběží. Na kontrolu má script parametr spuštění -c, který je-li zadán, test provede a pokud je vyhonoceno, že Kodi běží, nestane se nic. Pokud se script spustí bez testu, Kodi se spustí resp. restartuje bez ohledu na to, zda běží nebo ne. Využít se dá pak ten příkaz i jinak, nejen ve zde uvedeném příkladu.
Jak scripty spouštět?
Pro start obou scriptů používám tlačítko POWER na ovladači. Používám zásadne taková DO, která umožňují POWER tlačítko naučit libovolný IR povel.
Spuštění scriptu kodioff.sh je celkem jednoduché, mapuji ho v Kodi. Například takto:
Se scriptem kodion.sh je to o něco složitější. Potřebujeme, aby se spustil i když Kodi neběží. Pro to tedy používám zachycení stisku tlačítka v systému. Pro to v *ELEC existuje celkem dobře známý postup.
Pro přemapování tlačítka v systému musíme jeho stisk zachytit. To se dosáhne vytvořením souboru mapování, např. keymaps.cfg. Ten pro naše účely může vypadat takto:
Je vidět, že stiskem tlačítka KEY_POWER (což je metakód tlačítka POWER na DO) se spustí výše uvedený script kodion.sh s parametrem, -c.
Abychom zachycení stisku a definovanou akci provedli, musíme ještě soubor s mapováním zaregistrovat. Toho dosáhneme tím, že do soubru autoexec.sh vložíme řádky:
Že je třeba po tom všem dát restart *ELEC, nemusím zdůrazňovat.
Se startem záznamu stisknuto POWER na DO, start Kodi, v 23 vteřině opět stisknuto tlačítko POWER, zahájeno ukončování Kodi. Záznam aplikace VNC Viewer na W10.
Případné nejasnosti vysvětlím v diskusi. Nechci popis příliš nafukovat, přeci jen je to už dost speciální, takže se o to asi nebudou snažit úplní laici. Pro ostatní snad prostý výčet jednotlivých kroků a stručné ukázky postačí.
- na pozadí běží aplikace (např. v docker), které vypínat nechceme (Home automation apod.),
- systém bychom vypnout/uspat mohli, ale potřebujeme, aby se v nastaveném čase sám zapnul/probudil a HW, na kterém *ELEC běží, to neumí (častý případ značné části HW, které nemají RTC).
Vypínání celého Kodi.
Předesílám, že to, co tu popisuji, není nijak dokonalé. A také, že není určené pro úplné laiky. Zvolil jsem nástroje a prostředky, které mi to řešení umožnily navrhnout a dostat do funkční podoby za minimálních časových nákladů. V první řadě jsem vytvořil dva sh scripty. Prvním se Kodi (a TV) vypne, to je kodioff.sh, a druhým zase zapne, tedy kodion.sh. Zatímco vypnutí Kodi je celkem jasné a jednoduché, při zapnutí jsem musel počítat s tím, že vše ovládám jen jedním tlačítkem a proto musím respektovat kontext. Pro zapnutí je tedy nutný test, zda už Kodi neběží. Pokud běží, tak script skončí bez jakékoliv akce. Je to nutné také proto, že pokud Kodi vypínáme, trvá to řádově několik vteřin, než se aplikace skutečně ukončí. Pro interakci s Kodi používám v uvedených scriptech standardní *ELEC aplikaci kodi-send. Není to úplně ideální, ale funguje to, a to je důležité.
Kodioff.sh
Kód:
#! /bin/sh
kodi-send -a "PlayerControl(Stop)" -a "ReplaceWindow(1190)" -d 5000 -a "UnloadSkin()"
echo 'standby 0' | cec-client -s -d 1
systemctl stop kodi
Kodion.sh
Kód:
#! /bin/sh
if [ "$*" == "-c" ] ; then
if [ $(ps | grep -c '/usr/lib/kodi/kodi.bin --standalone -fs') == 1 ] ; then
echo 'on 0' | cec-client -s -d 1
systemctl restart kodi &
fi
else
echo 'on 0' | cec-client -s -d 1
systemctl restart kodi &
fi
Jak scripty spouštět?
Pro start obou scriptů používám tlačítko POWER na ovladači. Používám zásadne taková DO, která umožňují POWER tlačítko naučit libovolný IR povel.
Spuštění scriptu kodioff.sh je celkem jednoduché, mapuji ho v Kodi. Například takto:
Kód:
<?xml version="1.0" encoding="UTF-8"?>
<keymap> <!-- 99-power.xml for Remote control keyboard style with IR POWER key - 2022-07-22 by JiRo -->
<global>
<remote>
<power>System.Exec("/storage/.config/scripts/system/kodioff.sh")</power>
</remote>
</global>
</keymap>
Pro přemapování tlačítka v systému musíme jeho stisk zachytit. To se dosáhne vytvořením souboru mapování, např. keymaps.cfg. Ten pro naše účely může vypadat takto:
Kód:
begin
prog = irexec
button = KEY_POWER
config = /storage/.config/scripts/system/kodion.sh -c
end
Abychom zachycení stisku a definovanou akci provedli, musíme ještě soubor s mapováním zaregistrovat. Toho dosáhneme tím, že do soubru autoexec.sh vložíme řádky:
Kód:
killall irexec
irexec -d /storage/.config/keymaps.cfg
Se startem záznamu stisknuto POWER na DO, start Kodi, v 23 vteřině opět stisknuto tlačítko POWER, zahájeno ukončování Kodi. Záznam aplikace VNC Viewer na W10.
Případné nejasnosti vysvětlím v diskusi. Nechci popis příliš nafukovat, přeci jen je to už dost speciální, takže se o to asi nebudou snažit úplní laici. Pro ostatní snad prostý výčet jednotlivých kroků a stručné ukázky postačí.