LibreOffice Calc fájl ismétlődő megnyitása, bezárása BASH használatával

Fórumok

Sziasztok!

Adott egy Rpi4, gyári rendszerrel. A feladat az lenne, hogy egy adott helyen lévő LibreOffice Calc fájlt kellene automatikusan indítani bejelentkezés után, nyitva hagyni 15percig, aztán bezárni. Ezt a folyamatot ismételve lefuttatni.

Arra gondoltam, hogy a BASH-t használnám a feladat megoldására.

Amit eddig sikerült külön-külön parancssorból használni:

- megnyitás: libreoffice --calc /home/pi/Asztal/Doksi.ods

- bezárás: wmctrl -c libreoffice (Ehhez telepíteni kellett még a wmctrl csomagot), már futó LibreOffice esetén lefuttatva.

- várakozáshoz a sleep 15m parancsot gondoltam használni

BASH programozásban alap dolgokban elboldogulok, de ez most kifogott rajtam.

Az összefűzött fájlt így írtam meg:

#!/bin/bash
## Libreoffice fájl megnyitása
libreoffice /home/$USER/Asztal/Doksi.ods
## Várakozás a megnyitás után. (5s,5m,5h,5d)
sleep 15m
## Libreoffice bezárása. Szükséges a 'sudo apt install wmctrl' csomag telepítése. Parancs:
wmctrl -c libreoffice

Sajnos csak a megnyitásig jut el a dolog, a várakozás és bezárás már nem működik ebben a formában.

Kipróbáltam még, hogy while-t használok, ami végtelen ciklust eredményezett. A fájl megnyílt, majd kézzel bezártam és újra megnyílt. Terminálban parancs megszakítással (CTRL+C) ki lehetett lőni.

Tudnátok ebben segíteni, vagy lehet nem ebből az irányból (BASH) kellene nekiindulni?

Előre is köszönök minden hozzászólást!

Hozzászólások

Szerkesztve: 2020. 09. 15., k – 12:14

https://ask.libreoffice.org/en/question/159189/close-libreoffice-gracefuly-from-command-line/

Itt a második válaszban a python kód az szerintem pont az amit keresel, de a kérdés feltevésben is írja az illető hogy makróval is meg lehet csinálni. Tehát nem is a libreoffice-ba kell betenni a 15 perc várakozás után bezárást, hanem a dokumentumba és akkor kintról bash-ból nem is kell semmit csinálnod. Ha ez valamiért nem szimpatikus akkor marad a python kód.

Szerkesztve: 2020. 09. 15., k – 12:13

a libreoffice sor végére tegyél egy szóközt és egy '&'-t mert most a libreoffice blokkolja a script végrehajtást annál a sornál amíg be nem zárod.

Nagyon köszönöm! Ez a '&' kellett az általad megjelölt helyre. Most még az kellene, hogy ez amolyan végtelenítve fusson. Mi lenne erre a jó kódsor? Ebben tudnál még segíteni? Magamtól egyelőre még nem találom a jó megoldást... :(

Jelenleg ez fut le szépen, de csak egyszer:

#!/bin/bash
set -e
libreoffice /home/$USER/Asztal/Doksi.ods &
sleep 15s
wmctrl -c libreoffice

 

UPDATE:

Idő közben erre jutottam, ami új tűnik működik, egy kis hibával:

#!/bin/bash
set -e
for (( ; ; ))
do
   libreoffice /home/$USER/Asztal/Doksi.ods &
   sleep 15s
   wmctrl -c libreoffice
done

A hiba annyi, hogy ez új lövi ki a Libreoffice-t, hogy a korábban megnyitott fájl helyreállításával akarja kezdeni a megnyitási folyamatot. Azt hiszem valami kapcsoló hiányzik még a bezáró sorhoz, illetve ehelyett lehetne valami szebb parancsot használni. Hm.

A script végi '&' nem sokat segített. Így egészítettem ki a libreoffice-os sort:

libreoffice --norestore /home/$USER/Asztal/Doksi.ods &

Ez egyelőre működni látszik. Tesztelni fogom hosszabb távon. Ha gond lesz vele, jelzem és azt is ha hosszú távon bevált.

Köszönöm a segítséget mindenkinek!

ha már ilyen ismétlődő szkriptfuttatást szeretnél, akkor inkább tedd crontabba negyedóránként a szkriptedet. akár azzal is bebiztosíthatod magad, hogy a szkriptedbe még beteszed, hogy egy fájlban az éppen elindított libreoffice PID-jét tárolja el, amit arra használsz fel, hogy a szkript következő futásának legelején ellenőrzöd (hogy fut-e még), s ha igen, bezárod valahogy.

hint ehhez: https://www.cyberciti.biz/faq/how-to-return-pid-of-a-last-command-in-li…

"bezárás: wmctrl -c libreoffice"

Ez majdnem (vagy pont) olyan, mint a killall libreoffice.

Lehet olyat, hogy parancssorból billentyű(kombináció)t küldeni adott ablaknak.

pl.: https://manned.org/xdotool

Ezzel akár mentést (ctrl+s) is küldhetsz kilépés (ctrl+q) előtt.