Archive for the ‘Linux’ Category.

Steambox im Eigenbau – Teil 2

Im ersten Teil habe ich über mein neues Steamboxprojekt berichtet.
Die Festplattenlöschung war problemlos nach ca 4,5h fertig, bei einer 320GB Platte. In dem Zuge wurden auch keine Fehler wie defekte Sektoren gefunden. Auch memtest86 lief gut durch, die Kiste sollte prinzipiell also immer noch gut laufen. Hier musste ich allerdings die ältere Version 4 benutzen, die noch ein klassisches BIOS unterstützt. Der Acer hat noch kein UEFI.

Als nächsten Schritt habe ich dann mit der Installation von Windows 10 begonnen. Ich hatte zunächst eine gute alte DVD mit dem Medienerstellertool von Microsoft erzeugt.

Der Acer PC startete diese DVD auch, aber dann blieb der Bootvorgang mit Windowslogo und drehendem Rädchen für über 10min hängen. Schließlich wurde mir eine obskure Fehlermeldung gezeigt, wonach Geräte nicht ansprechbar waren.

Ich probierte es dann noch 2 oder 3mal aus, hatte aber keinen Erfolg. Als Plan B habe ich dann eine SD Karte als Installationsmedium erstellt, falls das DVD Laufwerk eine Macke hatte. Auch der eingebaute SD Kartenleser war mir suspekt, da war schon vor Jahren etwas kaputtgegangen.

Mit einem externen Kartenleser habe ich dann von USB gebootet und damit lief die Installation schließlich ohne Probleme los.

Auf die Frage nach einem Lizenzschlüssel hin habe ich meinen entsprechenden alten Windows 7 Home Schlüssel aus den Unterlagen vom Acer PC angegeben. Und tatsächlich, die Installation hat ihn akzeptiert und problemlos weiter gemacht.

Hätte dies nicht funktioniert, dann hätte ich vermutlich vorerst das Projekt ohne Aktivierung von Windows 10 fortgesetzt. Dann hätte ich später immer noch einen Lizenzschlüssel kaufen können.

Nach ca 45min hatte ich dann ein Windows 10 installiert, bei dem ich erstmal viele invasive Fragen mit nein beantwortet hatte. Passend zu meiner Windows 7 Lizenz bekam ich so also ein Windows 10 Home Edition installiert.

Zunächst hatte ich Angst, ob dies vielleicht nur einen einzigen User erlauben würde, aber man kann definitiv weitere Accounts hinzufügen.

Windows Hello habe ich gleich in der Systemsteuerung abgeklemmt, ich logge mich lieber mit einem ordentlichen Passwort ein, und nicht mit einer Pin.

Für die Benutzung als Steambox brauche ich in Zukunft natürlich Controlerunterstützung. Der Empfänger für meinen wireless Xbox 360 Controller wurde gleich erkannt und der Treiber kommentarlos installiert.

Danach habe ich erstmal 2-3 Stunden investiert, um eine grundlegende Auswahl an Programmen zu installieren. Auch auf einer Steambox will ich die gängigsten Dateiformate zumindest ansehen können.

Ich installierte folgende Programme:

  • 7-Zip (Ein- und Auspacken von Dateiarchiven ist ein Muss)
  • Daemon Tools Lite (bei dem ggfs defekten DVD Laufwerk will ich notfalls CD/DVD Images verwenden können, Stand März 2020 gibt immer noch eine freie Version ohne Zahlungszwang)
  • Notepad++ (denn ohne einen ordentlichen Texteditor geht nichts)
  • LibreOffice (Officedokumente will man zumindest Lesen und notfalls auch schnell schreiben können)
  • Acrobat Reader (PDFs tauchen doch regelmäßig mal wieder auf)
  • CDBurnerXP (falls man doch mal ISOs erstellen oder zumindest wegbrennen will

Danach habe ich dann noch einen weiteren Benutzeraccount angelegt, unter dem später Steam direkt gestartet werden soll. Mehr dazu in einem Folgeartikel

Ein paar Dinge liefen nicht auf Anhieb. Für meine PCIe-Karte mit COM Port fehlt mir noch ein Treiber für Windows 10. Diese Schnittstelle ist aber nicht lebenswichtig für eine Steambox.

Das lokale Netzwerk musste ich zum Filesharing über SMB erstmal aktivieren, aber da ist mir eine gezielte bewusste Aktivierung lieber wie komische Magie.

Einloggen über Remotedesktop ist bei der Home Edition nicht möglich. Ich probierte Teamviewer aus, das war aber irgendwie ruckelig und laggte rum, sodas ich dann noch lieber live vor dem Gerät sitzen wollte.

Als Virenschutz habe ich erstmal Windows Defender belassen. Ob ich da noch mehr installiere, weiß ich jetzt noch nicht.

Insgesamt bin ich überrascht, der alte Athlon Dualcore mit 3GB RAM läuft unter Windows 10 gefühlt zügiger als unter Windows 7. Auch bootet Windows 10 erstaunlich gut. Hat Microsoft nach 20 Jahren endlich mal dazugelernt?

Und Steam OS? Ich glaube, ich hätte für die Installation weniger wie die Hälfte der Zeit gebraucht, es würde auch funktionieren und ich hätte sofort Steam im Zugriff gehabt. Allerdings wäre dort dann die Spieleauswahl stark reduziert, vorallem ein paar Capcom und Konamipacks laufen derzeit nur unter Windows 10, aber nicht unter Windows 8. Und die möchte ich mal anzocken, bevor ich auch der Alienware ein Update auf Windows 10 installiere.

ASM Software Unittest Framework

(c) 2016 by Matthias Arndt marndt@asmsoftware.de

The MIT License applies to this project. Please refer to the file COPYING for details.

The software is available on GitHub at https://github.com/simonsunnyboy/UnittestFramework

Abstract

This is a small framework to implement unittests for software written in C. There are existing projects that offer much more functionality, this one focuses on simple usability and textual output of statistics.

Main reason to implement this framework was that cunit was too complicated in usage and no other small free frameworks could be found.

System requirements

  • Cmake to build the example project
  • a C99 compliant C compiler but a C90 one will do if stdint.h and stdbool.h are supplied
  • any operating system of your choice

Using the test framework

A test should be a subfunction or the main function of an appropriate test executable.

Use the macros defined in unittest.h and link your project with unittest.c

Wrap the Test with UT_BEGIN() and UT_END() macros for proper structuring. Most commands should describe themselves.

It is allowed to start another test for entirely different content with the UT_BEGIN() macro if the last test finished with the UT_END() macro.

Fehlende Session für xrdp

Wenn man xrdp einrichtet, landet man manchmal in der falschen oder auch in keiner wohldefinierten Session.

Effektiv kann man sich nicht einloggen oder eine langsame Umgebung wird verwendet.

Hier hilft es dann, eine passende Sitzung, leichtgewichtig und funktional ist immer LXDE, zu definieren.

In der Datei ~/.xsession muss der Aufruf für die entsprechende Umgebung stehen.

Für XFCE etwa
startxfce

Für LXDE z.B. folgende von Askubuntu geklaute Zeile:
lxsession -s Lubuntu -e LXDE

Tastaturlayout unter Ubuntu für die Konsole anpassen

Irgendwie greift da Tastaturlayout nicht immer, Rekonfiguration unter Ubuntu mit

sudo dpkg-reconfigure keyboard-configuration

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.