PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : devilspie - 2 Konfigurationen für 1 Programm?



Schlüpfknoten
16.02.08, 09:57
Hi Leute,

ich will für mein MediaCenter devilspie benutzen, um Kaffeine zu steuern.
Ich habe allerdings 2 Stati:
- 1x soll Kaffeine an x/y-Position mit breite*höhe starten, immer onTop
- 1x soll Kaffeine Fullscreen starten, immer onBottom

Die Konfigurationen habe ich fertig, das ist ja kein Problem - nur ist jetzt meine Frage: Wie könnte ich es machen, dass devilspie weiß, welche Konfiguration er nun nehmen soll?
Am liebsten hätte ich die Konfigdatei für Kaffeine immer neu geschrieben, je nach dem was ich machen will, allerdings müsste ich devilspie dazu neu starten, damit er die Änderungen übernimmt.
Gibt es eine Art reset-Funktion für devilspie?
Oer wie könnte ich das sonst lösen?

Ich entwickle in Java, rufe also den devilspie Prozess per System.exec() auf...kann ich ihn dann auch wieder killen? Dazu brauche ich doch root-Rechte, oder?

Versteht ihr überhaupt, was ich meine ;) ?

Schlüpfknoten
16.02.08, 11:41
Hat sich im Prinzip auch schon wieder erledigt, habs nun so gelöst (Java):



[...]
// Kaffeine-Prozess killen (falls noch offen)
killProcess("kaffeine");

// Devilspie-Prozess killen
killProcess("devilspie");

// Devilspie Konfigurationsdatei auf Fullscreen setzen!
writeDevilspieFullscreen();

// Devilspie neu starten
Runtime.getRuntime().exec("devilspie");

// Kurz warten bis Devilspie da ist
Thread.sleep(500);

// Kaffeine starten
Runtime.getRuntime().exec("kaffeine");

// Warten, bis Kaffeine gestartet ist
Thread.sleep(500);

// DVD-ISO Image abspielen
Runtime.getRuntime().exec("dcop kaffeine KaffeineIface openURL dvd://" +selected.getFile());
[...]



public void killProcess(String prog) {
try {
Process processes = Runtime.getRuntime().exec("ps -A");
BufferedReader procout = new BufferedReader( new InputStreamReader(processes.getInputStream()) );
String line;
while ((line = procout.readLine()) != null) {
if (line.endsWith(prog)) {
String processID = line.substring(0, line.indexOf("?"));
System.out.println("Killing process " + processID.trim() + " (" + prog + ")");
Runtime.getRuntime().exec("kill " + processID.trim());
}
}
}
catch (Exception ex) {
System.out.println("Unable to kill process " + prog);
ex.printStackTrace();
}
}

public void writeDevilspieFullscreen() {
try {
FileOutputStream fos = new FileOutputStream(settings.getConfig("devilspiedir") + "kaffeine.ds");
fos.write(("(if\n").getBytes());
fos.write(("(is (window_name) \"Kaffeine\")\n").getBytes());
fos.write(("(begin\n").getBytes());
fos.write(("(fullscreen)\n").getBytes());
fos.write(("(undecorate)\n").getBytes());
fos.write(("(below)\n").getBytes());
fos.write((")\n").getBytes());
fos.write((")\n").getBytes());
fos.close();
}
catch(Exception ex) {
System.out.println("Unable to write Devilspie-File");
ex.printStackTrace();
}
}