Archiv rubriky: Linuxové parádičky

Linuxové parádičky obsahují většinou návody na složitější úkony, které jsem pracně dohledal či vymyslel a nerad bych o ně přišel, jsou tedy především pro mě, ale někomu se mohou také hodit. Nezříkda se však setkám s věcmi, které jsou na OS od MS nemyslitelné ale skvělé, to jsou pak parádičky, co to může být? Linux v routeru, Linux v Raspberry PI, který je pořád Linuxem, tak jak jsem s ním zvyklý pracovat či se v něm povrtat na PC, to mi přijde úžasné.

TVheadend na starém počítači

Na starém Pentiu III mi běží skladiště fotek, které se mi již nevejdou do notebooku, na diskovém poli. Druhá hlavní služba, kterou poskytuje je stream televizních kanálů do domácí sítě. V minulosti jsem používal vlastní řešení v podobě getstream, ale obsluha byla zbytečně složitá a nahrávání pomocí gnome-dvb-daemon stálo za houby. Pak jsem objevil XBMC a TVheadend. Vše funguje, jen bych rád, aby se počítač sám zapínal před nahráváním nočních pořadů. Bohužel suspend na něm nefunguje korektně, zato má v BIOS Wake on Alarm. S tím už jsem jednou koketoval a nefungovalo to, protože bylo třeba zaškrtnou i Wake on PME, pak se rozběhlo i WoL. Teď skriptování.

Tady máme pěkný návod, který se ale věnuje uspávání, to se mě nehodí, zkoušel jsem různé nejapné nápady a nakonec se poučil na odkazu k MythTV z výše zmíněné stránky a utvořil hybrid mezi oběma. Nuže:

nano /etc/init.d/wakeup pojmenujte libovolně nekonfliktně, já jsem to ponechal, abych nemusel měnit celý skript.

Vložte řádky:

#!/bin/sh

### BEGIN INIT INFO
# Provides: wakeup
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: Start NTP daemon
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

. /lib/lsb/init-functions

NAME=wakeup

case $1 in
	stop)
		# Make it wakeup from ethernet
		ethtool -s eth0 wol g
		echo PCI0 >/proc/acpi/wakeup
		echo 1 > /timer

		# bootup system 60 sec. before timer
		safe_margin=240

		# modyfy if different location for tvheadend dvr/log path
		cd ~hts/.hts/tvheadend/dvr/log

		######################

		start_date=0
		stop_date=0

		current_date=`date +%s`

		for i in $( ls ); do
			tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
			tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`

			# check for outdated timer
			if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then

				# take lower value (tmp_start or start_date)
				if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
					start_date=$tmp_start
					stop_date=$tmp_stop
				fi
			fi
		done

		wake_date=$((start_date-safe_margin))

		echo $start_date >> /timer
		echo $wake_date >> /timer

		# set up waleup alarm
		if [ $((start_date)) -ne 0 ]; then
			echo 2 >> /timer
			echo 0 > /sys/class/rtc/rtc0/wakealarm
			echo $wake_date > /sys/class/rtc/rtc0/wakealarm
		fi
		exit 0
	;;
	*)
		echo "Usage: $0 {stop}"
		exit 2
	;;
esac

Spusťte: chmod 755 /etc/init.d/wakeup a update-rc.d wakeup defaults
Nyní se před každým vypnutím a restartem (a přihlášení jediného uživatele, když jsem tam dal i jedničku) zapíše do nvram čas probuzení počítače.

Po každé nahrávce má počítač nařízeno vypnout, ale to někdy jistě nebude rozumné, pojistíme se:
nano ~hts/shutdown.sh
Obsahuje znovu ten ověřovací kód, lehce pozměněný konec:

#!/bin/sh

# Here you can invoke your script for recording's post-processing
#exec <your_script.sh>

sleep 20
safe_margin=240
cd ~hts/.hts/tvheadend/dvr/log

######################

start_date=0
stop_date=0

current_date=`date +%s`

for i in $( ls ); do
	tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d ","`
	tmp_stop=`cat $i | grep '"stop":' | cut -f 2 -d " " | cut -f 1 -d ","`

        # check for recording now
        if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -lt $((current_date)) ]; then
                exit 0
        fi

	# check for outdated timer
	if [ $((tmp_stop)) -gt $((current_date)) -a $((tmp_start)) -gt $((current_date)) ]; then

		# take lower value (tmp_start or start_date)
		if [ $((start_date)) -eq 0 -o $((tmp_start)) -lt $((start_date)) ]; then
			start_date=$tmp_start
			stop_date=$tmp_stop
		fi
	fi
done

wake_date=$((start_date-safe_margin))
idle=$((current_date+1200))

# >0 is when no recording is planned, wake_date is sub zero value
if [ $((wake_date)) -lt $((idle)) - $((wake_date)) -gt 0]; then
        exit 0
fi

#sudo /usr/sbin/pm-suspend &
sudo /sbin/shutdown -h now &

Tento soubor musí být spustitelný uživatelem hts, resp. tím, který spouští tvheadend a zařadíte jej ve webovém rozhraní do postprocessingu. Zajistí, že se počítač nevypne, pokud se právě nahrává, či další nahrávka bude začínat do dvaceti minut.

Ráno moudřejší večera: EASYCAP — čtyřkanálový zachytávač videa

Včera dorazila ona zásilka z Číny, ve které byl čtyřkanálový zachytávač videa, nestál moc, na rozdíl od nabídek v naší zemi a tak mi příliš nevadilo pokud by nefungoval, šel jsem do toho i s tímto rizikem. Podle lsusb:

ID 1c88:0007 Somagic, Inc. SMI Grabber (EasyCAP DC60+ clone) (no firmware) [SMI-2021CBE]

jsem vyhledal stránku http://code.google.com/p/easycap-somagic-linux/ na které byly připraveny Debianí balíčky, chvatem jsem je nainstaloval a pak teprve koukal jak to funguje. Musím vzít CD a přes wine spustit Driver/Setup.exe a nainstalovat ovladače pro Windows, z nich somagic-extract-firmware vypreparuje ovladač, somagic-init přepíše identifikátor zařízení a somagic-capture pustí do oběhu video. Nebylo to tak jednoduché.

Kdybych neprováděl tyhle skopičiny v noci ušetřil bych si čas a námahu. Když to nefungovalo z balíků, stáhnul jsem si zdrojáky, to nepomohlo, stahoval jsem různé části kódu z tamního repozitáře a v jednu hodinu ráno práci vzdal. Nakonec stačilo jen gitem stáhnout celý archiv, zajít do tool a user a tam spustit make a díky práci přispěvatelů do kódu hned všechno fungovalo všechno až na tři ze čtyř vstupů, zatím totiž běží zařízení pod identifikací jiného zařízení jen s jedním video vstupem. Takže zapojit do čísla 3 a spustit příkaz:

sudo somagic-capture | mplayer -demuxer rawvideo -rawvideo „pal:format=uyvy:fps=25“ -aspect 4:3 –

Teď se budu snažit o součinnost s programem motion.

Zásilka z Číny

Dnes dorazil balíček z dx.com s hlavní várkou věciček na bastlení. Jmenovitě ultrazvukový měřič vzdálenosti (80 Kč), modul reálného času (90 Kč) a krokový motor s řadičem ULN2003 (90 Kč za sadu). Ceny jsou u nás nesrovnatelně vyšší, pokud se vůbec dá věc sehnat a navíc i kdybych si nechal poslat každou věc zvlášť, neplatil bych za poštovné nic.
Krokový motor nebylo obtížné zprovoznit pomocí návodu ze stránek http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/

Tamní kód lze použít po upravě připojených GPIO pinů, autor článku uvádí, že připojil IN# postupně k pinům 18, 22, 24, 26. Mě však pin 26 odmítal poslušnost a tak jsem jej nahradil pinem 25, který se kódu také vyskytuje. Okopíruji si pro své potřeby kód původního autora a vymažu pro můj osmikrokový motor nepotřebné části.

#-----------------------------------
# Name: Stepper Motor
#
# Author: matt.hawkins
#
# Created: 11/07/2012
# Copyright: (c) matt.hawkins 2012
#-----------------------------------
#!/usr/bin/env python


# Import required libraries
import time
import RPi.GPIO as GPIO


# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)


# Define GPIO signals to use
# Pins 18,22,24,26
# GPIO24,GPIO25,GPIO8,GPIO7
StepPins = [18,22,24,25]


# Set all pins as output
for pin in StepPins:
  print "Setup pins"
  GPIO.setup(pin,GPIO.OUT)
  GPIO.output(pin, False)


# Define some settings
StepCounter = 0
WaitTime = 0.1


# Define advanced sequence
# as shown in manufacturers datasheet
StepCount = 8
Seq = []
Seq = range(0, StepCount)
Seq[0] = [1,0,0,0]
Seq[1] = [1,1,0,0]
Seq[2] = [0,1,0,0]
Seq[3] = [0,1,1,0]
Seq[4] = [0,0,1,0]
Seq[5] = [0,0,1,1]
Seq[6] = [0,0,0,1]
Seq[7] = [1,0,0,1]


End = 200
Steps = 0


# Start main loop
while Steps<End:


  for pin in range(0, 4):
    xpin = StepPins[pin]
    if Seq[StepCounter][pin]!=0:
      print " Step %i Enable %i" %(StepCounter,xpin)
      GPIO.output(xpin, True)
    else:
      GPIO.output(xpin, False)


  StepCounter += 1
  Steps += 1


  # If we reach the end of the sequence
  # start again
  if (StepCounter==StepCount):
    StepCounter = 0
  if (StepCounter<0):
    StepCounter = StepCount


  # Wait before moving on
  time.sleep(WaitTime)


for pin in StepPins:
 GPIO.output(pin, False)
exit(0)

Na konec přidávám uvolnění pinů, pokud se podle původního návodu ukončí běh stiskem Ctrl+C, motor zůstane viset v jedné poloze a zbytečně se hřeje (možná je to ale na něco dobré). Plánuji však místo Pythonu programovat v C, které jsem kdysi ovládal a teď je možnost znalosti oprášit, Tento program je velice jednoduchý, ale jako první náhled na věc je neocenitelný.

Další zprovozněnou věcí je RTC modul pro udržování přibližného času, i bez přítomnosti internetové přípojky, RPi totiž nemá baterku a po nastartování bere poslední uložený čas, tedy ten při vypnutí.
V obchodě jsem si vybral ten označený nápisy mini_RTC a JY_MCU, obsahuje čip DS1307Z a po hodině ( spíš dvou nebo třech hodinách) hledání a škubání vlasů jsem zjistil, že volba tohoto byla správná. Stačí vzít dráty a připojit konektor VCC na 5V pin (02 nebo 04), začínal jsem totiž s napájením 3,3V a to hodinky prostě sloužit nemohou. GND typicky na zem SDA na SDA pin (03) a SCL na SCL pin (05) pozn.: RPi rev. 2.

Pokud jste ještě se sériovým rozhraním nepracovali budete nejspíš potřebovat nainstalovat nástroje:

sudo aptitude install i2c-tools

Dále si povolit následující moduly:

sudo modprobe i2c-dev
sudo modprobe i2c-bcm2708
sudo modprobe rtc-ds1307

Máte-li revizi 2 jako já pište následující, pro revizi 1 je na konci nula:

sudo i2cdetect -y 1

Vypíše nalezená zařízení, hodinky mají adresu 68, takže spustě následující příkazy:

sudo bash
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
exit

A pokud se zadařilo, následující příkaz sdělí, že v hodinách je binec:

sudo hwclock -r

Pokud máte aktualizovaný čas např. přes ntp, zapiště jej do hodinek:

sudo hwclock -w

Aby se RPi dívalo na čas zbývají ještě drobnosti, do souborů zapsat to co už jsme provedli, tak aby se počítač staral sám:

Do /etc/modules:

sudo nano /etc/modules

Přidat řádky:

i2c-bcm2708
i2c-dev
rtc-1307

Do /etc/rc.local:

sudo nano /etc/rc.local

přidat řádky před řádek exit 0:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s

A to je vše. Nemám to ale ze své hlavy, všchno jsem našel pěkně úhledně sepsané v návodu od adafruit, který si můžete prohlédnout na adrese: http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi. Tímto jim děkuji. Thanks to adafruit.

Ultrazvukový měřič vzdálenosti si nechám na jindy, nemám totiž ještě sadu odporů. I tak mě ještě čeká zprovoznit čtyřkanálový digitizér videa který mě vyšel na 180 Kč, v ČR pokud je k dostání tak hodně přes 1000 Kč, osobně jsem si v minulosti zakazoval nakupovat čínské výrobky, ale za zdejší ceny bych si prostě nic nekoupil, neměl bych na to.

Raspberry Pi

Raspberry zatím čeká na svoje využití jako průmyslová kamera nebo autonomní sportovní časomíra. Čeká se především na elektronické součástky potřebné k napájení počítače a periferií a jejich připojení k RPi. V lepší návodech napsaných lidmi co už něco zbastlili bývají hodnoty odporů, diod, potenciometrů, když se ale podíváte do obchodu zjistíte, že odpor má další tři vlastnosti, o kterých se už nikdo nezmiňuje, dalším hledáním se doba protahuje a protahuje. Snad během týdne seženeme vše potřebné, abychom pod stromečkem mohli letovat pájkou.

Zatím jsme ozkoušeli základní věci, RPi je přetaktované na 800 MHz, má však stále pomalou odezvu, pokud hodláte použíta počítač pro běžnou práci a nechcete co chvíli být byť jen na sekundu zdržováni, asi s Raspberry nevydržíte. Přehrávání filmečku Big Buck Bunny v rozlišení 1080p přes HDMI v televizoru funguje naprosto bez problémů, se zvukem byl problém, že i po explicitním navolení výstupu v televizoru nebylo ničeho slyšet, pomohla až volba výstupu v omxplayer -o hdmi. Nevím, co za to může, jiné programy jsem nezkoušel. Zvládá i bezdrátové připojení, bohužel nabíječka na telefon dává jen 700 mA a tak se Raspberry restartuje při zasunutí žravého USB dongle. Dále nemám vyzkoušeno, ale myslím, že by nebyl problém po instalaci XBMC a zapojení do USB na televizoru provozovat RPi jako HTPC, pokud se člověk obejde bez bleskurychlé reakce, zato získá nízkou spotřebu a univerzálnost linuxového stroje.

Raspberry Pi

Právě dorazila další Linuxová krabička, nové Raspberry Pi s 512 MB RAM, ještě nemám ani Raspbian na SD kartě, jelikož jsem nečekal, že přijde dva dny po objednání od českého prostředníka britského Farnell, http://www.rothsware.cz/, u kterého je možné zakoupit na dobírku. Už bude dokončený torent s Raspbianem a pak skusím připojit RPi k televizi, k síti, nahradí notebook pro mojí USB časomíru a další. Transmission právě cinklo, jde se na věc…

OpenWRT a SANE

Dnes jsem se pustil do souboje se SANE a all-in-one HP Officejet G55. Tisk je už rozběhaný, ale skenování je občas také třeba. sane-find-scanner tvrdošíjně odmítá cokoliv přiznat, s parametrem -v jsem zjistil, že prohledává /dev/usb/scannerX, jenže moje zařízení se nachází pod /dev/2-1.2, nevím proč, ale nic s tím nenadělám, snad jedině symlink do oněch prohledávaných míst. Pak sice přizná, že něco nalezl, ale neví co. Mezitím jsem já nalezl několikerý překlep v /etc/sane.d/dll.conf. Já mám hplip, takže do souboru připíši na novou řádku hpaio a zkouším scanimage -L, který je nyní naprosto precizní a scanner funguje, přesto že sane-find-scanner stále hlásí, že neví co našel. scanimage -T vše stvrzuje a teď je třeba vypropagovat skener do sítě.

Za tímto účelem musí být jak na straně klienta, tak serveru odkomentovaný řádek net v souboru dll.conf a navíc na straně klienta přidat do backendu net (net.conf) přidat adresu serveru, buďto v podobě hostname, či běžné IP adresy. No a v Ubuntu spustíme jednoduché skenování a jedeme. Na Windows jsem našel povedený program SaneTwain (http://sanetwain.ozuzo.net/).

I own HP OfficeJet G55 which is all-in-one device. My problem is that it’s not situated neither in /dev/lp0 nor /dev/usb or whatever, but in /dev/2-1.2. Since sane-find-scanner seek the scanner in /dev/usb/scannerX, I did:

mkdir /dev/usb

and

 ln -s /dev/2-1.2 /dev/usb/scanner

and also

chmod 666 /dev/usb/scanner

Since then sane-find-scanner find something unrecognzed.

To /etc/sane.d/dll.conf put new row:

hpaio

if you use hplip.

After that scanimage -L and also scanimage -T should work. Then make scanner useable through network you need xinetd configured:

To /etc/xinetd.d/saned put:

service saned
  {
        disable        = no
        socket_type    = stream
        wait           = no
        user           = root
        group          = root
        server         = /usr/sbin/saned
        port           = 6566
        protocol       = tcp
  }

To /etc/services put new row:
sane 6566/tcp #sane port

To /etc/sane.d/saned.conf add new row:
192.168.1.0/24

or another according to your network setup that allowes computers from local network to connect.

In /etc/sane.d/dll.conf let the row with net uncomented both on server and client side. On client side add to net backend /etc/sane.d/net.conf hostname or IP address of server. That should be all. Now find some sane frontend, in Ubuntu default Easy Scan works well, on Windows I use very good SaneTwain (http://sanetwain.ozuzo.net/).

CRON a Suspend

Čas od času si sestavuji offline mapu ČR do telefonu a protože mám v počítači jen 4 GB RAM, musím celou operaci provádět nad pomalým notebookovým diskem. Celá záležitost pak trvá ke třem hodinám a je na snadě ji spustit po půlnoci, kdy mám navíc zrychlenou přípojku do internetu, pro stažení téměř 300 MB zdrojového souboru. Na nedávno rozjetém Openwrt je mimo jiné i CRON, který jsem původně využíval k vypínání rádií, nicméně lze přes něho probudit notebook po síti. Až se ten zapne, jeho CRON zase spustí skript na sestavení mé offline mapy. Ale co s těmi hodinami, kdy počítač běží na volnoběh. Nalezl jsem ideální příkaz na uspání, který nepožadoval práva roota:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

Ten fungoval v dobách, kdy jsem skript spouštěl ručně z příkazové řádky, během chvíle, kdy jsem na počítači nepotřeboval pracovat. Pokud ten samý skript spustím přes CRON, nic se nestane. Na internetu jsem našel několik důvodů, proč tomu tak je. Nejsou podstatné, neboť ani jeden příklad, který měl funkčnost vrátit nakonec nefungoval. Nezbývá než šikovný příkaz nahradit ve skriptu příkazem:
sudo /usr/sbin/pm-suspend

a do /etc/sudoers, možno změnit též příkazem sudo visudo přidat následující:
yourusername pchostname=NOPASSWD:/usr/sbin/pm-suspend

to by mělo dostatečně omezit takto vytvořenou bezpečnostní mezeru (jak vznosný název).

OpenWRT a CUPS

Už jsem málem házel flintu do žita, p910n mi sice odpovídal popisem činnosti která právě probíhá, ale papír z tiskárny nevyjel. Pak jsem pár týdnů hledal po domě USB hub, do kterého bych připojil flash disk, na který se vejde CUPS a samotnou tiskárnu. A po tomhle jsem neměl vyhráno, v CUPS nebyla tiskárna vidět, surová přednastavená také nic nedělala. Dnes se konečně zadařilo a našel jsem skvělý návod na zprovoznění: http://mattie47.com/getting-cups-working-on-openwrt/

Autor rekapituluje všechny poznatky z wiki openwrt a přidává něco navíc:

K balíkům, které se všude zmiňují, že je třeba nainstalovat a naopak odstranit mě přibyl ještě HPLIP, možná není nutný, ale mě to s ním na staré HP tiskárně fungovalo.

root@OpenWrt:/# vi /etc/cups/cupsd.conf

change
User Nobody
Group Nobody

to:
User root
Group root

And change AuthClass to AuthClass Anonymous.
Remember to change allowed network to your network, otherwise you won’t be able to find the printer. E.G:

Order Deny,Allow
Allow From 127.0.0.1
Allow From 192.168.0.0/24

Dále pokračuje skvělým postřehem: chmod 700 /usr/lib/cups/backend/usb
mě pomohlo až: chmod 700 /usr/lib/cups/backend/hp

V tuto chvíli ve webovém rozhraní CUPS můžete zvolit Find new printer a bude tam. Já jsem jej nainstaloval jako raw tiskárnu a hned šlape jak z Linuxového, tak Win stroje.

EDIT 2013-05-19: Zdá se, že tiskárna začne fungovat až po symlinku, který uvádím v návodu na skenování.

OpenWRT

staAbychom nezůstávali jen u Ubuntu, mám doma i starý počítač, ve kterém jsou nastrkané disky v LVM poli na ukládání fotek ze zrcadlovky a pak ještě překlápí DVB-T do LANu, i takto staré Pentium III zvládne HDčkový multiplex 4, nahrávat však dokáže pouze SD kanály. Vedle toho máme D-Link DIR-825, který s původním firmware funguje pouze jako router. Jenže když vám na střechu dají pěkné 5 GHz sítečko se 400 MHz procesorem jako router, byla by hloupost znovu překládat. Nezbylo než nasadit Linux a to nejprve DD-WRT, které jsme vyměnili za OpenWRT, které vypadá dospěleji a prostě funguje. Dnes jsem řešil, jak rozšířit jeho 3 MB paměť pro instalaci balíčků na 16 GB flashdisk připojený do USB hubu spolu s tiskárnou, kterážto byla také jedním z původců přechodu. Koupíte si totiž krabičku s USB portem, ale výrobce se už nepochlubí, že tiskárna a spol. se zpřístupňují jedině pomocí windowsovského klienta. Naše tiskárna je však stará stejně jako počítač s Debianem a funguje dle nálady, zpočátku jsem samozřejmě nahrál na DIR-825 balík p910n, který překlápí tiskové úlohy přímo tiskárně. Na počítači jsem mohl sledovat stavové hlášení probíhajícího tisku, papír však nevylezl. Následovala snaha nainstalovat hplip či cups a k tomu je třeba mnoho prostoru v úložišti.

K nahrazení systémového úložiště flashkou stačí následovat návody ve wiki OpenWRT. Zejména http://wiki.openwrt.org/doc/howto/extroot

V balíku e2fsprogs jsou nástroje pro formátování disku.

Flash disk se objeví pravděpodobně jako /dev/sda*, ověříte nástrojem fdisk -l.
Ten připojíte např. do existující složky /mnt/sda1. Zkopírujte současný instalovaný software příkazem:
tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -

Klikátkem nebo editací /etc/config/fstab nastavte připojení svého /dev/sda* do /overlay a nastavte příznak is_rootfs:

config mount
option device /dev/sda1
option fstype ext3
option options rw,sync
option enabled 1
option enabled_fsck 0
option is_rootfs 1

Pak reboot, a je hotovo, pokud vyndáte flashku, načte se původní stav před přechodem, zkrátka linuxová parádička.

Google kalendář v Gnome Shell

Dnes to bude krátké, jen odkaz na github:
https://github.com/vintitres/gnome-shell-google-calendar

V Synapticu jsem dohledal a nainstaloval balíčky vyhledané řetězcem „python“ a “ gdata“, „iso8601“, dle Readme.

spuštěním příkazu:
./gnome-shell-google-calendar.py --account user@gmail.com

se hned vyplní kalendář a ten je aktualizovaný každým dalším otevřením, tak dlouho dokud démon běží.