I/O Probleme mit digikam

June 21, 2012

Meinen Rechner verwende ich seit dem Kauf eines Tablets vorwiegend für die Verwaltung meiner Fotos mit digikam.

Schon seit mehreren Kubuntu Versionen ärgere ich mich über die schlechte Performance meines Rechners. Als Flaschenhals bei der Performance habe ich den Disk-I/O ausgemacht.
Die Platte ist (insbesondere beim Arbeiten in Digikam) ständig am arbeiten, top und iotop zeigen, dass das System auf I/O wartet.
Ich war schon fast so weit mir eine SSD Platte zuzulegen, das war mir allerdings dann doch zu teuer. Zudem kam es mir komisch vor, dass so einfache Aufgabe, wie z.B. das EXIF-Rotate mehrerer  Bilder in digikam meinen Rechner lahmlegen können. Ich habe deshalb das Problem etwas näher analysiert.

Informationen zu meinem System:

– Kubuntu 12.04
– LVM + LUKS + EXT4
– Intel(R) Core(TM)2 Duo 2 Ghz
– 2 Gb RAM
– Sata Disk: Hitachi Travelstar 5K

Hier die Ergebnisse meiner Analyse:

iotop zeigt während dem arbeiten in digikam, dass der jbd2/dm-6-8 (Journaling Prozess vom EXT4) Prozess den größten Teil der IO-Last verursacht:
Total DISK READ:      19.19 K/s | Total DISK WRITE:       2.08 M/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                 
 1121 be/3 root        0.00 B/s    0.00 B/s  0.00 % 83.57 % [jbd2/dm-6-8]
 2915 be/4 volker      0.00 B/s   61.42 K/s  0.00 % 27.76 % digikam -caption digiKam --icon digikam
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 % 11.43 % [kworker/0:1]
   54 be/4 root        3.84 K/s    0.00 B/s  0.00 % 11.06 % [kworker/0:2]

Meine Recherche im Netz ergab,  dass es evtl. helfen könnte den Interval zu vergrößern, mit dem das EXT4 Dateisystems seine Metadaten auf die Platte schreibt. Der default ist 5 Sekunden. Ich habe Testweise das Interval auf 30 Sekunden erhöht (mount -o,remount,commit=30 /home). Leider hatte dies keine fühlbaren Verbesserungen gebracht.

Im Netz bin ich dann auf die Möglichkeit gestoßen, das EXT4 Dateisystem zu tracen und zwar folgendermaßen:

# starten des Kernel trace
echo 1 > /sys/kernel/debug/tracing/events/ext4/ext4_sync_file_enter/enable

# auslesen des traces
cat /sys/kernel/debug/tracing/trace

Der obige Trace zeichnet auf, wenn ein fsync auf einem EXT4 Dateisystem ausgeführt wird. Folgendes lieferte der Trace während des Arbeitens in digikam:

[...]
# mehrere hundert Zeilen folgender Art:
digikam-2898  [000]   167.651034: ext4_sync_file_enter: dev 252,6 ino 3019998 parent 2228273 datasync 0 
digikam-2898  [000]   167.651685: ext4_sync_file_enter: dev 252,6 ino 3019257 parent 3019998 datasync 0 
digikam-2898  [001]   167.653826: ext4_sync_file_enter: dev 252,6 ino 3020412 parent 3019998 datasync 0 
digikam-2898  [000]   167.665824: ext4_sync_file_enter: dev 252,6 ino 3019259 parent 3019998 datasync 0 
digikam-2898  [001]   167.674035: ext4_sync_file_enter: dev 252,6 ino 3019998 parent 2228273 datasync 0
digikam-2898  [001]   167.674691: ext4_sync_file_enter: dev 252,6 ino 3019259 parent 3019998 datasync 0 
[...]

Mit find habe ich mir dann bei den häufig auftretenden Inode Nummern die dazugehörigen Dateien herausgesucht: z.B.:

find /home -inum 3019257
/home/neuntoeter/Fotos/thumbnails-digikam.db

Ich habe dann festgestellt, dass die sqlite Datenbanken digikam4.db und thumbnails-digikam.db die Auslöser für die fsyncs sind.

Nach ein wenig Recherche habe ich herausgefunden, dass bei sqlite Datenbanken diese fsyncs bei jeder Datenbankänderung normal sind (zumindest bei journal_mode=delete).

Digikam verwendet standardmäßig den Journal Mode “Delete”:

sqlite3 digikam4.db 
sqlite> pragma journal_mode;  
delete
Es gibt allerdings für sqlite Datenbanken ab Version 3.7 die Möglichkeit den journal_mode “WAL” zu verwenden. Mit diesem werden deutlich weniger fsync Aufrufe ausgeführt.

Ich habe nun mal den Journal Mode von digikam4.db und thumbnails-digikam.db auf WAL umgestellt:

sqlite3 digikam4.db  
sqlite> pragma journal_mode=WAL;

Und siehe da! Die Performance ist deutlich besser und es gibt deutlich weniger Festplattenaktivität.

Hier die Vergleichswerte mit journal_mode=wal und journal_mode=delete beim EXIF-Rotate von 4 Bildern in digikam:

Journal_mode=delete:

  • Dauer EXIF-Rotate: 12 Sekunden
  • Anzahl fsyncs von digikam: 171

Journal_mode=wal:

  • Dauer EXIF-Rotate: 7 Sekunden
  • Anzahl fsyncs von digikam: 32


Advertisements

Einrichten eines mit LUKS verschlüsselten Volumes unter (K)ubuntu

May 29, 2011

Warum ich ecryptfs durch LUKS (Linux Unified Key Setup) ersetzt habe:

Vor einiger Zeit habe ich wichtige Daten meines Heimatverzeichnisses verschlüsselt. Hierfür habe ich das mit ecryptfs verschlüsselte Private-Verzeichnis unter Kubuntu verwendet.
Im Großen Ganzen war ich damit auch zufrieden. Es gab allerdings zwei Probleme mit denen ich immer wieder zu kämpfen hatte:

  • Nach dem Ausloggen aus KDE wurde beim erneuten Einloggen das Private Verzeichnis nicht mehr gemountet (siehe auch: https://bugs.launchpad.net/ubuntu/+bug/779308)
  • Das Starten von digikam (> 13000 Bilder) dauerte eine Ewigkeit ( ca. 5 Minuten).

Die Digikam Performanceprobleme habe ich mit strace analysiert und dabei ist mir aufgefallen, dass Digikam bei jedem Start für jedes Foto ein stat64 Aufruf macht. Dies scheint unter ecryptfs sehr I/O Intensiv und damit langsam zu sein.

Aus dem oben genannten Gründen habe ich deshalb mein /home logical Volume über LUKS mit AES verschlüsselt.

So richtet man unter Kubuntu die Verschlüsselung eines Volumes nachträglich ein

Zunächst wird eine Partition bzw. ein Logical Volume benötigt. Im Beispiel verwende ich ein Logical Volume. Anlegen des Logical Volumes mit lvcreate:

root@kiste:/home/volker# lvcreate -n testcrypt -L 1G datavg
Logical volume "testcrypt" created

Anschließend muss das Logical Volume für die Verwendung mit LUKS initialisiert werden. Hierbei muss die Passphrase angegeben werden, die auch beim Entschlüsseln benötigt wird:

root@kiste:/home/volker# cryptsetup luksFormat /dev/datavg/testcrypt
WARNING!
========
This will overwrite data on /dev/datavg/testcrypt irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:

Um mit dem Volume arbeiten zu können muss dies nun geöffnet werden. Hierfür muss die oben angegeben Passphrase angegeben werden:

root@kiste:/home/volker# cryptsetup luksOpen /dev/datavg/testcrypt cryptedtest
Enter passphrase for /dev/datavg/testcrypt:

Unter /dev/mapper gibt es nun ein Gerät mit dem oben angegebenen Namen cryptedtest (falls nicht, dann evtl folgendes ausführen: /etc/init.d/cryptdisks reload):

root@kiste:/home/volker# ls -ltrs /dev/mapper/
total 0
0 crw------- 1 root root 10, 236 2011-05-29 18:38 control
0 lrwxrwxrwx 1 root root 7 2011-05-29 18:38 datavg-datalv -> ../dm-1
0 lrwxrwxrwx 1 root root 7 2011-05-29 18:38 datavg-swaplv -> ../dm-2
0 lrwxrwxrwx 1 root root 7 2011-05-29 19:00 cryptedtest -> ../dm-7

Auf diesem Gerät kann nun ein Dateisystem erstellt werden:

root@kiste:/home/volker# mkfs.ext4 /dev/mapper/cryptedtest
mke2fs 1.41.14 (22-Dec-2010)
[...]
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Und das Dateisystem kann nun gemountet werden:

root@kiste:/tmp# mkdir cryptmount
root@kiste:/tmp# mount /dev/mapper/cryptedtest cryptmount
root@kiste:/tmp# df -h /tmp/cryptmount
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cryptedtest
1007M 18M 939M 2% /tmp/cryptmount

Damit das Dateisystem nun beim Neustart automatisch gemountet wird, muss das logical Volume in der /etc/fstab und /etc/crypttab eingetragen werden.

/etc/crypttab

# <target name> <source device> <key file> <options>
cryptedtest /dev/datavg/testcrypt none luks

/etc/fstab

/dev/mapper/cryptedtest /mnt/testmount ext4 defaults 1

Anschließend sollte die initial Ramdisk neu geschrieben werden (bin mir nicht 100% sicher ob das wirklich nötig ist – geschadet hats nicht)

root@kiste:/tmp# dpkg-reconfigure initramfs-tools
update-initramfs: Generating /boot/initrd.img-2.6.38-8-generic

Beim Reboot wird nun vor dem start des KDM / GDM nach der Passphrase für das LUKS Volume gefragt und dies anschließend gemountet.


Kalender und Kontakt-Synchronisierung zwischen Android Smartphone und KDE Akonadi PIM-Framework

December 10, 2010

Ich habe mir vor kurzem ein Android Smartphone zugelegt (HTC Magic). Standardmäßig gibt es nur die Möglichkeit Kontakte oder Kalenderdaten über Gmail (bzw. über einen Exchange Server) zu syncen.

Aus Datenschutzgründen kam das für mich nicht in Frage.

Ich habe mich deshalb nach Möglichkeiten umgesehen wie ich meine Daten zwischen KDE und Android auf andere Weise syncen kann und das Problem mit einem lokalen Funambol Server gelöst.

Folgende Softwarekomponenten habe ich hierfür verwendet:

Linux Laptop mit Kubuntu 10.10

  • KDE 4.5.1 (akonadi / kontact / korganizer)
  • Funambol Server 8.7.0
  • Akunambol 0.2.1

HTC Magic

  • Android 2.2.1
  • CyanogenMod 6.1.0 RC1
  • Funambol Android Sync 9.0.0 (Snapshot 20100830)

Installation des Funambol Servers

Das Installationspaket des Funambol Servers kann hier heruntergeladen werden: https://www.forge.funambol.org/download/

Anschließend muss das Installationsprogramm gestartet werden (Der Server kann mit einem normalen Benutzer installiert und betrieben werden):

volker@kiste:~/download/funambol$ ./funambol-8.7.0.bin

Do you agree to the above license terms? [yes or no]

yes

Directory to extract Funambol [/opt] <return to accept>?

/home/volker/Private

Directory to extract Funambol [/home/volker/Private] <return to accept>?

Unpacking...

Do you want to start the server? [yes or no]

yes

Nach der Installation lauscht der Server standardmäßig auf Port 8080.

Der Funambol Server lässt sich manuell folgendermaßen starten und stoppen:

cd <INSTALL_DIR>/bin

./funambol [start|stop]

Konfiguration des Funambol Servers

Für die Administration des Funambol Servers gibt es einen speziellen Admin Client, den man folgendermaßen startet <INSTALL_DIR>/admin/bin/funamboladmin.

Nach dem Starten des Administrations Tools sollte man erst einmal das Administrator Passwort ändern und einen Benutzer für das Syncen von Daten anlegen:

  • Starten des Administrations Tools
  • Im linken Fensterteil Doppelklick auf “Funambol Administrations Tool”
  • Im Login Fenster einfach auf Login klicken
  • Nun unter Server Settings-> Users das Passwort des admin Users ändern
  • Nun Admin Tool beenden und neu einloggen (war bei mir nötig) und anschließend einen neuen “normalen” Benutzer mit der Rolle “User” anlegen.

Installation des Funambol Clients für Android

Wichtig: Falls Kalenderdaten gesynct werden sollen, dann auf jeden Fall die Version 9 des Clients verwenden (dies ist allerdings eine Entwicklerversion).

Der Client (apk-Paket) kann auf folgender Seite heruntergeladen werden: https://android-client.forge.funambol.org/ ( Documents & files -> Releases -> Funambol Sync Client v 9.0.0 (snapshot))

Das apk Paket wie gewohnt auf dem Android Smartphone installieren.

Nach dem Starten von “Funambol Sync” auf dem Android Smartphone muss man nun den zuvor installierten (und hoffentlich vom Android netzwerkmäßig erreichbaren) Funambol Server angeben.

  • Username / Password: Hier den angelegten Benutzer mit “User” Rolle angeben
  • Server Ulr: http://<funambol_server&gt;:8080/funambol/ds

Anschließend sollte sich der Sync Client mit dem Server verbinden und sich die Kontakte und Kalenderdaten auf den Funambolserver syncen lassen.

KDE PIM Daten mit Funambol Server syncen

Für den Abgleich der Daten zwischen akonadi und dem Funambol Server wird das akunambol Tool benötigt.

Für die Installation unter Kubuntu 10.10 habe ich in der /etc/apt/sources.list folgende Einträge hinzugefügt:

# funambol client kde

deb http://ppa.launchpad.net/akunambol/ppa/ubuntu maverick main

deb-src http://ppa.launchpad.net/akunambol/ppa/ubuntu maverick main

Anschließend kann man die Software mit apt-get install akunambol installieren.

Nun kann man akunambol starten und konfigurieren:

Wichtig ist, dass die Remote URIs richtig angegeben sind, sonst schlägt der Sync fehl. Bei den Remote URIs müssen die SyncSources aus dem Funambol Server angegeben werden. Diese kann man sich über das Administration Tool des Funambol Servers angezeigen lassen. Siehe folgender Screenshot:

Nun sollte die Akonadi Konfiguration im KDE überprüft werden. Hierfür kann man z.B. Akonaditray verwenden.

Wichtig ist, dass Akonadi die angegebenen Resourcen auch ändern kann (Doppenklick auf eine Ressource und ggf. Read-only Haken entfernen).

Außerdem wichtig ist, dass die PIM eurer Wahl (bei mir Kontact und Korganizer) auch die Akonadi Ressourcen verwendet (bzw. Akonadi und Kontact/Korganizer die selben Ressourcen verwenden).

Ist dies gewährleisten dann kann nun versucht werden mit akunambol die Daten zwischen dem Funambol Server und Akonadi zu syncen.

War der Sync erfolgreich, dann müssten nun die Kontakte und Kalenderdaten vom Andoid in Kontact/Korganizer sichtbar sein.

Update:

Achtung: Der Funambol Android Sync 9.0.0 hat wohl noch Probleme ganztägige Termine zu syncen.


Update 2:

Nach dem Update auf KDE 4.6.2 ist akunambol beim Syncen immer gecrashed.
Nach dem manuellen kompilieren von akunambol funktioniert es auch unter kde 4.6.2. (siehe auch: http://old.nabble.com/-Bug-264585–New%3A-Akunambol-crash-on-KDE-4.6.0-while-sync-Contacts-td30784318.html#a30790886)


Update 3:

das manuelle kompilieren war wohl doch nicht auf Dauer erfolgreich… Ich habe inzwischen den Funambol Server auf Version 9.0 aktualisiert und erneut das aktuellste akunambol kompiliert. Jetzt scheint der Kalender wieder gesynct zu werden, aber die Kontakte lassen sich nicht syncen (akunambol(8421): 17:36:01 ERROR More than one address book, we need a way to pick one).

Wer selber kompilieren möchte:

wget -c http://anongit.kde.org/akunambol/akunambol-latest.tar.gz
cd akunambol
./initrepo.sh
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$KDEDIRS -DCMAKE_BUILD_TYPE=debugfull ..
make
make install or su -c 'make install'

Device notifier script for updating OSM map on Garmin device

December 30, 2009

I am regularly mapping things in Openstreetmap with my Garmin Nüvi 205 and a second GPS Tracker (iBlue 747a+).

It is very usefull to have a current version of the OSM map on the Garmin device, so that you see what is actually missing in the map when you are in the field.

I used to manually download the map file from http://dev.openstreetmap.de/aio/ and then uncompressing it to the garmin device. But I was getting tired of doing this repetitive task and so I wrote a script for this….

The script can be executed via the device notifier in KDE4 (more infos about device notifier can be found in an older blogpost of mine: Adding actions to the Device Notifier widget in KDE 4.3).


After selecting “Update OSM map on Garmin device” in the device notifier the script downloads the map and shows a progressbar.

When it is finished a pop-up appears and the device can be removed via device notifier.

I have attached the script (update_map.sh)  and the device notifier config (update_map.desktop) to this post.

The script needs the package “pv” (pipe viewer). It can be installed in kubuntu with “apt-get install pv“.

update_map.sh (place it in /usr/local/bin)

#!/bin/bash

url=http://dev.openstreetmap.de/aio/germany/gmapsupp.img.bz2
path=$1
target_dir=$path/Garmin
target_file=$target_dir/gmapsupp.img

progressfile=/tmp/progress_$$
echo 0 > $progressfile

function watch_progress {
dbusRef=$1
while [ true ]
do
sleep 1
# check if dbus object exists
qdbus $dbusRef 1>/dev/null 2>&1
if [ “$?” -ne “0” ]
then
# dbus Object does not exist (anymore)
exit 0
fi

# read current progress
progress=`tail -n1 $progressfile`

# set progress to progressbar
qdbus $dbusRef Set “” “value” $progress
done

}

if [ ! -d $target_dir ]
then
kdialog –msgbox “$target_dir does not exist!”
exit 1
fi

kdialog –yesno “Update OSM Map on $target_dir ?”
ret=$?

if [ “$ret” -eq “0” ]
then

# get file size
size=`curl -sI $url | grep Content-Length | cut -d ‘ ‘ -f 2 | sed “s/[^0-9]//g”`
kbsize=$((size/1024))k

dbusRef=`kdialog –progressbar “Downloading OSM Map” 100`
watch_progress “$dbusRef” &

wget -qO- $url | pv -s $kbsize -n 2>$progressfile | bunzip2 > $target_file
sync
sync

qdbus $dbusRef close
rm -f $progressfile

error=0
#check return codes in pipe
for rc in ${PIPESTATUS[*]}
do

if [ “$rc” -ne “0” ]
then
error=1
fi
done

if [ “$error” -ne “0” ]
then
kdialog –msgbox “There was an error updating the map”;
else
kdialog –msgbox “The map was updated successfully – You may now disconnect the device”;
fi

else
kdialog –msgbox “cancelled…”
fi

update_map.desktop (place it in e.g. /usr/share/kde4/apps/solid/actions)

[Desktop Entry]
X-KDE-Solid-Predicate=[[ StorageVolume.ignored == false AND StorageVolume.usage == ‘FileSystem’ ] OR [ IS StorageAccess AND StorageDrive.driveType == ‘Floppy’ ]]
Type=Service
Actions=open;

[Desktop Action open]
Name=Update OSM map on Garmin device
Exec=/usr/local/bin/update_map.sh %f
Icon=system-file-manager
X-Ubuntu-Gettext-Domain=desktop_kdebase-workspace


Adding actions to the Device Notifier widget in KDE 4.3

November 5, 2009

The default behaviour

The KDE device notifier is a widget that can be used to managed plugged-in devices like e.g. usb pen-drives. In a default Kubuntu installation this is shown as an icon in the taskbar. When clicking on it it shows e.g. all partitions of plugged in devices.

device_notifier_taskbar

When you click on a partition it offers a couple of actions that can be started for that particular partition (e.g. downloading pictures to digikam or open the drive in dolphin).

device_notifier_default

Why I needed an additional action

A task I have to do every day is to move downloaded podcast on a usb pen-drive, so I listen to the podcasts on my car radio. In the beginning I moved the files manually to the drive and then I wrote a script that did this job for me.
The Script created a directory in the format ddmmyyyy (e.g. /media/disk/05112009) on the pen-drive and moved the files in there. Afterwards it did a sync to ensure that all data had been flushed to the drive.

As I always used the device notifier to mount the drive, I wanted to have my script as an action in there.

Where do I find the actions in the filesystem?

The actions of the device notifier are placed in the directory /usr/share/kde4/apps/solid/actions. There is one file for each action.
Custom actions for a specific user can be placed in ~/.kde/share/apps/solid/.

There are a couple of paramterers that describe the action e.g.:

  • X-KDE-Solid-Predicate determines for which devices the action should be available
  • Name is the label of the action shown in the device notifier
  • Exec is the command that will be executed.

There are some variables that can be passed to the exec-command (there might be more):

  • %f gives StorageAccess.filePath
  • %d gives Block.device
  • %i gives UDI

Adding an action to device notifier

To execute my mp3 moving script I created the file /usr/share/kde4/apps/solid/actions/movemp3.desktop:

[Desktop Entry]
X-KDE-Solid-Predicate=[[ StorageVolume.ignored == false AND StorageVolume.usage == ‘FileSystem’ ] OR [ IS StorageAccess AND StorageDrive.driveType == ‘Floppy’ ]]
Type=Service
Actions=open;

[Desktop Action open]
Name=Move MP3 files
Exec=/usr/local/bin/copy_mp3_files.sh %f
Icon=system-file-manager
X-Ubuntu-Gettext-Domain=desktop_kdebase-workspace

After restarting KDE the device notifier now contains a new entry:

device_notifier_new

Formerly I started the script from the terminal, but now I start it from the gui. Therefor I added some gui interaction to the script to make it more comfortable:

device_notifier_move1

device_notifier_move2

device_notifier_move3

Just in case anyone is interested in the simple script:

path=$1
mp3path=/home/$USER/pod
datum=`date +”%d%m%y”`
newpath=$path/$datum

kdialog –yesno “Move MP3-files to drive ($newpath)?”
ret=$?

if [ “$ret” -eq “0” ]
then

kdialog –yesno “Delete old files? ( `ls $path/[0-9][0-9][0-9][0-9][0-9][0-9]` )”
if [ “$?” -eq “0” ]
then
rm -r $path/[0-9][0-9][0-9][0-9][0-9][0-9]
fi
mkdir -p $newpath
mv $mp3path/*mp3 $newpath/
sync
sync
sync
kdialog –msgbox “Files were moved, you may now disconnect the drive by device notifier!”

else
kdialog –msgbox “cancelled…”
fi


Digikam 1.0.0-beta5 verwendet Openstreetmap Karten

November 3, 2009

Digikam kann schon ein ganze Weile Fotos auf einer Karte darstellen. Hierfür gibt es die Geolocation Ansicht, welche auf marble aufsetzt. Bisher wurde an dieser Stelle eine ungenaue und wenig detailierte Karte angezeigt. In der aktuellen Version können die Fotos nun auch auf der Openstreetmap Karte dargestellt werden.

digikam_with_osm

Beim herauszoomen aus der Karte werden nebeneinander liegende Bilder zu einem einzelnen zusammengefasst. Auf diesem wird wiederum die Anzahl der zusammengefassten Bilder angezeigt.  Somit wirkt die Karte auch dann nicht überladen, wenn sehr viele Fotos in einem kleinen Gebiet geschossen wurden.

Besonders praktisch finde ich, dass man das Feature mit der digikam Suche kombinieren kann. So kann man sich ganz einfach anzeigen lassen, wo man an einem bestimmten Tag gewandert ist (siehe Screenshot) oder sich z.B. alle mit “Strand” getaggten Fotos auf der Karte anzeigen lassen.

digikam_osm_search

Ein Feature vermisse ich leider noch in der Kartenansicht: Praktisch fände ich es, wenn beim Klick auf ein Foto in der Karte das Foto vergrößert dargestellt würde. Leider passiert beim Klicken auf ein Bild im Moment gar nichts.
Ich werde gleich mal auf kde.org einen Feature Request eintragen (http://bugs.kde.org/show_bug.cgi?id=212967).


Update to Kubuntu 9.10

November 3, 2009

My laptop is now finally running Kubuntu 9.10. After some problem with the upgrade I decided to do a fresh install.

After the regular upgrade the following was messed up:

  1. The boot splash was not shown correct during startup, as the screen resolution settings during boot time seem to have changed in kubuntu 9.10
  2. The x server was running with the wrong resolution (1024×768) and chose the wrong refresh rate of my connected lcd monitor.
    I changed the resolution of my connected monitor in the kde system settings to 1280×1024 and disabled the internal display. Everything looked fine then, except that the mouse pointer disappeared. But worst of all the setting was gone after reboot.

After the fresh install the monitor still didn’t use the full resolution of my connected monitor. Changing the resolution in the kde system settings worked – this time the mouse pointer didn’t disappear. But unfortunately after a reboot the resolution was again to low (1024×768).

I found a very useful page about different ways of changing screen settings: https://wiki.kubuntu.org/X/Config/Resolution

Adding the following line to /etc/kde4/kdm/Xsetop worked for me:

xrandr –output VGA1 –mode 1280×1024 –rate 60

Everything look fine until I opened firefox. The the fonts in the menu bar were far too big.

ugly_firefox

ugly firefox fonts

I then googled a bit and found the bug report Bug #420610. There it was suggested to add the following paragraph to
~/.kde/share/config/kdeglobals:

[General]
XftHintStyle=hintmedium
font=DejaVu Sans,8.-1,5,50,0,0,0,0,0

But this didn’t work. After a kde restart the fonts in firefox looked as they should, but unfortunately the fonts in kde applications  were now much to big.

After playing around with different settings I finally found a solution: In kde “system settings -> Look & Feel -> Appearance -> Fonts” I had to set Force fonts DPI to 96 DPI. Now the fonts in firefox and the other kde applications are as they should be.

fine_firefox1

At a first glance everything then looked fine. But then I entered something into the google search form and the font in the form field was again to large. I had to change the firefox paramter layout.css.dpi to 96 in about:config and restart firefox.



%d bloggers like this: