Ubuntu 16.10 – LibreOffice 5: Bessere Rechtschreib- und Grammatikprüfung

Wer mit der Leistung der in LibreOffice integrierten Rechtschreib- und Grammatikprüfung nicht zufrieden ist, muss nicht gleich auf Windows und Word umsteigen oder sich Softmaker Office mit integriertem Duden-Korrektor kaufen. Vielleicht reichen ihm ja schon die Verbesserungen, die das Language Tool mitbringt.

Leider benötigt das Language Tool eine Java Laufzeitumgebung. Die ist standardmäßig unter Ubuntu nicht installiert. Glücklicherweise brauchen wir aber nicht gleich Oracle Java zu installieren – Open JDK reicht ebenfalls aus. Zum Installieren der aktuellen Version genügt folgender Befehl:

sudo apt-get install openjdk-9-jre

Allerdings scheint LibreOffice 5 mit Version 9 (noch) nichts anfangen zu können. Daher müssen wir die alte Version 8 installieren:

sudo apt-get install default-jre

Wer schon Version 9 installiert hat/hatte, kann die genutzte Java-Version mit folgendem Befehl über die entsprechende Zahlentaste auswählen:

sudo update-alternatives --config java

Wenn „/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java“ vorhanden ist, sollte LibreOffice beim nächsten Start automatisch die richtige Java-Laufzeitumgebung einbinden. Ob dies der Fall ist, kann etwa in LibreOffice Writer über „Extras->Optionen: LibreOffice->Erweitert“ nachgeschaut werden. Im Feld Java Optionen sollte „OracleCorporation 1.8.0_111“ stehen und ausgewählt sein.

Wer jetzt versucht, das Language Tool zu installieren, erhält aber immer noch eine Fehlermeldung: „com.sun.star.uno.RuntimeException“. Um diesen Fehler zu beheben, müssen wir noch ein weiteres Paket installieren:

sudo apt-get install libreoffice-java-common

Jetzt kann das Language Tool (aktuell ist im Augenblick Version 3.5) von der Webseite https://languagetool.org/de/ heruntergeladen und durch Öffnen der Datei LanguageTool-3.5.oxt mit LibreOffice Writer installiert werden.

Einige Einstellmöglichkeiten bietet das Tool in LibreOffice unter „Extras->Language Tool: Optionen“ an.

Quellen:

Ubuntu 16.10 – Secure Boot und VirtualBox 5

Wer unter Ubuntu 16.10 VirtualBox nutzen will, hat mindestens zwei Möglichkeiten: 1. Secure Boot ausschalten, damit der Linux Kernel das unsignierte Modul für VirtualBox laden kann, oder 2. das Modul selber signieren, damit Secure Boot weiterhin funktioniert.

Hier der Weg, um die zweite Möglichkeit umzusetzen:

  1. Nach der Installation von VirtualBox mit „sudo apt-get install virtualbox“ generieren wir als erstes unseren eigenen MOK im Verzeichnis „/PFAD_ZUM_MOK/“ mit:
    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Custom MOK/"
  2. Dann die erzeugten Schlüssel für Secure Boot importieren:
    sudo mokutil --import MOK.der

    Dabei muss ein Passwort gesetzt werden, dass einmalig zur Sicherheit beim Neustart abgefragt wird.

  3. Jetzt den Computer neu starten. Es erscheint ein blauer Screen, auf dem 1. eine Taste gedrückt, 2. „Enroll MOK“ ausgewählt, 3. „Continue“ ausgewählt, 4. „Yes“ ausgewählt, 5. das vergebene Passwort eingegeben und 6. „Ok“ ausgewählt werden muss (Hier der Prozess in Bildern).
  4. Jetzt geht es an das Signieren des VirtualBox Moduls. Dazu brauchen wir das Skript „sign-file“. Unter Ubuntu finden wir dieses im Verzeichnis „/usr/src/linux-headers-KERNEL_VERSION/scripts/“ (bitte die Versionsnummer KERNEL_VERSION entsprechend des eingesetzten Kernels anpassen, die sich mit dem Befehl „uname -r“ anzeigen lässt). Eventuell müssen dafür zunächst die Header-Files installiert werden:
    sudo apt-get install linux-headers-generic
  5. Der gesamte Signierbefehl lautet dann:
    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /PFAD_ZUM_MOK/MOK.priv /PFAD_ZUM_MOK/MOK.der $(modinfo -n vboxdrv)
  6. Jetzt muss das Modul nur noch geladen werden, dann kann VirtualBox gestartet werden:
    sudo modprobe vboxdrv

Quellen:

Baikal CalDAV: Wenn sich ein Kalender nicht synchronisiert

Vor kurzem habe ich bei der Baikal CalDAV Installation auf einem meiner Raspberry PIs einen Fehler festgestellt. Ein selten benutzter Kalender nahm zwar von allen Geräten (MacBook, iPad, iPhone) neue Termine klaglos an, aber die Synchronisation zwischen den Geräten funktionierte scheinbar überhaupt nicht. Alle anderen auf dem gleichen Account laufenden Kalender synchronisierten sich jedoch klaglos.

Der Übeltäter war wohl ein nicht ganz korrekt durchgelaufenes Update auf die neues Baikal Version. In der zum besagten Kalender gehörenden Zeile in der SQLite Tabelle Calendars war kein Wert für „synctoken“ eingetragen.

Eigentlich ist der Token für die Synchronisation eine einfache Zahl (Integer). Bei einer Änderung der Daten im Kalender wird der synctoken um eins erhöht. Jeder Client braucht dann nur seinen lokalen Token mit dem des Servers zu vergleichen und sieht sofort, ob es eine Änderung gegeben hat (ohne dafür jedes Mal alle Einträge des Kalenders vergleichen zu müssen). Wenn es also keinen eingetragenen Synctoken gibt, kann es auch mit der Synchronisation nicht klappen. Daher musste für die Fehlerbehebung einfach nur eine „1“ als Wert für synctoken eingetragen werden.

  1. Auf dem Baikal Server „sqlite3“ als Admin starten:
    sudo sqlite3
  2. Die Datenbank von Baikal laden (ggf. den Pfad anpassen!) (Befehl mit Enter absenden):
    .open /usr/share/nginx/www/baikal/Specific/db/db.sqlite
  3. Datenbankinhalt der Tabelle „calendars“ ausgeben lassen (Befehl mit Enter absenden):
    SELECT * FROM calendars;
  4. Der Anfang der Ausgabe für jeden Kalender sieht so ähnlich aus:
    ID|principals/BENUTZERNAME|KALENDERNAME|KALENDERID|SYNCTOKEN|KALENDERBESCHREIBUNG|2|#FARBCODE|BEGIN:VCALENDAR

    Wenn an der Stelle SYNCTOKEN keine Zahl steht, sondern einfach zwei Striche (Pipe-Symbole) mit oder ohne Leerzeichen nacheinander kommen, dann ist der synctoken für diesen Kalender nicht gesetzt. Die ID (ganz vorne in der Zeile) für diesen Kalender merken.

  5. Synctoken manuell setzen (Befehl mit Ender absenden):
    UPDATE calendars SET synctoken = 1 WHERE id = ID;

    Bei diesem Befehl bitte das groß geschriebene ID am Ende durch die in Schritt 4 gemerkte Zahl (ID) ersetzen.

  6. sqlite3 beenden (Befehl mit Ender absenden):
    .exit

Jetzt sollte auch dieser Kalender korrekt zwischen allen Geräten synchronisiert werden.