Software

Automatická prezentace ve vitríně pomocí Linuxu

Ve škole jsme řešili možnost prezentačního počítače, který automaticky pouští zvolenou prezentaci pořád dokola. Výsledek je nakonec realizován pomocí distribuce Tiny Core Linux a prohlížeče XPDF.

1 Volba distribuce

Zkoušel jsem několik distribucí, ale žádná nevyhovovala požadovaným parametrům. Počítač, který máme k dispozici má pouze 1GB disk a 1GB RAM. Ve virtuálním stroji (pomocí VirtualBox) jsem rozjel podobnou konfiguraci a zkoušel jsem různé distribuce.

1.1 Ubuntu a deriváty

Zkoušel jsem ubuntu-server a stáhl jsem si i lubuntu, ale nebyla to dobrá volba. Celý systém totiž zabírá 700MB jen v instalaci server, nechtěl jsem tedy riskovat, že pokud doinstaluji Xka, překročí to hranici 1GB a navíc to už nebude dále aktualizovatelné.

1.2 Puppy Linux a podobné live distribuce

Tyto distribuce jsou zajímavé, ale mají většinou jeden nedostatek, nedají se nainstalovat na cílový stroj. Mám k dispozici pevný disk a nechci v počítači nechávat CD nebo USB flash. Postup instalace takového systému je pak trochu složitější a nechtělo se mi nad tím bádat.

1.3 Tiny Core Linux

Nakonec jsem zvolil Tiny Core Linux, které vyhovuje ve všech ohledech a má i velké množství potřebných balíčků v aktuální verzi.

2 Postup instalace

Nejprve jsem si vytvořil bootovatelnou USB flashku. Nevím proč, ale zvolil jsem program Linux Live USB Creator. Stáhl jsem si iso obraz CorePlus a pomocí tohoto programu nahrál na flash.

Nabootoval jsem nejprve s defaultní volbou správce oken, ale s tímto správcem mělo několik aplikací problémy (především ty pro zobrazování PDF), takže jsem raději zvolil openbox.

Pokud jste šikovnější a nechcete přijít o nakonfigurovaný systém, je asi dobré vytvořit si 2 oddíly. Na první nainstalovat systém a na druhý oddíl dávat data (třeba prezentaci).

Instalace ve virtuálním stroji probíhala v pořádku, ale na reálném počítači byl trochu problém, takže jsem musel nastavovat cesty ručně. Po spuštění programu TC Install jsem si musel vybrat ručně soubor core.gz, který byl v mém případě umístěn v /mnt/sdb1/boot/core.gz. Dále se po instalaci nenainstalovala Xka a vlastně se vůbec nespustil správný dialog pro tuto volbu. V dalším okně jsem tedy zadával cestu k instalačním balíčkům /mnt/sdb1/core, čímž se vytvořila kopie systému, který byl na flash.

Po spuštění nainstalovaného systému jsem začal instalovat další potřebné balíky. K tomu je potřeba funkční připojení k síti. Bohužel vestavěný udhcpc nějak nefungoval. Zkoušel jsem experimentovat i s dhcpcd. dhcpcd fungovalo, ale nevěděl jsem, jak to vše nastavit, aby zůstala volba i po bootu. Nakonec jsem v nastavil adresu staticky.

Pro potřeby prezentace jsem nainstaloval následující balíčky

Dále jsem si pro zjednodušení adminisrtace nainstaloval ještě

3 Nastavení vlastní prezentace

Je třeba zdůraznit, že cokoli v systému uděláte se po restartu vrátí do původní podoby. K tomu, aby se to nestalo je potřeba příslušnou cestu napsat do souboru /opt/.filetool.lst V mém případě vypadá soubor následovně

opt
home
etc/passwd
etc/shadow
opt/eth0.sh
usr/local/etc/ssh
usr/local/etc/bftpd.conf

3.1 Nastavení OpenSSH

V souboru .filetool.lst jsou kvůli openssh především řádky s uložením hesla uživatele a uložení konfigurace ssh. V adresáři /usr/local/etc/ssh stačí přejmenovat sshd_config.example na sshd_config. konfigurace je funkční a není třeba do ni zasahovat. Pomocí příkazu passwd si vytvořte heslo pro uživatele tc. Pomocí příkazu /usr/local/etc/init.d/openssh start můžete server nastartovat. Pokud se můžete vzdáleně připojit, je nastavení v pořádku, zbývá pouze nastavit openssh, aby se spouštělo automaticky po startu.

Korektní místo pro toto spuštění je soubor /opt/bootlocal.sh, ale kvůli inicializaci sítě mě to tu nefungovalo. Přemístil jsem tedy nastartování do souboru .xsession v domovském adresáři. Toto řešení není vůbec korektní, bylo by lepší se navázat na události inicializace sítě, nebo vše řešit pomocí služby inetd, ale to jsem nechtěl zkoumat.

Můj soubor .xsession tedy vypadá následovně:

Xvesa -br -screen 1024x768x32 -shadow -2button \
 -mouse /dev/input/mice,5 -nolisten tcp -I >/dev/null 2>&1 &
export XPID=$!
waitforX || ! echo failed in waitforX || exit
"$DESKTOP" 2>/tmp/wm_errors &
export WM_PID=$!
[ -x ./.setbackground ] && ./.setbackground
[ -x ./.mouse_config ] && ./.mouse_config &
[ $(which "$ICONS".sh) ] && ${ICONS}.sh &
 
sudo /usr/local/etc/init.d/openssh start
 
[ -d ".X.d" ] && find ".X.d" -type f -print | while read F; do . "$F"; done

Příkazem backup vše uložíme do persistentního úložiště, takže zůstane vše i po restartu PC.

3.2 Nastavení BFTPD

Program bftpd používá stejné uživatelské jméno jako openssh, takže zde již není co nastavovat. Stačí tedy zkopírovat standardní bftpd.conf.sample na bftpd.conf v adresáři /usr/local/etc/.

Aby byla prezentace uložena na nějakém persistantním úložišti, zvolil jsem ukládání přímo na disk. V další verzi bych rád vytvořil dva oddíly. Na prvním oddílu bude systém a na druhém data, ale to jsem v tuto chvíli neudělal.

Prezentace bude tedy uložena v adresáři /mnt/sda1/presentation. Tento adresář si vytvoříme anastavíme vlastnictví.

sudo mkdir /mnt/sda1/presentation
sudo chown tc:staff /mnt/sda1/presentation

Do souboru /usr/local/etc/bftpd.conf pak přidáme nastavení domovského adresáře pro uživatele tc a povolení mazání souborů.

user tc {
  ROOTDIR="/mnt/sda1/presentation"
  ALLOWCOMMAND_DELE="yes"
}

Poslední nastavení, které je potřeba udělat je nastaveni automatického startu služby. Opět jsem použil trik se startem služby až po startu X serveru. Nyní ale využiji vestavěné možnosti dávat startovací skripty do adresáře .X.d. OpenSSH jsem schválně umístil přímo do .xsession, protože mám příkaz odzkoušený. Pokud totiž dáte do .X.d příkaz, který sám neskončí nebo se nepřepne do pozadí, další příkazy se nespustí. Několikrát se mi tedy stalo, že neopatrným přidáním souboru do tohoto adresáře se již žádný jiný příkaz nevykonal a neměl jsem tedy vzdálený přístup k PC.

Do adresáře .X.d ve svém domovském adresáři jsemtedy přidal soubor bftpd, který obsahuje pouze jeden příkaz

sudo bftpd -Ddc /usr/local/etc/bftpd.conf

Po ručním nastartování služby se tedy můžete přihlásti k počítači pomocí FTP a můžete přistupovat pouze do adresáře /mnt/sda1/presentation.

Příkazem backup vše uložíme do persistentního úložiště, takže zůstane vše i po restartu PC.

3.3 Nastavení obrazovky

Cílem stroje s prezentací je, aby se nevypnula obrazovka a aby nebyl vidět kuzor. O toto nastavení se stará soubor xset, který jsem umístil do adresáře .X.d a který obsahuje

xset s off
xset s noblank
xset -dpms
unclutter &

Program xset nastaví vlastnosti displeje a vypne možnost jakéhokoli vypnutí displeje. Program unclutter naslouchá na vstupních zařízeních a pokud chvíli nikdo nehýbe myší, schová kurzor.

Příkazem backup vše uložíme do persistentního úložiště, takže zůstane vše i po restartu PC.

3.4 Nastavení X11VNC

Aby bylo možné na dálku zkontrolovat, zdali prezentace běží, je na PC spuštěn VNC server, který je napojen na aktuální fyzickou obrazovku. Po připojení tedy vidíte přesně to, co vidí člověk pře vitrínkou.

Nejprve je třeba nastavit heslo pro přístup. To se provede příkazem

x11vnc -storepasswd ~/.vnc/passwd`

Celé nastavení pak vypadá následovně. Do souboru ~/.X.d/x11vnc se vloží příkaz pro spuštění serveru na pozadí.

PASS=/home/tc/.vnc/passwd
LOG=/mnt/sda1/log/x11vnc.log
x11vnc -forever -rfbauth $PASS -display :0 >> $LOG 2>&1 &

Příkazem backup vše uložíme do persistentního úložiště, takže zůstane vše i po restartu PC.

3.4 Vlastní prezentace

Vlastní prezentace probíhá pomocí následujícího skriptu. Skript spustí program xpdf v remote režimu, takže jej lze ovládat. Příkaz xpdf -remote tc -fullscreen presentation.pdf přepne program na celou obrazovku a načte prezentaci. Pokud už byla nějaké prezentace načtena, je nahrazena.

Příkaz xpdf -remote tc -exec nextPage posune prezentaci o jeden slide dál. Bylo ještě nutné zjistit, kolikrát se má zavolat příkaz „další slide“. K tomuto účelu slouží příkaz pdfinfo. pdfinfo presentation.pdf | grep Pages | cut -d: -f2 vrátí aktuální počet stránek v prezentaci.

Celý skript tedy nejprve načte prezentaci, tu projde až dokonce a pak znovu načte prezentaci ze souboru. Pokud se mezitím soubor s prezentací změní, je nahrán nový soubor. Soubor s prezentací je dostupní přes FTP, takže je kdykoli možné vzdáleně prezentaci zaměnit. Kontrolu, jestli je vše v pořádku lze provést pomocí VNC.

#!/bin/sh
 
# file with presentation
F=/mnt/sda1/presentation/presentation.pdf
# timeout of one slide
T=5
 
while :;do
        echo "Reloading presentation ${F}"
 
                # determine number of pages in presentation
        PAGES=$(pdfinfo ${F} | grep Pages | cut -d: -f2)
 
                # initialize xpdf with new presentation
        DISPLAY=:0 xpdf -remote tc -fullscreen ${F} &
        sleep ${T}
        for a in $(seq 2 ${PAGES}); do
                echo "Going to page ${a}"
                DISPLAY=:0 xpdf -remote tc -exec nextPage
                sleep ${T}
        done
 
done

Celý skript uložíme do souboru ~/.local/bin/presentation.sh. Soubor nastavíme jako spustitelný. Pokud tedy do příkazové řádky napíšeme presentation.sh mela by se prezentace spustit.

Vytvoříme soubor xpdf v adresáři .X.d a do něj umístíme spouštěcí příkaz prezentace.

presentation.sh &

Příkazem backup vše uložíme do persistentního úložiště, takže zůstane vše i po restartu PC.

4 Závěr

Celé řešení funguje jednoduše. Pomocí FTP lze nahrávat soubor s prezentací a pomocí VNC lze kontrolovat, jestli je vše v pořádku. Přes funkční SSH lze dále server na dálku konfigurovat.

K celému řešení patří jen několik poznámek:

  1. Vždy je třeba pouštět příkaz backup pokud změníte nějaké nastavení.
  2. Než počítač někam uzavřete, restartujte jej a zkontrolujte, jestli běží všechny služby.
  3. Pokud nahráváte prezentaci, nahrajte ji pod jiným jménem a až teprve ve chvíli, kdy bude nahraná ji přejmenujte na presentation.pdf. Tímto způsobem se přepíše původní prezentace a vše bude v konsistentním sta­vu.

Existující řešení momentálně běží pouze na jednom diskovém oddílu. V plánu je oddělit systémovou a datovou část.

Existující řešení zatím nemá nastaven firewall, takže je možné k počítači přistupovat odkudkoli, což není úplně správně.

Severovýchod Valid XHTML 1.0 Strict Valid CSS 2 Text to HTML converter and formatter Jay Bee simple CMS