Mondtam már, hogy szeretek legózni?
Újabb eszkábáláson vagyok túl.
Tehát, itt a málna, (méghozzá a 3B+ változata) elrejtve a polc alatt.
Rádugtam a TV HDMI bemenetére, ez egy elég régi Panasonic LCD.
De van benne Viera Link nevű funkció, ami állítólag a CEC beceneve a Panasonic-nál.
Kiindulásként adott volt a málna, amit eredetileg headless telepítettem egy szkenner miatt, Raspbian 10 (buster) fut rajta.
Telepítettem hát a Kodit, és a cec-utils csomagot:
apt install kodi cec-utils
Lusta vagyok annyi sudo-t írni, ezért minden telepítési lépést root-ként csinálok (sudo su, aztán exit, ha befejeztem).
Ahhoz, hogy a Kodi elinduljon, kell egy unit file, tehát ezt létrehoztam /etc/systemd/system alatt az alábbi tartalommal:
[Unit]
Description = Kodi Media Center
After = remote-fs.target network-online.target
Wants = network-online.target
[Service]
User = pi
Group = pi
Type = simple
ExecStart = /usr/bin/kodi
Restart = on-abort
RestartSec = 5
[Install]
WantedBy = multi-user.target
Igen, jól látszik, hogy NEM a "standalone" változatot indítom, ennek az az oka, hogy a standalone csak shutdown-t tud csinálni, ha letelik az energiakezelésben bállított idő, míg a normál, "app" verzió képes simán kilépni. Nekem ez a viselkedés kell majd.
systemctl daemon-reload
systemctl enable kodi
Reboot után figyeltem, elindul-e? És igen, teljesen jó, nem kell hozzá külön X-et is feltenni.
Módosítottam az alapértelmezett "Estuary" skin-t egy picit, hogy a kikapcsoló gomb simán csak kilépjen, ne ne pedig a "shutdown" menüt hozza föl, ahol ki is lehet kapcsolni a Raspberry-t.
Mert ugyanis, ha a Pi(cike) leáll, csak akkor tudom újraindítani, ha áramszünetet generálok neki.
Ez nem jó.
Tehát:
nano /usr/share/kodi/addons/skin.estuary/xml/Home.xml
Az a rész, ahol az ActivateWindow(ShutdownMenu) van azt kicserélem XBMC.Quit() -re, vagyis így fog kinézni:
<include content="IconButton">
<param name="control_id" value="804" />
<aram name="onclick" value="XBMC.Quit()" />
<aram name="icon" value="icons/power.png" />
<param name="label" value="$LOCALIZE[33060]" />
</include>
Na így már nem lehet "véletlenül" leállítani az egész málnást, csak kilépni a Kodiból.
A
cec-client -m
paranccsal előzőleg megnéztem, hogy a TV-m miket üzen?
Ilyenek jönnek:
opening a connection to the CEC adapter...
starting a monitor-only client. use 'mon 0' to switch to normal mode
No device type given. Using 'recording device'
CEC Parser created - libCEC version 4.0.4
no serial port given. trying autodetect:
path: Raspberry Pi
com port: RPI
opening a connection to the CEC adapter...
DEBUG: [ 234] Broadcast (F): osd name set to 'Broadcast'
DEBUG: [ 234] Open - vc_cec initialised
DEBUG: [ 234] logical address changed to Free use (e)
NOTICE: [ 235] connection opened
waiting for input
DEBUG: [ 235] processor thread started
TRAFFIC: [ 10430] >> 0f:a0:00:80:45:20:00:00
DEBUG: [ 10430] TV (0): vendor = Panasonic (008045)
TRAFFIC: [ 10430] >> process after replacing vendor handler: >> 0f:a0:00:80:45:20:00:00
DEBUG: [ 10430] device TV (0) status changed to present after command vendor command with id
DEBUG: [ 10430] replacing the command handler for device 'TV' (0)
DEBUG: [ 10430] >> TV (0) -> Broadcast (F): vendor command with id (A0)
TRAFFIC: [ 10430] >> 0f:a0:00:80:45:20:00:00
DEBUG: [ 10430] TV (0): power status changed from 'unknown' to 'on'
DEBUG: [ 10430] initiator 'Broadcast' is not supported by the CEC adapter. using 'Free use' instead
TRAFFIC: [ 10430] << e0:89:10:02:ff:ff:00:05:05:45:55:5c:58:32
DEBUG: [ 10430] >> TV (0) -> Broadcast (F): vendor command with id (A0)
DEBUG: [ 10790] logical address changed to Broadcast (f)
DEBUG: [ 10970] logical address changed to Free use (e)
DEBUG: [ 11061] logical address changed to Broadcast (f)
DEBUG: [ 11241] logical address changed to Free use (e)
...és így tovább.
Ami innen fontos lehet, az a bekapcsolás:
"TV (0): power status changed from 'unknown' to 'on'"
és ami igazán érdekes számomra, az HDMI bemenet kiválasztása:
DEBUG: [ 15475] >> TV (0) sets stream path to physical address 1000
Ez egyértelműen filmnézési szándékra utal, ha odakapcsolok, ezért azt csináltam meg, hogy
-Pi(cike) indulásakor Kodi is rajtol
-Kodi 15 perc inaktív idő után kilép, így nem terheli a CPU-t naphosszat fölöslegesen
-Mikor A TV-n HDMI1-et kiválasztom, Kodi automatice újra elrajtol.
Ehhez először is a Kodi-ban beállítottam az energiakezelési opcióknál, hogy lépjen ki 15 perc inaktivitás után.
/opt alá berittyentettem az alábbi szkriptet, ami majd a HDMI felől érkező CEC üzeneteket olvassa, és ezt a művelet befejezi, mikor éppen a HDMI1-re váltok a TV-n. Tehát a szkript:
#!/bin/sh
lookfor='TV (0) sets stream path to physical address 1000'
waiting=true;
while $waiting; do
read cecinput
case $cecinput in
*$lookfor*) waiting=false;
/usr/bin/killall cec-client;
esac
done
Ezt úgy kell elindítani, hogy a cec-client kimenetét bele kell csatornázni, tehát valahogy így:
cec-client | /opt/waitfortv
Ez egyébként így beírva szépen állni látszik, majd mikor a HDMI1-et kiválasztom, visszaadja a promptot.
Tehát nekem pont jó :)
Ezután módosítom egy picit a /usr/bin/kodi indító szkriptet, hozzáírok egy feltételt:
-Ha a Kodi kilépési értéke 0, akkor vagy én nyomtam meg a kikapcsológombját, vagy letelt az üresjárati idő, tehát nem valami hiba, kress, stb. miatt lépett ki.
-Ez esetben újra el fogom indítani a kodi-t később, amikor a TV-n ismét kiválasztottam a HDMI1-et.
Ez így néz ki:
if [ $(($RET == 0)) = "1" ]
then #normal exit invoked by user or energy saving
LOOP=1
# set loop to restart kodi after TV switched on
/usr/bin/cec-client |/opt/waitfortv
fi
Az a rész, ahol a Kodi binárisa elindul, így fog kinézni a módosítás után:
LOOP=1
while [ $(( $LOOP )) = "1" ]
do
[ -f "${APPORT_CORE}" ] && rm -f "${APPORT_CORE}"
LOOP=0
${KODI_BINARY}${postfix} --lircdev /var/run/lirc/lircd $SAVED_ARGS
RET=$?
if [ $(($RET == 0)) = "1" ]
then #normal exit invoked by user or energy saving
LOOP=1
# set loop to restart kodi after TV switched on
/usr/bin/cec-client |/opt/waitfortv
fi
if [ $(( $RET == 65 )) = "1" ]
then # User requested to restart app
LOOP=1
elif [ $(( ($RET >= 131 && $RET <= 136) || $RET == 139 )) = "1" ]
then # Crashed with core dump
print_crash_report
fi
done
A kényelemhez tartozik még, hogy a Kodiba telepítettem a "Keymap Editor" kiegészítőt, amivel a lejátszás közben gyakran használt gombócokat hozzárendeltem a TV távirányítóján számomra elérhető gombokhoz:
Globális/playback:
Play/pause : piros gomb (251)
Fullscreen video/playback:
Play: zöld gomb (252)
Fast forward: kék gomb (254)
Rewind: sárga gomb (253)
Stop: Return gomb (216)
Piszok elégedett vagyok az eredménnyel!
Kell valakinek egy Popcorn Hour? :)))