per Script Dokument speichern und Anwendung beenden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dbr51
Beiträge: 12
Registriert: 17.10.2005 23:41:33

per Script Dokument speichern und Anwendung beenden

Beitrag von dbr51 » 29.03.2008 02:44:00

Hallo,
ich würde gerne ein Script erstellen, das ich vor dem unmounten einer USB-Festplatte aufrufen kann.
Das Script sollte herausfinden, welche Prozesse eine Datei auf dem Laufwerk geöffnet haben. Dafür könnte man sicher ein Kommando in der Art

Code: Alles auswählen

lsof | grep /mnt/USB-Disc
verwenden.
Dann sollte das Script allerdings irgendeine Art Signal an die entsprechenden Anwendungen senden, das diese ggf. veranlasst, nachzufragen, ob das geöffnete Dokument gespeichert werden soll, bevor das Programm geschlossen wird.
Ich habe folgendes versucht:

Code: Alles auswählen

x@y:~$ kwrite /mnt/USB-Disc/test.txt
dann eine Änderung in der Datei vorgenommen, dann

Code: Alles auswählen

x@y:~$ lsof | grep /mnt/USB-Disc
bash     18848   x  cwd   DIR    8,10   4096      5 /mnt/USB-Disc
kwrite   22114   x  cwd   DIR    8,10   4096      5 /mnt/USB-Disc
x@y:~$ kill -n 15 22114
kwrite wurde zwar beendet, hat aber die geänderte Datei nicht gespeichert, und auch nicht nachgefragt, ob sie gespeichert werden soll.
Ich habe alle Signale ausprobiert, von 1 - 30.
Was für ein Signal erhält kwrite, wenn man es ganz normal per Maus beendet? Dann wird ja nachgefragt, ob man speichern möchte. Kann man ein solches Signal irgendwie per Script erzeugen?

Vielen Dank für Anregungen,
Jonas

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 29.03.2008 10:39:10

Bie KWrite kannst Du dcop benutzen. In deinem Beispiel dann

Code: Alles auswählen

dcop kwrite-22114 "kwrite-mainwindow#1" close
Mit kdcop kannst Du dir die weiteren möglichen Funktionen anschauen.
MfG GoKi
:wq

dbr51
Beiträge: 12
Registriert: 17.10.2005 23:41:33

Beitrag von dbr51 » 29.03.2008 11:59:59

Das klingt sehr gut. Ein erstes schnelles Experiment bringt mich aber zu der Vermutung, dass das nur für KDE-Anwendungen funktioniert?
Gimp und OpenOffice z.B. habe ich in kdcop nicht gefunden. Gibt es dafür auch eine Möglichkeit?
Gibt es eine Möglichkeit, die für alle Anwendungen funktioniert?
Oder könnte / müsste man es über eine Konstruktion in der Art

SendKey Alt+F4 an Process-ID oder Window-ID machen?

Oder bin ich mit meinem ganzen Ansatz auf dem falschen Dampfer? Ich würde letztlich einfach gerne irgendwie möglichst komfortabel gewährleisten, dass alle auf der USB-Platte bearbeiteten Dateien gespeichert und geschlossen werden, damit die Platte sauber unmounted werden kann, bevor ich den Laptop in den hibernate-Modus versetze.
(Hm, das wird jetzt vielleicht etwas OT)

Jonas

dbr51
Beiträge: 12
Registriert: 17.10.2005 23:41:33

Beitrag von dbr51 » 31.03.2008 13:45:25

Ich könnte mir vorstellen, dass ich vielleicht über dbus weiterkommen könnte. Aber ich versuche seit Stunden vergeblich, herauszubekommen, was ich tun muss, damit ein Programm seine dbus-Schnittstelle zur Verfügung stellt?
Ich würde einfach mal gerne sehen, ob kwrite dbus unterstützt, welche Funktionen etc.
Im Internet finde ich nur Beschreibungen, wie ein Entwickler seine Anwendung dbus-fähig machen kann, aber ich finde nichts, wie ich als Nutzer das anzapfen kann.
Meine einzigen bescheidenen Erfolge:

Code: Alles auswählen

x@y:~$ qdbus
:1.4
org.freedesktop.DBus
x@y:~$ qdbus
Warum bekomme ich hier nichts in der Art

Code: Alles auswählen

org.kde.KWrite
obwohl kwrite mit 4 Instanzen läuft???
Im qdbusviewer unter dem Tab "System Bus" bekomme ich noch org.freedesktop.Avahi und org.freedesktop.Hal, aber auch hier, weit und breit keine Spur von irgendwas, das mit einer KDE- oder sonstigen Anwendung zu tun hat.
Bin ratlos und auf Tipps gespannt,

Jonas

Antworten