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!
- 190 megtekintés
Hozzászólások
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.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a hivatkozást! Keresgélés közben én is ráakadtam, de egyelőre szeretném a Python használatát elkerülni. Azért elteszem ezt is tartaléknak.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
a script végére beírod hogy ./ezascript.sh &
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
+1 sorra gondoltam, a végtelen futáshoz. Amikor azt írtam még nem láttam hogy megoldottad ciklussal.
- A hozzászóláshoz be kell jelentkezni
valószínűleg az történik, hogy ez a wmctrl nem szépen zárja be a LO-t, ezért az helyre akarja állítani az utolsó munkamenetet.
Az igazán kultúr megoldás a python-os API használata az uno csomaggal, amit fent linkeltek.
- A hozzászóláshoz be kell jelentkezni
Egyelőre ez a megoldás marad, működik, úgy-ahogy. A python-os dolgot is elkezdem értelmezni.
- A hozzászóláshoz be kell jelentkezni
Tedd csak olvashatóvá a fájlt. Akkor az office nem ír bele, és nem baj ha nincs rendesen bezárva.
- A hozzászóláshoz be kell jelentkezni
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…
- A hozzászóláshoz be kell jelentkezni
"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.
- A hozzászóláshoz be kell jelentkezni