🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Rechner herunterfahren per Makro
Re: Rechner herunterfahren per Makro
Hm, also bei mir reicht es nicht die lck Dateien zu löschen.
Anscheinend ist eine andere Datei relevanter:
/.config/libreoffice/4/user/registrymodifications.xcu
Diese kann man aber nicht einfach löschen, da sie auch noch andere Konfigurationen enthält. Zum Beispiel die Einstellungen für die Makrosicherheit.
Anscheinend ist eine andere Datei relevanter:
/.config/libreoffice/4/user/registrymodifications.xcu
Diese kann man aber nicht einfach löschen, da sie auch noch andere Konfigurationen enthält. Zum Beispiel die Einstellungen für die Makrosicherheit.
Re: Rechner herunterfahren per Makro
ich schrieb:
Ziel sollte es sein, LO ordnungsgemäß zu beenden, dann gibt's auch hinterher keine Probleme.
Das Herunterfahren des Rechners verlangt übrigens nicht grundlos root-Rechte. Auch wenn man selbst weiß, dass alles ok ist bedeutet das noch lange nicht, dass das System für ein shutdown bereit ist. Wenn Du den Rechner wirklich "nach den Regeln der Kunst" herunterfahren willst, dann kannst Du das nicht aus LO heraus machen, sondern die Vorgehensweise muss Folgende sein:
Ein Programm, das den Rechner herunterfahren kann muss überprüfen ob LO (und alle anderen vor dem Shutdown zu beendenden Prozesse) beendet wurde, dann kann das Shutdown eingeleitet werden. Nicht umsonst braucht man in LO für die Kontrolle von vielen Systemprozessen eigene Listener (z.B. bei Druckvorgängen).
edit:
Folgendes Makro funktioniert:
wobei "sd_scrpt" eine ausführbare Datei im Home-Verzeichnis des aktuellen Benutzers ist und folgendermaßen aussieht:
Das Script sollte aber unbedingt angepasst werden, denn unverschlüsselte Passwörter in Scriptdateien sind ein enormes Sicherheitsrisiko!
So weit ich gesehen habe gibt's dann nur noch ein Problem: Java wird mit dem stardesktop.terminate-Befehl nicht richtig beendet, d.h. es wird jedesmal ein Crash Report im Userverzeichnis angelegt, aber es kommt sonst zu keinem Fehler.
denn wenn der User gar keine Schreibrechte auf der Datei hat, dann wird in LO die Datei immer schreibgeschützt geöffnet. Und in Verzeichnissen in denen ein User kein Schreibrecht hat kann auch keine Datei angelegt werden. Das Problem mit der registrymodifications.xcu ist mir bekannt - man müsste den Eintrag vor dem nächsten Start von LO entfernen - aber das ist dann doch ein bisserl zu viel Herumgepfusche.... das anlegen von lck-Dateien verhindern ...
Ziel sollte es sein, LO ordnungsgemäß zu beenden, dann gibt's auch hinterher keine Probleme.
Das Herunterfahren des Rechners verlangt übrigens nicht grundlos root-Rechte. Auch wenn man selbst weiß, dass alles ok ist bedeutet das noch lange nicht, dass das System für ein shutdown bereit ist. Wenn Du den Rechner wirklich "nach den Regeln der Kunst" herunterfahren willst, dann kannst Du das nicht aus LO heraus machen, sondern die Vorgehensweise muss Folgende sein:
Ein Programm, das den Rechner herunterfahren kann muss überprüfen ob LO (und alle anderen vor dem Shutdown zu beendenden Prozesse) beendet wurde, dann kann das Shutdown eingeleitet werden. Nicht umsonst braucht man in LO für die Kontrolle von vielen Systemprozessen eigene Listener (z.B. bei Druckvorgängen).
edit:
Folgendes Makro funktioniert:
Code: Alles auswählen
sub ShutDown_from_LO
stardesktop.terminate
on error resume next
shell("~/sd_scrpt",0,,false)
end sub
Code: Alles auswählen
#!/bin/sh
echo DasPasswortDesUsers | /usr/bin/sudo -S shutdown -hP now
exit 0
So weit ich gesehen habe gibt's dann nur noch ein Problem: Java wird mit dem stardesktop.terminate-Befehl nicht richtig beendet, d.h. es wird jedesmal ein Crash Report im Userverzeichnis angelegt, aber es kommt sonst zu keinem Fehler.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Rechner herunterfahren per Makro
Und wo liegt der Vorteil bei deiner Lösung oben im Vergleich zu der von mir genutzten Variante, der von F3K Total vorgestellten deiner hier http://www.libreoffice-forum.de/viewtop ... =10#p22335
Wie bekommt man eigentlich das hin:
1. Das Makro muss außerhalb der Base-Datei gespeichert sein (z.B. in einer Extension)
Wie bekommt man eigentlich das hin:
1. Das Makro muss außerhalb der Base-Datei gespeichert sein (z.B. in einer Extension)
Re: Rechner herunterfahren per Makro
Sephan hat geschrieben:Da steht aber auch: "Manche Komponententypen unterstützen das Interface XCloseable nicht. Ein Beispiel ist die Basic-IDE." Jedenfalls funktioniert das dort erwähnte Beispiel leider nicht
Code: Alles auswählen
sub Datenbank_schliessen(oEvent)
oEvent.Source.Model.Parent.Parent.Parent.Parent.close(true)
end sub
unter Extras/Makros/Makros verwalten/LibreOffice Basic gibt's einen Punkt: "Meine Makros" und eine Bibliothek "Standard". Makros die da gespeichert werden sind nicht in Dokumenten (Base, Calc, Writer ...) gespeichert, sondern in Deinem User-Verzeichnis - daher außerhalb der "odb". So ein Makro läuft "außerhalb" Deines Dokumentes, d.h. es kann auch Dein Dokument schließen, denn das Makro ist ja nicht Teil des Dokumentes, und kann daher das Dokument xyz beenden und wird dann selbst fehlerfrei beendet. Daher habe ich die Zeile: "on error resume next" im shutdown-Makro drin.Sephan hat geschrieben:Wie bekommt man eigentlich das hin:
1. Das Makro muss außerhalb der Base-Datei gespeichert sein (z.B. in einer Extension)
Code: Alles auswählen
sub ShutDown_from_LO
stardesktop.terminate
on error resume next
shell("~/sd_scrpt",0,,false)
end sub
Am schönsten wäre es den Stardesktop über die UNO-Bridge zu beenden. In dieser wird nämlich das Beenden des Desktops genau so gemacht, wie es das jeweilige Betriebssystem erfordert. - aber leider kann ich Dir dazu nichts sagen, da ich da auch ganz blank bin
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Rechner herunterfahren per Makro
sry - hatte mich verlesen ich dachte Base-IDE, allerdings sollte die Basic-IDE sowieso nicht in einem Frame geöffnet sein.... Basic-IDE ...
außerdem: wenn "Manche Komponententypen unterstützen das Interface XCloseable nicht", dann werden sie's auch nicht benötigen - andernfalls würden sie vermutlich

Komponenten die mit .close nicht zu beenden sind werden dann wohl durch den stardesktop.terminate gekillt, ohne dass es schädlich ist.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Rechner herunterfahren per Makro
Gut, dass dus sagst, denn ich hab auch Base gelesen 

Re: Rechner herunterfahren per Makro
Ich habe jetzt mal auch dein Skript von hier probiert:
http://www.libreoffice-forum.de/viewtop ... =20#p22340
Das beendet zwar LibreOffice startet aber mein Skript nicht.
Allgemein habe ich das Problem, dass sich LibreOffice nicht beendet wenn ich das Skript daraus starte. Wahrscheinlich weil ein Handle offen bleibt. Aber so habe ich es jetzt, basierend auf F3K Total Skript, zum Laufen gebraucht:
Allerdings bekommt man so gut wie jedesmal die Dokumentenwiederherstellung, weswegen ich jetzt immer die registrymodifications.xcu durch eine Musterdatei von mir ersetze. Vor dieser Lösung konnte sich LibreOffice nie beenden wenn ich auch noch mein Shellskript daraus aufgerufen habe, weswegen ich dann immer mit 'pkill -15 oosplash && pkill -15 soffice.bin' LO zu Leibe rücken musste.
Ich stelle mir allerdings gerade die Frage, welche Lösung die sicherste ist. Die oben, die zwar LO beenden kann, aber fast zwangsläufig zur Dokumentenwiederherstellung führt, oder meine davor, die sehr selten eine Dokumentenwiederherstellung hat, bei der ich aber LO killen muss.
Wie seht ihr das?
http://www.libreoffice-forum.de/viewtop ... =20#p22340
Das beendet zwar LibreOffice startet aber mein Skript nicht.
Allgemein habe ich das Problem, dass sich LibreOffice nicht beendet wenn ich das Skript daraus starte. Wahrscheinlich weil ein Handle offen bleibt. Aber so habe ich es jetzt, basierend auf F3K Total Skript, zum Laufen gebraucht:
Code: Alles auswählen
Sub Beenden
'System Shutdown
if msgbox ("Soll die Statistik beendet und der Computer heruntergefahren werden?",36,"Shutdown") = 6 then
'Get Path
sFolderUrl =replace(ThisDatabasedocument.url,ThisDatabasedocument.Title,"")
'msgbox sFolderUrl
'Detect OS & start suitable shutdown script
OS = GetGUIType()
if OS = 1 then
sfolder = sFolderUrl 'Pfad der Batch Datei (darf keine Leerzeichen oder Sonderzeichen enthalten)
surl = sfolder + "/shutdown.bat"
sfolderpath = convertfromurl(sfolder)
sPath = convertfromurl(surl)
Shell(sPath,4,sfolderpath)
endif
if OS = 4 then
sfolder = sFolderUrl 'Pfad der Shell-Skript Datei (darf keine Leerzeichen oder Sonderzeichen enthalten)
surl = sfolder + "/shutdown.sh"
sfolderpath = convertfromurl(sfolder)
sPath = convertfromurl(surl)
Shell(sPath,4,sfolderpath)
endif
oController = ThisDatabaseDocument.CurrentController
oController.closeSubComponents
oController.ActiveConnection.close()
oDoc = ThisDatabaseDocument
oDoc.store()
oDoc.close(True)
stardesktop.terminate
endif
END Sub
Ich stelle mir allerdings gerade die Frage, welche Lösung die sicherste ist. Die oben, die zwar LO beenden kann, aber fast zwangsläufig zur Dokumentenwiederherstellung führt, oder meine davor, die sehr selten eine Dokumentenwiederherstellung hat, bei der ich aber LO killen muss.
Wie seht ihr das?
Re: Rechner herunterfahren per Makro
Das wäre durchaus möglich, wenn der .terminate-Befehl auch das Dokument beendet in welchem das Makro gespeichert ist, allerdings würde ich eher vermuten, dass sPath bzw. sfolderpath nicht korrekt sind. In meinem Script ist nämlich kein Dateiname angegeben, der steht schon beim Pfad dabei, das sollte zwar bei allen UNIX-Systemen reichen, aber wer weiß... . Lass' einfach mal ein Skript laufen, das den Ubuntu-Taschenrechner startet (gcalculator oder so ähnlich) und beende das Makro vor dem "oController = ThisDatabaseDocument.CurrentController" (z.B. mit "exit sub"). Dann ist der Shell-Aufruf mal geklärt.Das beendet zwar LibreOffice startet aber mein Skript nicht.
Je nach Desktopumgebung muss u.U. der Shell-Befehl auch anders aussehen. Manche Shells brauchen spezielle Übergabeparameter, z.B. "lxterminal -e galculator" etc.
Zum Beenden des Dokumetes und von LO sollte das Makro immer außerhalb eines Dokumentes gespeichert werden - das ist auf jeden Fall einfacher (und um ein ganzes Eck schöner) als jedesmal die registrymodifications.xcu zu ersetzen! Nachdem mir nicht klar ist welche Infos in der registrymodifications.xcu überhaupt drinstehen, würde ich die Datei niemals blanko ersetzen!
Eventuell würdest Du Dir leichter tun, wenn das shutdown-script shutdown erst nach dem Beenden von LO startet. Der Linux-shutdown-Befehl bietet ja die Möglichkeit des verzögernten Shutdowns, evtl. kannst Du vor dem shutdown auch ein "sleep 5" einbauen, das verzögert einfach um 5 Sekunden, garantiert aber nicht, dass alles bestens ist!
Du solltest evtl. die Datei auch nicht shutdown.sh nennen - das könnte auch mal zu Problemen führen.
btw:
"oController.ActiveConnection.close()" und ein paar Millisekunden nachher "oDoc.store()"
ist nicht ganz Ohne. Ich hab' mir damit mal eine Datenbank zerschossen und konnte sie nur mit Entzippen, Austauschen einer Datei und Neukomprimieren noch retten!
Was funktioniert denn am Makro "sub ShutDown_from_LO" nicht? Die "sub Datenbank_schliessen(oEvent)" musst Du natürlich einbauen ...
Code: Alles auswählen
sub CloseDB_and_ShutDown_from_LO(oEvent)
oEvent.Source.Model.Parent.Parent.Parent.Parent.close(true)
if msgbox("Beenden und Herunterfahren?",4)=6 then
' hier gegebenenfalls offene Frames suchen und schliessen bevor der .terminate-Befehl kommt
stardesktop.terminate
on error resume next
shell("~/sd_scrpt",0,,false)
end if
end sub
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Rechner herunterfahren per Makro
Wie kann ich denn ein Makro außerhalb von Base speichern und wie dann darauf zugreifen?
Re: Rechner herunterfahren per Makro
Extras/Makros/Makros verwalten/LibreOffice Basic gibt's einen Punkt: "Meine Makros" und eine Bibliothek "Standard" - öffnen und einfach das Makro reinschreiben...
Dann dem Button das Makro zuweisen - genau so wie Du ein Dokument-Internes zuweisen würdest.
Dann dem Button das Makro zuweisen - genau so wie Du ein Dokument-Internes zuweisen würdest.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.