KolourPaint 4.14.2 mit einfachen Kommandozeilen-Tools anpassen

Ansprechpartner

invalid-id(Autor)

Anhang

kolourpaint-Size.sh

1. Zusammenfassung

KolourPaint ist ein gutes, einfaches Mal- und Zeichenprogramm der KDE. Wenn ich kurz etwas Skizzieren möchte, bietet KolourPaint viele Möglichkeiten dazu an. Allerdings stört mich, dass ich keine Möglichkeit in der GUI gefunden habe, die Größe des Bildes bei Programmstart festzulegen. Vielmehr ist es sogar so, dass KolourPaint die Größe des Bildes bei Programmstart abhängig davon macht, welche Größe das zuletzt gespeicherte Bild hatte. Ich möchte aber jedes Mal bei KolourPaint mit einem leeren Bild der Größe 1280 x 1024 starten. Durch geschickten Einsatz weniger Linux-Tools war es mir aber möglich, ohne KolourPaint zu verändern, mein gewünschtes Verhalten zu bekommen. Dieser Artikel beschreibt, wie ich bei KolourPaint Version 4.14.2 dazu vorgegangen bin. Außerdem wird gezeigt, wie der Leser / die Leserin das für sich übernehmen kann.

2. Einleitung

KolourPaint nutzt Informationen aus vorigen Programmabläufen. Das legt die Vermutung nahe, dass K.P. eine Konfigurationsdatei verwendet um die Information über die Größe des zuletzt gespeicherten Bildes abzuspeichern bzw. wieder zu lesen. Doch wo der Speicherort ist und wie der Name dieser Datei heißt, ist vorerst unbekannt. Es gibt mehrere Möglichkeiten, das zu ändern. So wäre eine Möglichkeit, sich den Quellcode von K.P. anzuschauen. Allerdings erfordert dies sehr viel Zeit und Einarbeitungsaufwand. Für Benutzer, die nicht programmieren können, stellt dies also keine realistische Option dar. Nun ist es aber so, dass Dateizugriffe über den Aufruf von Systemroutinen erfolgen. Mit der Hilfe des Linux-Tools „strace“ können wir diese Aufrufe sehen und so Teile über das Verhalten von Programmen erfahren ohne viel Zeit zu investieren, geschweige denn Programmieren zu müssen. Deshalb habe ich mich erst mal für einen Versuch mit strace entschieden. Dazu benötigen wir eine Linux-Konsole, aber keine Angst: Es wird jeder Handlungsschritt genau beschrieben und als Vorwissen wird lediglich vorausgesetzt, dass Sie das Programm „Konsole“ starten können. Um aber „strace“ nutzen zu können, sollten Sie sicherstellen, dass es auch bei Ihnen eingerichtet ist. Unter Debian können Sie dafür das Paket „strace“ mithilfe eines Programms Ihrer Wahl (z. B. synaptic) zu installieren. Wenn Sie eine andere Linux-Distribution verwenden, zögern Sie nicht, sich zu melden; der Autor oder Ihre lokale Linux-User-Group hilft Ihnen sicherlich gerne!

3. Los gehts!

3.1. Finden der Konfigurationsdatei von [[http://kolourpaint.sourceforge.net/|KolourPaint]]

Als Erstes habe ich den Terminal-Emulator „Konsole“ gestartet. Nun konnte es gleich losgehen, die Interna von KolourPaint zu erforschen. Natürlich tuts an dieser Stelle auch ein anderer Terminal-Emulator Ihrer Wahl. Alle verwendeten Konsolenbefehle sind nun im weiteren Verlauf des Artikels mit dem anfänglichen Dollar-Zeichen ($) gekennzeichnet und mit einem Enter-Symbol ([Enter]) abgeschlossen. So wäre der Befehl „ls | less“ wie folgt formatiert:

 $ ls | less[Enter]

Die Zeichen „[Enter]“ sollen das Bestätigen des Befehls durch Drücken der Enter-Taste markieren.

Ein Aufruf von

 $ strace -o syscalls-kolourpaint kolourpaint[Enter]

gab mir nun eine Liste aller aufgerufenen Systemroutinen in die Datei „syscalls-kolourpaint“ aus. Zusätzlich wurde das Programm „kolourpaint“ ganz normal gestartet. Anschließend änderte ich die Größe des Bildes auf eine möglichst ungewöhnliche Größe (z. B. auf 567x231). Wichtig war aber (das werden wir später im Artikel sehen) für mich, dass ich mir diese Bildgröße gemerkt habe. Das tat ich, um den Ort der Einstellung zuverlässiger zu finden. Anschließend habe ich das Bild im Verzeichnis „/tmp“ mit dem Namen „koulorpaint-size-test.png“ gespeichern und das Programm wieder beendet. Ein Aufruf des Befehls „$ head syscalls-kolourpaint[Enter]“ zeigte mir nun die ersten 10 Zeilen der Datei „syscalls-kolourpaint“ an. Sie sahen so aus:

execve("/usr/bin/kolourpaint", ["kolourpaint"], [/* 50 vars */]) = 0
brk(0)                                  = 0xc27000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9c2c92f000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=229545, ...}) = 0
mmap(NULL, 229545, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9c2c8f6000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)

Genauere Informationen über die Struktur dieser Ausgabe habe ich für Sie in „Kurzinfo strace“ grob zusammengefasst. Für mehr Informationen darüber, seien Sie an dieser Stelle auf die Manual-Seite von strace ($ man strace[Enter]) verwiesen. Um nur die von K.P. geöffneten Dateien anzeigen zu lassen, halfen mir die Programme „grep“ und „less“; der Konsolenbefehl sah dann so aus:

 $ grep -e '^open' syscalls-kolourpaint | less[Enter]

Nun sah ich zwar alle geöffneten Dateien, die KolourPaint während des Programmablaufs geöffnet hatte. Allerdings, war es auf den ersten Blick keine Datei zu erkennen, welche im Namen „kolourpaint“ enthielt,Durch Drücken der Cursor-Tasten hoch und runter konnte ich die Ausgabe weiter betrachten. Da ich das Programm „less“ nun öfters benutze, wusste ich, dass „less“ den unglaublich nützlichen Befehl „&“ (Ampersand, Zeilen ausblenden) versteht. Ich tippte also „&kolourpaint“ und konnte mir damit nur Zeilen anzeigen lassen, welche den Ausdruck „kolourpaint“ enthielten. Und prompt stach mir eine Zeile ins Auge:

open("/home/invalid_id/.kde/share/config/kolourpaintrc", O_RDONLY|O_CLOEXEC) = 8

3.2. Entschlüsseln der Konfigurationsdatei

KolourPaint öffnete wohl irgendwann die Datei "/home/invalid_id/.kde/share/config/kolourpaintrc". Warum war das aufällig für mich? Und zwar, weil viele Konfigurationsdateien unter Linux mit „rc“ enden (evtl. für „Run Configuration“) und in einem Unterverzeichnis des Benutzerverzeichnisses gespeichert werden, welches mit einem Punkt anfängt. Daher wagte ich einen Blick in die Datei:

...
[Flatten Effect Settings]
Color1=255,0,0
Color2=0,0,255

[General Settings]
Color Similarity=0.24
First Time=false
Last Document Size=567,231
More Effects - Last Effect=7
Open Images in the Same Window=false
Resize Scale - Last Keep Aspect=false
Resize Scale - ScaleType=0
Show Grid=true

[KFileDialog Settings]
Height 1024=487
...

Und voila, es findet sich die Größe des zuletzt gespeicherten Bildes:

Last Document Size=567,231

Offensichtlich wird rechts vom Gleichheitszeichen (=) die Größe in der Form Breite, Höhe gespeichert. Nun wusste ich, von wo KolourPaint die Information über das beim Start anzuzeigende Bild ausliest und konnte durch ein selbstgeschriebenes Shell-Skript (siehe Anhang) dafür sorgen, dass meine gewünschte Startbild-Größe dem Programm KolourPaint als Größe des zuletzt gespeicherten Bildes vorgegaukelt wird.

4. Das Skript "kolourpaint-Size.sh"

4.1. Für Ungeduldige: die Einrichtung kurz erklärt

Mithilfe von kolourpaint-Size.sh ist es möglich, einfach per Mausklick auf eine Verknüpfung KolourPaint mit einer fest definierten Bildgröße zu starten. Wie Sie solch eine Verknüpfung auf Ihrer Arbeitsfläche einrichten, wird hier für KDE Version 4.14.2 beschrieben (allerdings: ohne Gewähr auf Richtigkeit oder Aktualität):

4.1.1. Abspeichern des Skripts an einen Ort Ihrer Wahl

Speichern Sie das Skript im Anhang dieses Artikels auf Ihrem Rechner ab. Aber: Merken Sie sich den Zielort, Sie werden ihn noch brauchen.

4.1.2. Das Skript ausführbar machen

Starten Sie einen Dateimanager Konqueror und navigieren Sie zu dem Ort, an dem Sie kolourpaint-Size.sh abgespeichert haben. Klicken Sie nun mit der rechten Maustaste auf das Symbol, welches die Datei kolourpaint-Size.sh repräsentiert und wählen Sie in dem aufklappenden Menü "Eigenschaften". Nun erscheint ein Dialog mit 3 Registerreiter, "Berechtigungen" ist Einer davon. Wählen Sie diesen aus und stellen Sie sicher, dass darin die Box "Ausführbar" aktiviert ist. Bestätigen Sie eine evtl. Änderung der Berechtigungen mit einem Klick auf den Knopf "OK". Schließen Sie den Dateimanager wieder.

4.1.3. Die Verknüpfung auf der Arbeitsfläche erstellen

Für eine gewünschte Größe von 2048 x 1024 Pixeln:

  1. Rechtsklick auf Arbeitsfläche
  2. auf Neu erstellen -> Verknüpfung zu Programm klicken; es erscheint ein Dialog.

  3. "Verknüpfung zu Programm" neben Zahnradsymbol mit "KolourPaint (2048x1024)" ersetzen

  4. den Reiter "Programm" auswählen
  5. alternativ zu 6.: Im Textfeld bei dem "Befehl" steht den kompletten Pfad inklusive dem Dateinamen zum Shell-Skript angeben
  6. alternativ zu 5.: Klicken Sie auf "Auswählen" und wählen Sie das Skript bequem per Dialog aus
  7. nach dem gerade eingegebenen sog. absoluten Dateinamen ein Leerzeichen eingeben und anschließend -w 2048 -h 1024 eingeben
  8. den Dialog mit einem Klick auf "OK" bestätigen und schließen.

Um nun KolourPaint mit einem neuen Bild der eingestellten Maße aufzurufen, klicken Sie einfach auf die eben erstellte Verknüpfung. Nun können Sie kreativ werden!

4.2. Erweiterte Funktionen des Skripts

Das Skript wird hauptsächlich über Befehlszeilenargumente gesteuert. Um diese Funktionen zu nutzen, starten Sie einen Befehlszeilen-Emulator Ihrer Wahl (z. B. konsole) und wechseln Sie mit Hilfe des Kommandos "cd " in das Verzeichnis, in dem Sie das Skript abgespeichert haben. Beispiel:

 $ cd /home/kaspar/bin 

Sie können sich nun mit dem Schalter "--help" über die Verwendung des Skripts informieren:

 $ ./kolourpaint-Size.sh --help 

Zum Zeitpunkt der Verfassung dieses Artikels sollte nun in etwa folgende Ausgabe zu sehen sein:

usage: 
        ./kolourpaint-Size.sh options

available options:
-w WIDTH        set the width in pixels [mandatory]
-h HEIGHT       set the height in pixels [mandatory]
--help          show this screen and exit.
-d              dry mode, print updated config file to stdout and exit. [default=no]
-c              perform version check only
-f              force execution even with incompatible version

5. FAQ - Frequently Asked Questions / Häufig gestellte Fragen

Sollte Ihre Frage hier nicht aufgelistet sein, kontaktieren Sie den Autor .

Kurzinfo strace

Das Linux-Tool strace zeigt uns unter Anderem, welche Systemaufrufe ein Programm unserer Wahl durchführt. Jeder Systemaufruf wird normalerweise auf der Kommandozeile in einer Zeile ausgegeben und hat die folgende Form:

der Name der aufgerufenen Systemroutine als Zeichenfolge vor der öffnenden Klammer „(„; daran anschließend in den Klammern „(„ und „)“ die Parameter des Systemaufrufs durch Komma getrennt; der Rückgabewert des Systemaufrufs nach dem Gleichheitszeichen „=“.

Beispiel: Die Ausgabe close(3)                                = 0 lässt sich also wie folgt aufschlüsseln:

Name d. Systemaufrufs: „close“ Parameter: 3 Ergebnis: 0

Weitere Informationen sind auf der Webseite von strace zu finden.

TODO:

  • - Wiki Markup korrigieren
    - Tabelle mit getesteten Versionen von KolourPaint hinzufügen
    - Kurzanleitung zur Benutzung des Skripts schreiben

@SIG@


Dokumentation/KolourPaintBildgroeßeBeiStartFestsetzen (last edited 2016-02-06 20:08:26 by invalid-id)