Archive for the ‘Linux’ Category.

Debugging Ncurses applications with QT Creator

Today I stumbled over the problems while toying around with a small C project using the Ncurses library.

I recently discovered QT Creator as a decent IDE so I started to use it.

Problem 1 with running the application at all

The program builds fine and runs with ncurses if run in a seperate terminal window.
Upon run from within QT-Creator with checkmark “run in terminal” I got this error message: “Error opening terminal: unknown

After quite some googling I found the solution as the environment passed to my application in this way does not define the TERM environment variable.

So I added the definition “TERM=xterm” to the list of passed environment variables. Now the Ncurses application runs in its own terminal window.

Problem 2 with debugging the application

Naturally I do not only want to run my application, I also want to debug it using gdb. QT creator handles this normally fine so I click on “Debug.”
I see the extra terminal window opening but I get a small notice “ptrace: Operation not permitted” and all collapses.

Some more googling and I discover that Ubuntu  10.04 and later deactivate the option to attach gdb to running processes. This is something QT Creator seems to try here when running the application inside the terminal window.
I simply used the directions found here at AskUbuntu and now it works. I have the application ruuning in a seperate terminal window and I can trace, singlestep and debug it with the gdb frontend from QT Creator.

What a mess!

But it only affects debugging Ncurses and maybe S-lang projects. Normal terminal output is fine and so should be SDL based stuff aswell. It is dirty and slight hacky, but all in all it is working.

Ebookkonvertierung mit Thunar

Mein Kindle unterstützt Ebooks im MOBI Format, aber leider nicht das stärker verbreitete Epubformat. Heute wollte ich ein paar EBooks mit .epub nach .mobi konvertieren und das natürlich gleich komfortabel per Mausklick erledigen.
Die Konvertierung selbst wird von Calibre und seinen Werkzeugen durchgeführt.

Für die Integration in XFCE und Thunar habe ich mir einfach eine “Benutzerdefinierte Aktion” alias Custom Action in Thunar definiert und Dateien mit Endung .epub zugeordnet. Da das Konvertierungstool Ausgaben erzeugt, wird diese in einem eigenen Terminalfenster angezeigt, welches man nach erledigter Konvertierung einfach schliessen kann. Dazu habe ich ein einfaches Shellskript geschrieben, dem man den Dateinamen samt Pfad zum *.epub übergibt. Die konvertierte Ausgabedatei bekommt automatisch die Endung .mobi zugeteilt.

Das Skript wird von der Custom Action mit Parameter %f aufgerufen und sieht so aus:


#!/bin/bash
#
# Thunar helper to convert *.epub to *.mobi with Calibre
#
# Syntax: thunar-convert-epub-to-mobi.sh
#
# (c) 2016 by Matthias Arndt
# The GNU General Public License v2 applies.
#
# extract pathname and filename without extension
basename=$(basename "${1}")
filename="${basename%.*}"
#
xfce4-terminal -T "MOBI Conversion result" -H -x ebook-convert "${1}" "${filename}.mobi"

Backup der Filtereinstellungen von Claws Mail

Ich bin vor ein paar Wochen auf Claws Mail umgestiegen, da mich Thunderbird mit Plugins und Erweiterungen anfing, zu nerven, welche nicht mehr funktionieren.

Leider kann man die Mailfilter bei Claws Mail nicht einfach im- und exportieren, daher ist es nervig, wenn mühsam konfigurierte Filter für Spam und wichtige Mails verloren gehen. Wo also liegen die Einstellungen?

Ich habe mal ein bißchen mit find und grep gesucht, und siehe da, unter $HOME/.claws-mail/matcherrc findet sich alles, was man sucht. Die Emailaccountbezüge sind dort leider recht hart reincodiert. Wenn man bei einer Neuinstallation andere Namen verwendet, dann muß man hier möglicherweise umkonfigurieren. Aber das ist besser, als alle Regeln von Hand wieder erneut erstellen zu müssen.

Kombination find und xargs

Das folgende Konstrukt funktioniert mit den GNU Versionen von xargs, mv und find, so wie es die meisten Linuxdistributionen mitbringen.

Manchmal hat man über mehrere Verzeichnisse verteilt gleichartige Dateien, die man in einen gemeinsamen Ordner bringen möchte. Händisch geht das natürlich, das kann aber auch unübersichtlich werden. Eine geschickte Verkettung von  vorhandenen Kommandos erleichtert dem Anwender dabei das Leben.

find . -name "*.mobi" -print0 | xargs -r0 mv -t ~/tmp/

Das find-Kommando sucht die Dateien mit dem genannten Muster ab dem aktuellen Verzeichnis.

Das xargs-Kommando führt dann für jede gefundene Datei den mv-Befehl aus. Hier wird über die -t Option ein GNU-spezifisches Feature aktiviert, bei dem immer zuserst das Zielverzeichnis angegeben wird. Die zusätzlichen Optionen bei find und xargs  sorgen für korrektes Quoting der Dateinamen, wenn Leer- und Sonderzeichen enthalten sind.

Ein praktisches Beispiel sähe wie folgt aus:

Find ergibt folgendes Resultat:

./a/a.mobi
./b/b.mobi

xargs führt folgende Kommandozeilen aus:

mv -t ~/tmp/ ./a/a.mobi
mv -t ~/tmp/ ./b/b.mobi

ClamAV in Thunar einbinden

Ab und an möchte man auch unter Linux Dateien nach Viren scannen. Da ich meistens doch über graphische Oberflächen arbeite, habe ich mir ClamAV im Thunar unter XFCE eingebunden. Dies geschieht als “Custom Action” aktiv für alle Dateien.

Ich habe mich grob an die Anleitung unter http://blog.quiptime.com/node/28 gehalten. Das Skript habe ich ein bißchen erweitert und für die Verwendung von zenity umgebaut.

Das Skript sieht dann bei mir so aus:

#!/bin/bash
#!/bin/bash # # clamavscan 0.1, 05.10.2006 # # by Siegfried Neumann, www.quiptime.com # Zenity output and desktop notify by Matthias Arndt <marndt@asmsoftware.de> # # Used by Thunar with a custom action. # Custom action: clamavscan %f # TITLE="ClamAV Scan" SCANUSER=`whoami` LOGDATE=`date +"%Y-%m-%d %T"` LOGDATE_FNAME=`date +"%Y%m%d.%H%M%S"` LOGFILE="/tmp/clamavscan-$SCANUSER-$LOGDATE_FNAME.log" notify-send 'ClamAV Scan' "started" echo "ClamAV Scan Log $LOGDATE " > $LOGFILE echo "" >> $LOGFILE echo "Report location: $LOGFILE" >> $LOGFILE echo "" >> $LOGFILE echo "--------------------------------------------------------------------------" >> $LOGFILE echo "" >> $LOGFILE chmod 600 $LOGFILE clamscan -r "$1" >> $LOGFILE if [ $? -eq 0 ] then notify-send 'ClamAV Scan' "No virus found" else zenity --title "$TITLE $LOGDATE" --error --text="One or more virii found!" fi zenity --title "$TITLE $LOGDATE" --text-info --width 500 --height 400 --filename=$LOGFILE case $? in 0) echo "Finished.";; 1) xdg-open $LOGFILE;; 255) echo "Box closed.";; esac

Tips und Tricks mit der GNU/Linux Kommandozeile

Ich brauche ab und unter Linux auf der bash Kommandozeilentools. Für viele Zwecke vergesse ich auch wieder, was ich für eine bestimmte Aufgabe genau gemacht habe. Daher habe ich jetzt eine öffentliche Merkliste angelegt.

Falls jemand sinnvolle Ergänzungen hat, einfach bei mir melden.

Classic hexdump of files with the GNU Coreutils

Sometimes I’m in need of having a classic hexdump from a given binary file.
As there is no obvious command under Linux, all seem to require more or less long command line options to work, I have to note down the standard solution using the od tool provided by the GNU Coreutils.

od -w16 -A x -t x1z -v <filename>

This gives an output like this:
000000 00 00 00 05 00 00 aa 00 00 bb 00 00 cc 00 00 00  >................<
000010 00 00 ee ee dd ff 00 00 44 00 00 44 84 cd ab fe  >........D..D....<
000020

I did not find out how to remove the final address without having to use grep or sed.

The tool has a manual page and I recommend having a simple alias in your .bashrc like this:

alias dump='od -w16 -A x -t x1z -v'

United Internet schaltet XMPP/Jabber Server ab – ein Kommentar

Bei Heise gab es vor ein paar Tagen die Information, daß 1&1 und alle über die Firma United Internet verwandten Firmen, z.B. web.de und GMX, zum 1.Dezember 2014 ihre Jabberserver abschalten werden.

Mehr dazu bei heise:
http://www.heise.de/newsticker/meldung/MultiMessenger-United-Internet-schaltet-XMPP-Jabber-Server-ab-2455588.html

Das XMPP Protokoll hat durchaus Vorteile gegenüber Skype oder ICQ, ich selber nutze Jabber und damit XMPP seit gut 10 Jahren. Bislang konnte man so jeden GMX oder web.de Nutzer zum jabbern bringen, da es einfach funktioniert, die Emailadresse war gleich der Jabber ID.

Und nun fällt das weg, nachdem Google das auch schon getan hat. Für mich persönlich heisst das, mein Jabberroster ist wieder auf 4-5 aktive Nutzer geschrumpft. Schade eigentlich!

Aber am Ende denke ich darüber nach und faktisch ersetzen Facebook  und andere Soziale Netzwerke immer mehr die klassischen Instant Messenger. Rein persönlich betrachtet läuft 80% des Chats bei mir mittlerweile über Facebook, nicht unbedingt weil es toll ist, sondern es hat einfach jeder und funktioniert ohne Probleme. ICQ vorallem ist bei mir zwar aktiv, aber zum Chatten nutze ich es einfach nicht mehr. Über die Zeit hat sich die Dienstelandschaft verändert und ich sehe darin jetzt auch kein Problem.

Aus rein finanziellen Erwägungen trifft United Internet eine logische Konsequenz, wenn sie einen wenig genutzten Dienst jetzt abschalten.
Das Protokoll XMPP bleibt weiterhin bestehen, Facebook selbst verwendet es auch, leider nicht Serverübergreifend, aber besser, als etwas proprietäres.

Persönliche Konsequenz: je nach Aluhuttragebedürfnis, bevorzuge ich IM über Facebook oder Skype. Wer mich nur über ICQ in der Liste hat und behalten will, darf gerne wechseln. Reines Jabber werde ich wohl nicht mehr so religös vertreten, wie vor 8-9 Jahren noch.

Auf Wiedersehen, klassisches Instant Messaging, es waren schöne 16 Jahre mit Dir, aber Facebook und Co haben gewonnen!

Emblemauswahl für XFCE erweitern

erweiterte_Embleme

Da man unter XFCE keine individuellen Ordnericons vergeben kann, muss man auf die sogenannten Embleme ausweichen, eine Art Miniicon, welches zusätzlich zum vorhandenen Icon angezeigt wird.

Leider gibt es keinen einfachen Weg, selber Embleme über das GUI hinzuzufügen, aber mit folgendem Weg ist es von Hand möglich:

  1. Neue Embleme im Ordner des Iconthemas ablegen (ich empfehle .svg Dateien unter symbolic abzulegen):
    /usr/share/icons/elementary-xfce/emblems/symbolic
  2. Den Cache für das Thema per Kommandozeile auffrischen:
    sudo gtk-update-icon-cache /usr/share/icons/elementary-xfce
  3. In der Oberfläche das Iconset erst zu einem anderen Set wechseln, dann wieder zurück zum gewünschten.
  4. Danach stehen  die neuen Embleme in der Auswahl zur Verfügung und können normal verwendet, d.h. zugewiesen,  werden.

Distupgrade auf Xubuntu 14.04

Heute habe ich den Feiertagmorgen genutzt und nach langer Zeit mein veraltetes Ubuntu 10.04 mit GNOME2 durch ein aktuelles Xubuntu 14.04 ersetzt. Unity oder Gnome 3 wollte ich bewusst nicht, LXDE hat Janina in Betrieb, ist aber für meine Poweruserzwecke weniger geeignet. Also wollte ich es daraufankommen lassen und wählte Xubuntu mit Xfce.

Ich habe schon vor knapp 13 Jahren Xfce 1 ausprobiert, das war damals schlank genug und lief sogar noch halbwegs auf meinem alten P166 mit 16MB RAM. Seit damals habe ich Xfce immer beobachtet und heute ist es durchaus an einem benutzbaren Punkt angekommen. Es bootet zügig, der Dateimanager ist schlank, kann aber dank gvfs auch alle wichtigen Netzwerkprotokolle, und vorallem: der Desktop kann von Icons befreit werden.

Xubuntu 14.04 (Startmenü aufgezoomt)

Seit längerer Zeit nervt mich ein mit Icons zugemüllter Desktop nur noch, das klassische Startmenü war mir immer etwas zu fitzelig. Ich wollte eine schöne Auswahl im Vollbild haben, mit fester Sortierung. Ca 3 Jahre habe ich den netbooklauncher verwendet und war damit sehr zufrieden. Bei Xfce lernte ich heute morgen, daß man das Startmenü schön groß aufziehen kann, es hat sogar eine Suchfunktion. Im Screenshot habe ich es mal abgelichtet, wenn man alle Fenster schließt, dann ist mein Desktop leer, man kann Xfce komplett verbieten, Icons auf dem Desktop darzustellen. Laufwerke browse ich eh im Dateimanager (jaja, Ich bin Atarianer, aber heutzutage beschränkt es sich nicht mehr auf 2 Diskettenlaufwerke und eine Ramdisk, ein Icon für jede Partition wird irgendwann tierisch unübersichtlich.).

Ein Wermutstropfen bleibt allerdings, Xfce unterstützt keine Iconvergabe für Ordner. Dieses Feature fand ich schon bei KDE3 und Gnome2 äußerst praktisch, da man sich so schneller zurechtfindet. Ich werde in Zukunft wohl das Emblemfeature stärker nutzen, vorallem mir selber noch ein paar Embleme im SVG Format basteln.

Was ich aktuell noch nicht draufhabe, sind diverse Emulatoren und Tools, die mir so fehlen, aber das kann ich mir nach und nach Bedarf installieren. Die Grundausstattung mit Datenbackup, Chromebrowser, Thunderbird, Skype, Pidgin und TrueCrypt habe ich installiert, und alles rennt.

Alles in allem: dieses Upgrade war überfällig und ich bin für meinen Teil frph, diesen Schritt getan zu haben. Aber für Linux hat es auch etwas gutes, ich habe jetzt knapp 4 Jahre eine stabile Langzeitversion von Ubuntu verwendet, ohne echte Reinstallation. Wieviele Versionen von Windows hatten in der Vergangenheit eine solche Stabilität? Erst XP und Windows 7 kommen dort hin. Seit 1998 hat sich viel getan!