Previous Up Next

5  Tips zu Anwendungen

5.1  Verwendung der Shell

5.1.1  Die Shell macht mich Wahnsinnig

In der Tat kann die Shell einen an den Rande des Wahnsinns treiben, wenn etwas auf der Konsole funktioniert aber als Script-Datei nicht funktioniert. Bei Linux hat sich als Standard-Shell ”bash” durchgesetzt. Diese hat einige nützliche Erweiterungen. Das kann aber mit anderen Shell-Varianten zu Problemen führen. Aus dem Grunde sollte bei der Wahl der Syntax auf möglichste Kompatibilität geachtet werden.

Ein kleines Beispiel:


BefehlEingabeAusgabe
read a ; echo $aIFS=$’\t\n’IFS= ’tn’
read a ; echo "$a"IFS=$’\t\n’IFS=$’tn’
read -r a ; echo "$a"IFS=$’\t\n’IFS=$’\t\n’


Und noch ein Beispiel mit einer längeren ’*.tex’ Datei, bei der schön zu sehen ist, dass die Sortierung an der richtigen Stelle sein sollte:


BefehlAusgabe
for i in $(cat "$1") ; do echo "$i" ; done | wc9729 8150 55132
for i in $(cat "$1" | sort ) ; do echo "$i" ; done | wc9736 8150 55139
for i in $(cat "$1" | sort | sort -u) ; do echo "$i" ; done | wc9456 7925 53348
for i in $(cat "$1" | sort | sort -u) ; do echo "$i" ; done | sort | sort -u | wc2288 2286 19763
for i in $(cat "$1") ; do echo "$i" ; done | sort | sort -u | wc2288 2286 19763


Das Aufrufen eines Shell-Skripts kann auf verschiedene Weise erfolgen:

./meinscript.sh

Das funktioniert nur, wenn das Dateiattribut auf ausführbar gesetzt ist. Dies kann mit “ls -l” überprüft werden.

ls -l meinscript.sh -rw-r--r-- 1 dieterd dieterd 784 Jan 9 16:05 meinscript.sh

In dem Falle funktioniert das nicht und mit “chmod” kann das geändert werden.

chmod 777 meinscript.sh \# Ggf. sind hierbei 'root'-Rechte notwendig.
ls -l meinscript.sh -rwxrwxrwx 1 dieterd dieterd 784 Jan 9 16:05 meinscript.sh

Mit dieser radikalen Methode ist die Datei nun für jeden lesbar, schreibbar und ausführbar. Zu erkennen ist dies am x an der entsprechenden Stelle.

Bei mit “mount” eingehängten Medien kann es auch sein, dass diese nicht ausführbar gemacht werden können. Der Grund kann sein die optionale Maskierung ein setzen der Attribute für die Ausführbarkeit verhindert.

mount -t ntfs-3g -o rw,users,dmask=0000,fmask=0000,umask=0000 /dev/sda5 /media/disk1part5

Auch eine Option, wie “nosuid” kann daran Schuld sein, dass es so nicht funktioniert. Auch hier gibt es Abhilfe. Einfach das Skript aufrufen mit vorangestelltem “sh” oder “bash”. Es gibt hier auch noch weitere Möglichkeiten, als diese zwei verschiedenen Shells.

sh meinscript.sh bash meinscript.sh

In der ersten Zeile eines Skriptes sollte stehen, für welchen Typ von Shell das Skript geschrieben wurde. Dies erfolgt durch folgende erste Zeile im Skript:

\# !/bin/sh oder \# !/bin/bash

Die Shell sollte die erste Zeile auswerten und die richtige Shell auswählen. Bei dem Aufruf mit “./” sollte diese Zeile eigentlich immer ausgewertet werden. Es gibt aber auch Distributionen die verwenden anscheinend trotzdem immer die bash oder wählen die bash nachdem sie in dem Skript bestimmte Schlüsselsequenzen oder Befehle gefunden haben. Das kann Auswirkungen auf ganz einfache Befehle, wie ’let a=$b+1’ und ’echo -e’ haben. Statt ’let a=$b’ sollte aus Kompatibilitätsgründen besser ’a=$(($b+1))’ verwendet werden.

Aus solchen Gründen funktionierte bei mir ein Shellskript auf der Konsole einwandfrei, aber nur nicht als aufgerufene Skriptdatei auf einem anderen Rechner mit einer anderen Linuxversion. Solche Probleme können einen Skriptprogrammierer an den Rand der Verzweiflung bringen. Daher rührt auch die Überschrift dieses Abschnittes.

Nach einigen hin- und herkopieren bei der Erstellung eines Scriptes funktionierte dieses nicht mehr. Die gespeicherten Strings in den Variablen waren fehlerhaft.

#!/bin/sh # file to create codecs example files # # variables presetting wrdate=$(date +%Y%m%d_%H%M%S) echo $wrdate wrfile=$(echo "SupportedCodecsVids_$wrdate"".htm") echo $wrfile echo "This seems ok, but result is buggy" wrfile="SupportedCodecsVids_$(date +%Y%m%d_%HXX).htm" sleep 1 echo "$wrfile" tryf='806_0736.MOV' # # create htm output and testfiles # echo "<html>" > "$wrfile" read aa

Ein Aufruf des Scriptes mit “bash -x scriptname.sh” brachte die Klärung, dass am Zeilende noch ein Trennzeichen \r auftauchte. Im folgenden Listing ist das sichtbar.

#******************************************************* bash -x Supported_Video_Codecs.sh ++ date +%Y%m%d_%H%M%S #******************************************************* + wrdate=$'20100603_083027\r' + echo $'20100603_083027\r\r' 20100603_083027 ++ echo $'SupportedCodecsVids_20100603_083027\r.htm' + wrfile=$'SupportedCodecsVids_20100603_083027\r.htm\r' + echo $'SupportedCodecsVids_20100603_083027\r.htm\r\r' .htmortedCodecsVids_20100603_083027 ' echo 'This seems ok, but result is buggy This seems ok, but result is buggy ++ date +%Y%m%d_%HXX + wrfile=SupportedCodecsVids_20100603_08XX.htm + $'\r' : command not foundecs.sh: line 10: + sleep $'1\r' sleep: invalid time interval `1\r' Try `sleep --help' for more information. + echo $'SupportedCodecsVids_20100603_083027\r.htm\r' $'\r' htmortedCodecsVids_20100603_083027 + tryf=$'806_0736.MOV\r' + echo '<html>' + read aa $'\r'

Die Ursache ist, dass in der DOS-Welt der Zeilenumbruch mittels “cariage return” und “line feed” (Hex: 0D 0A) erfolgt, aber in der Unix-Welt nur mit einem “line feed” (Hex: 0A).

Behoben werden kann das mittels des Werkzeugs “dos2unix”. Bei mir waren dabei noch mehrere dieser Sequenzen hintereinander, so dass ich den Vorgang dreifach ausführen musste.

cat scriptname.sh | dos2unix > scriptname_lf.sh # or using in that way (input file overwritten) dos2unix scriptname_lf.sh

5.1.2  Nützliche Shell Skripte

Tips und praktische Shellskripte veröffentlicht helfen nicht nur anderen, ab und zu braucht man sie auch selber und ist froh wenn diese im Internet zu finden sind.

Suchen von mehrfachen Dateien per Minishellskript:

find -type f -printf %s"\t"%TY%Tm%Td_ %TH%TM"\t" -exec md5sum ’{}’ \; | sort -k 3 | uniq -D -f 2 -w 32

Und wenn diese in einer Datei *.ls sind mit mplayer abspielen:

IFS=$’\t\n’ ; read b ; a=0; for i in $(cat *.ls | sort -k 4 | awk ’{print $4}’ | grep ".mpg|.mpeg|.avi|.wmv|.mov|.flv" ); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; fi ; done

Herunterladen von Bildern etc. mit wget:

for j in $(seq 1 8) ; do for i in $(seq 1 4) ; do for k in pics0{1, 2, 3 }; do wget -c -r -l 1 --limit-rate=400k --read-timeout=15 -w 2 --random-wait --restrict-file-names=windows -A mpg,wmv,avi,dvx,div,mpeg,jpg,jpeg,JPG --directory-prefix="/media/USBDISK/my_ pics_ or_ movies/" http://homepage.de/pics/$j/$j/$k.jpg ; done ; done ; done

Abspielen mit mplayer und suchen mit find (hier Dateien >600kB, überspringe .jpg):

IFS=$’\t\n’ ; echo "how many days ago?" ;read bb ; echo "how many files to skip?" ; read b ; a=0; for i in $(find /media/USBDISK/myvideos -type f -mtime -$bb -size +600k | sort | grep -v "jpg$"); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; read -t 1 -n 1 dd; fi ; done

Mit mehreren "q" einen break erzwingen um z.B. zu beenden auf langsamen Rechnern zu ermöglichen:

textttIFS=$’\t\n’ ; echo "how many days ago?" ;read bb ; echo "how many files to skip?" ; read b ; a=0; for i in $(find /media/{disk,folder}*/{name1,name2}* -type f -mtime -$bb -size +600k | sort ); do let a=$a+1; echo $a " " $i ; if [ "$a" -gt "$b" ] ; then mplayer -fs $i ; echo $a " " $i ; read -t 1 -n 1 dd; if [ "$dd" = "q" ] ; then read dd ; fi ; fi ; done

Abspielen Internetradio mit mplayer und Equalizer auf bestimmtes alsa device (z.B. USB-Soundkarte):

mplayer -af equalizer=5:3:1:0:0:0:0:-1:-2:-3 -af volume=0 -ao alsa:device=hw=0 -playlist http://radiolink/internet-64/*.asx

Atomzeit holen:

curl "http://www.uni-leipzig.de/cgi-bin/date/index.htm" | grep -v "<" | awk ’{print $4}’

Eine andere Methode und Adresse um die Atomzeit zu holen:

netcat time.nist.gov 13

Und gleichzeitig noch die Zeit übernehmen:

sudo date -s $(curl "http://www.uni-leipzig.de/cgi-bin/date/index.htm" | grep -v "<" | awk ’{print $4}’)

5.2  Latex

5.2.1  Latex Standarddokument und Perl-Codeumwandlung

Sehr praktisch für die Bearbeitung ist ’texmaker’. Allerdings ist auf einem Netbook mit 1024x600 der sichtbare Bereich doch etwas klein. Gut ist die Hilfe für das Setzen von einigen Befehlen. Bei \begin wird auch gleich \end auch gesetzt. Damit die deutschen Umlaute im Editorfile richtig umgesetzt werden, ist in den Eigenschaften ISO-8859-1 auszuwählen. In der unteren Leiste wird dies auch angezeigt. Damit für die Vorschau auch die aktuellen Änderungen übernommen werden muß vor dem Compilerlauf speichern gedrückt werden. Das Inhaltsverzeichnis benötigt zwei Compilerläufe, bis es tatsächlich aktualisiert ist.

Noch mehr an Funktionen bietet ’kile’. Der sichtbare Bereich auf einem Netbook ist nicht kleiner als bei ’texmaker’. Was ’texmaker’ besser macht ist die Anzeige von Fehlern beim Latex-Durchlauf, die stärkeren Fehler hervorgehoben sortiert werden. Bei ’kile’ sind die Einstellungen der Eigenschaften bei 1024x600 nicht möglich, da der untere Bereich nicht erreicht wird. Hier muss mittels ”xrandr” der Bildschirm virtuell vergrößert werden.

% Start Document style header \documentclass[a4paper]{article} \special{papersize=210mm,297mm} %\usepackage{fullpage} funktioniert nicht %\usepackage{a4wide} % ergibt kleiner Ränder und es wird % nicht so viel Papier verschwendet \usepackage{a4wide} %Abstand zwischen zwei Absätzen, \setlength{\parskip}{1.0ex plus0.5ex minus0.5ex} %Einzug der ersten Zeile eines Absatzes \setlength{\parindent}{0mm} % latin1/inputenc und german läßt die Eingabe von ä statt "a für ä zu. \usepackage[latin1]{inputenc} % \usepackage{ngerman} % neue deutsche Rechtschreibung \usepackage{german} \usepackage{makeidx} % Im Text wird Eintrag mit \index{Stichwort} erstellt. % Auf der Konsole muss makeindex *.idx ausgeführt werden. % Mit \printindex wird dieses am Ende eingebunden. \makeindex \begin{document} \title{Linux Know How} \author{Dieter Drewanz} \maketitle \tableofcontents % Einleitung \section{Einleitung} Minmales Dateibeispiel. \end{document}

Wenn Anführungszeichen im Text gesetzt werden sollen, so sind bei Verwendung des package german die Syntax zu ergänzen. Statt "weiter ist "{}weiter zu verwenden.

Ersetzungsskript um Befehle in den Text zu übernehmen. Es versagt auf der Konsole beim Backslash (\), wenn die Option ’read -r’ nicht möglich wäre. Somit wäre hier manuell \textbackslash einzutragen. Bei dem Script sind nicht alle Zeichenersetzungen erhalten. Es entstand bei der Erstellung des Dokuments für die Unterstützung der Umwandlung von Code auf der Konsolenshell.

IFS=$’\n’ ; read -r a ; for i in $(seq 1 $(echo $a |wc -c)) ; do b=$(echo $a |cut -c $i) ; c=‘case "$b" in ’"’) echo ’"{}’ ;; ’{’) echo ’\{’ ;; ’}’) echo ’\}’ ;; ’$’) echo ’\”$’ ;; ’\’) echo ’\textbackslash ’ ;; ’|’) echo ’\textbar ’ ;; ’_ ’) echo ’\_ ’ ;; ’ ’) echo \ {} ;; ’%’) echo ’\%’ ;; *) echo "$b" ;; esac ‘ ; echo -n "$c" ; done ; echo

Das gleiche Script für die Erstellung von \texttt. Es versagt auf der Konsole beim Backslash (\) und somit an der Stelle wo bei IFS \n \t stehen sollte, wenn die Option ’read -r’ nicht möglich wäre. Somit wäre hier manuell \char ’ \\’ einzutragen, welches nicht funktioniert aber mit ’$\backslash$’ klappt es.

IFS=$’\n’ ; read -r a ; echo -n ’\texttt{’; for i in $(seq 1 $(echo $a | wc -c)) ; do b=$(echo $a | cut -c $i) ; c=‘case "$b" in ’"’) echo ’"{}’ ;; ’{’) echo ’\{’ ;; ’}’) echo ’\}’ ;; ’$’) echo ’\’’$’ ;; ’\’) echo ’$’’\backslash’’$’ ;; ’|’) echo ’|’ ;; ’_ ’) echo ’\_ ’ ;; ’ ’) echo \ {} ;; ’%’) echo ’\%’ ;; *) echo "$b" ;; esac ‘ ; echo -n "$c" ; done ; echo ’}’

5.2.2  HTML in LATEX umwandeln

Für die Umwandlung von HTML in Latex gibt es verschiedene Möglichkeiten. Die erste Methode ist die Umwandlung von HTML mittels Anwendungen und deren Erweiterungen.

Die zweite Methode sind Anwendungen auf JAVA oder PERL Basis.

http://html2latex.sourceforge.net/doc/html2latex-man.html REQUIRES: If your html2latex is not working correctly, this may be because you do not have many of the needed packages. html2latex requires HTML::TreeBuilder perhaps LWP::Simple and URI. If you do not have either of these, try typing perl -MCPAN -e shell at the command line. This will bring up a shell for CPAN (The Comprehensive Perl Archive Network). Then, as root try typing install HTML::TreeBuilder. Should work like magic.

perl -MCPAN -e shell   # Mit diesem Befehl wird ’perl’ mit allem notwendigen konfiguriert. Hierzu ist eine Internetverbindung notwendig. Bei einigen Installationen von Linux sollte diese auch ablaufen, aber wenn kein Internet am Anfang vorhanden ist, wird dieses nicht automatisch nachgeholt. Das kann Ursache für ein sehr seltenes abweichendes Verhalten auf der Shell bei komplizierten Scripten sein.

http://htmltolatex.sourceforge.net/# download Dieses Programm arbeitet auf der Basis von JAVA. Es wird mindestens JAVA 1.5 benötigt. Auf der Konsole kann mit jave -version dies geprüft werden. Meistens ist bei Linux eine OpenJDK Java Version installiert. Es gibt Anwendungen, die benötigen jedoch JAVA von SUN. Wenn dieses installiert wird, gibt es bei Ubuntu noch eine Anleitung (Skript) um jeweils umzustellen. Auf meinem alten defekten Rechner hatte ich das durchgeführt und wird hier ergänzt, wenn ich es wieder machen sollte.

Eine Seite die viele Informationen über verschiedene Konvertierungen enthält. http://www.tug.org/utilities/texconv/pctotex.html

5.2.3  Latex to doc/rtf

apt-get install latex2rtf # Bei mir scheitert das Werkzeug bereits bei diesem Dokument, das nicht mal Bilder enthält.

5.2.4  Latex to HTML

Verschiedene Konverter für LATEX nach HTML

Das Dokument wurde auf einer Konsole mit Latex begonnen und nun soll es auch in HTML umgewandelt werden. Im Internet gibt es dazu verschiedene Werkzeuge mit verschiedenen Entwicklungszuständen und Funktionen. Mehrere Konverter wurden ausprobiert mit unterschiedlichen Ergebnissen.

latex2html
# installing package apt-get install latex2html # trying to convert latex2html my_know_how_100119.tex latex2html -iso GE my_know_how_100119.tex

Bei mir scheitert das Werkzeug bereits bei diesem Dokument, das nicht mal Bilder enthält. Abgebrochen wird beim Latex-Beispiel eines Mini-Dokuments in einer “lstlisting”-Umgebung.

Latex Output über OpenOffice/PDF/DVI nach HTML

Da der direkte Weg von Latex nicht funktionierte, könnte es über die “dvi” oder “pdf” Ausgabe vielleicht klappen. Der erste Versuch war aus diesen per “copy and paste” den Text nach OpenOffice zu holen.

Das Ergebnis war ein Text aus vielen Müllzeichen an den Stellen der deutschen Umlaut und einige Liguatoren. Ein Test mit einer aus OpenOffice heraus erzeugten pdf-Datei war im Vergleich hierzu ohne diese Fehler. Bei der Kopie gehen die Textformatierungen (Größe, Stärke, usw.) verloren.

Leider ist es immer das gleiche Müllzeichen, so dass keine externe Konvertierung mittels Skripte möglich ist. Die Anwendungen pdftotext und pdftohtml haben hier auch das Probleme. Verschiedene Optionen mit latin1, utf8 usw. haben nicht geholfen.

Eine Untersuchung des kryptischen Ergebnisses in pdf mit einem Text/Hex-Viewer hilft zwar nicht weiter, aber wenn das Ergebnis mit einem pdftohtml Konverter (probiert mit auch mit pdftohtml -c -enc Latin1 und UTF-8) verglichen wird, ergibt sich:

OpenOffice->pdf->html: bis&nbsp;mögliche&nbsp;Probleme Latex->dvi->pdf->html: bis&nbsp;</span></nobr></DIV> <DIV style="position:absolute;top:498;left:377"><nobr><span class="ft0">ogliche&nbsp;Probleme

Somit läuft hier etwas im Detail ganz anders ab. Der Unterschied liegt also im dvi-file und dem Weg von dvi nach pdf. Somit wäre mit sed (N wird benötigt um die nächste Zeile mit einzubeziehen) auf der html-Ausgabe eine etwas arg umständliche Korrektur vielleicht möglich.

Die Browser können dies leider alle nicht richtig wiedergeben, wie auch OpenOffice es auch nicht richtig einlesen kann.

Aus dem Freenode chatroom #latex wurde empfohlen:

\usepackage[latin1]{inputenc} and \usepackage[T1]{fontenc} Thanks it is working nearly. Some äöü now there. But sometimes there are now "bewuÿt #etwas" inspite of "bewußt etwas", "Ober#äche" inspite of "Oberfläche".

Soweit leider ein mäßger Teilerfolg, wenn aus einer pdf kopiert wurde.

\usepackage[utf8x]{inputenc}

Half auch nicht weiter. Wenn ich das eintrage, dann gibt es viele Fehlermeldungen. Mache ich die Änderungen Rückgängig geht “latex texdatei.tex” hartnäckig nicht mehr. Erst wenn Dateien, wie “texdatei.toc” gelöscht worden sind, geht es erst wieder mit “latex texdatei.tex” zu übersetzen.

Latex verwendet bei der Zeichendarstellung Erweiterungen und auch Workarounds für Sonderzeichen, Liguaturen und Landeszeichensätze. Es gbt demnach Varianten in pdf, wobei jede Umsetzung nur die eine oder andere Variante jeweil realisiert hat. Im pdf-Ausdruck werden die hier verwendeteten unterschiedlichen Varianten in “okular” und “xpdf” richtig angezeigt. Also läuft das ganze über 4 Schnittstellen der Umsetzung.

latex->dvi->pdf->klipper->openoffice

Das Probem ist eingekreist. Es betrifft nur nicht-englische Sprachen. Daher gibt es einen Blog, das pdf (z.B. mit convert) in ein Bild umzuwandeln, das mit einer ocr-Anwendung (für Schrifterkennung von einem Scan, im pdf erzeugten Bild natürlich traumhafte 100% Bildqualität vorfindet) in Text umzuwandeln. In einem Kapitel zur Schrifterkennung zeigte sich, dass diese auch oft nicht reibungslos funktionierte.

tex4ht

Somit wurde ein weiterer Konverter installiert um die Konvertierung zu testen.

# installing package apt-get install tex4ht
tex4ht my_know_how_100120.tex # only text unformatted # german characters not working htlatex my_know_how_100120.tex # this works good

Die Konvertierung mit htlatex aus dem Paket tex4ht erzeugt ein brauchbares HTML Gesamtdokument. Firefox/Iceweasel zeigt die Seite richtig an, aber Konqueror ist unvollständig bei der Wiedergabe der Konsolenlistings in der Umgebung “lstlisting”. Im Firefox ist erkennbar, dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis ist verlinkt auf die Positionen im Text.

hyperlatex

Das ist ein weiterer Konverter, der installiert wurde um die Konvertierung zu testen.

# installing package apt-get install hyperlatex
hyperlatex my_know_how_100120.tex # stops after some lines. no output.

Diese Anwendung funktionierte nicht mit dem Testdokument. In dem Textdokument wurden bereits zu viel verwendet, das hyperlatex nicht verarbeiten kann. Es wird bereits im Bereich des ersten Absatztes abgebrochen. Für die Verwendung von hyperlatex ist es notwendig das Paket im Dokumentenkopf aufzunehmen und nur unterstütze Anweisungs-/Befehlssyntax im Dokument zu verwenden. Wenn nicht unterstütze Befehle verwendet werden, dann gibt es die Möglichkeit abhängige Bedingungen im Dokument zu setzen. Für gewöhnliche Nutzer ist dies nicht unbedingt zu empfehlen.

hevea

Das ist ein weiterer Konverter, der installiert wurde um die Konvertierung zu testen.

# installing package apt-get install hevea
hevea my_know_how_100120.tex # this works good hacha my_know_how_100120.html # divides into more html pages # a file index.html is also created # and contains table of contents as links # index links also working

Die Konvertierung mit “hevea” erzeugt ein brauchbares HTML Gesamtdokument. Firefox/Iceweasel zeigt die Seite richtig an. Im Firefox ist erkennbar dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis fehlt. Das Stichwortverzeichnis ist verlinkt auf die Positionen im Text.

Die Weiterverarbeitung mit “hevea” erzeugt ein brauchbares HTML Dokument, das auf mehrere Seiten aufgeteilt ist. Firefox/Iceweasel zeigt die Seite richtig an. Im Firefox ist erkennbar dass in der Umgebung die langen Zeilen der Konsolenlistings nicht umgebrochen werden. Das Inhaltsverzeichnis ist nun vorhanden und ist verlinkt auf die Positionen im Text. Es wird im Inhaltsverzeichnis noch ein Eintrag “Contents” angelegt, der ins leere führt. Das Inhaltsverzeichnis enthält nicht die Kapitelnummerierung. Das Stichwortverzeichnis ist verlinkt auf die Positionen im Text.

hevea -fix my_know_how_100120.tex

Mit der Option “-fix” wird ein Inhaltsverzeichnis unter dem Eintrag “Contents” angelegt, der nun nicht mehr ins leere führt. Das Inhaltsverzeichnis enthält auch die Kapitelnummerierung.

Ergebnis der Umwandlung in HTML

Zum Gebrauch für den nicht zu sehr spezialisierten Anwender kann htlatex (Paket tex4ht) und hevea mit hacha (Paket hevea) für die Konvertierung von Latex nach HTML empfohlen werden. Das Paket hevea wird von mir favourisiert, wegen der Möglichkeit das Dokument in mehrere verteilte HTML-Seiten aufzuteilen und der Verlinkung aus den Verzeichnissen.

5.2.5  In PDF mit Verlinkungen umwandeln

Die Umwandlung der Latex-Ausgabedateien in pdf funktioniert auf verschiedenen Wegen recht ordentlich. Bei pdf-Dokumenten gibt es ebenfalls eine Verlinkung zwischen den Verzeichnissen und den betreffenden Textstellen. Damit dies auch mit den aus Latex erzeugten Dokumenten funktioniert ist das Paket “hyperref” im Kopf einzubinden.

\usepackage[pdftex, %%% hyper-references for pdflatex bookmarks=true,% %%% generate bookmarks ... bookmarksnumbered=true,% %%% ... with numbers hypertexnames=false,% %%% needed for correct links to figures !!! breaklinks=true,% %%% breaks lines, but links are very small %linkbordercolor={0 0 1},% %%% blue frames around links %pdfborder={0 0 112.0} ]{hyperref}% %%% border-width of frames % will be multiplied with 0.009 by ps2pdf

Bei diesem Dokumentenversuch klappte allerdings bei dem Beispiel nicht die Farbgebungen, da die Farbe den ganzen Text verdeckte. Eine erzeugte PDF-Datei (nur mit Textinhalten) hatte ohne die Verlinkungen 450 kB und mit den Verlinkungen 740 kB.

5.3  Scannen von der Konsole

Zum Scannen unter Linux wird voraussichtlich wirklich Zeit benötigt, da die Daten meistens nur langsam übertragen werden. In einigen Foren wird daher öfters geraten einen Windows-Treiber aus einem anderen Land zu verwenden. Bei Linux gilt das gleiche und daher werden die Daten in der Regel mit einer Geschwindigkeit von bis zu maximal nur 1 MBit/s nur übertragen. Aus dem Grunde sollte vor einem Scan die Auflösung und ob farbig, graustufig oder nur schwarz-weis festgelegt werden, bevor mit dem Scannen begonnen wird.

Einige Drucker bieten auch einen Anschluss für eine SD-Karte. Wer öfters viel und schnell scannen will, sollte auch diese Möglichkeit in Betracht ziehen. Ein Abfotografieren mit einer Digitalkamera wäre eine weitere Möglichkeit.

Praktisch auf der Konsole ist, dass dem Scan auch gleich der Name für die Datei mitgegeben werden kann. Allerdings kann es auch leicht passieren, dass die vorherige Datei überschrieben wird, wenn nicht aufgepaßt wird.

#Scan einer Seite: scanimage --resolution 100 --format=tiff > B_01_100dpi.tiff #Scan einer Seite A4 mit Größenangabe scanimage -x 215 -y 300 --resolution 100 --format=tiff > B_02_100dpi.tiff
#Scan mehrerer Seite A4 mit Größenangabe vom Papiereinzug scanadf -x 215 -y 300 --resolution 100 # ergibt # image-0001 # image-0002 # script zum umbenennen for i in $(seq -w 1 16) ; do mv image-00$i B_$i"_100dpi" ; done

Bei scanadf mit höheren Auflösungen gibt es oft Probleme und es kommt zu einem Abbruch, da die Wartezeit überschritten wird. Das passiert vor allem, wenn der Scanner einen genügend großen Buffer hat, um mehrere Sekunden nach Leseende noch die restlichen Daten zu senden. Manchmal hilft hier aber auch ein Neustart des Scanners/Multifunktionsdruckers weiter.

#Scan mehrerer Seite A4 mit Größenangabe vom Papiereinzug scanadf -x 215 -y 300 --resolution 150 # ergibt Scanned document image-0001 scanadf: sane_start: Device busy Device busy Scanned 1 pages # somit wird abgebrochen

Wenn mehrer Geräte verfügbar sind, dann muss dieses als Option mit angegeben werden. Bei mir war die Option nicht notwendig, das Gerät anzugeben.

scanimage -L device `brother2:net1;dev0' is a Brother MFC-5440CN Brother_MFC-5440CN device `v4l:/dev/video0' is a Noname USB2.0 UVC 1.3M WebCam virtual device # So sollten die Modes ausgegeben werden: scanimage --help --mode color # Aber nur so ging es: scanimage --help --mode gray scanimage --help -d 'brother2:net1;dev0'

Die Auflösung ist entscheidend für die Qualität des Dokumentes. Soll ein Dokument nur zu Belegzwecken eingescannt werden und ist die Schrift nicht zu klein (nicht kleiner als 3 bis 4mm) dann reichen 100dpi Auflösung. Das Schriftbild ist allerdings nicht scharf, aber noch lesbar. Die Rohdatei hat ca. 3MB und als JPG (Qualität 50%) wird diese kleiner 100kB. Bei 150dpi Auflösung wird die Rohdate ca. 7MB groß und die JPG (Qualität 50%) hat ca. 100-200 kB. Die Lesbarkeit ist in dem Falle besser. Das Schriftbild ist zwar noch nicht scharf bei Schriften mit etwa 3-4mm aber schon deutlich besser. Die gebräuchliche Auflösung für gute Fax-Qualität beträgt 204dpi.

Ein Blatt A4 hat bei einer Größenangabe von 215x300mm (bewußt etwas größer gewählt, da die Vorlage immer mit etwas Spiel ungenau liegt) bei 100dpi ungefähr 816x1180 Bildpunkte und bei 150dpi ungefähr 1232x2099 Bildpunkte. Daraus läßt sich ersehen, dass das Abfotografieren mit einer Digitalkamera von mindestens 4-5 Megapixel durchaus konkurenzfähig sein kann.

#Scan mehrerer Seite A4 mit Größenangabe vom Papiereinzug # und Graustufen scanadf -x 215 -y 300 --resolution 150 --mode True Gray # ergibt kleinere Dateien # es geht deutlich schneller # dito mit scanimage scanimage -x 215 -y 300 --resolution 150 --mode True Gray > test01 # in dem Falle ist die Ausgabe vom Typ "pgm" # testen mit file test01 test01: Netpgm PGM "rawbits" image data # zum Vergleich farbig scanimage -x 215 -y 300 --resolution 150 > test02 file test02 test02: Netpbm PPM "rawbits" image data

Wer Scheine einscannt oder abfotografiert, sollte immer daran denken, dass dazwischen eine Transparentfolie mit gut sichbarer Schrift “unechtes Muster” oder “Kaufladen Spielzeug” liegt, die natürlich auch gut und auffällig auf der Ablichtung erkennbar sein muss.

Für die Bildumwandlung auf der Konsole sind vor allem die Anwendungen aus dem Paket “imagemagick” zu empfehlen. Eine praktische Routine zum Umbenennen von Scans mit der Anwendung “convert” aus dem Paket ist im folgenden aufgeführt.

for i in $(find -type f | grep -v jpg) ; do echo $i ; convert -quality 50 $i $i"_q50".jpg ; echo $i " done " ; done
for i in $(find | grep -v pdf | grep jpg) ; do echo $i ; convert $i $i.pdf ; echo $i " done " ; done #Ghostscript to combine PDF files: gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf #Combining all pdf in one folder to one pdf: for i in $(find -type f | sort | grep -v finished ) ; do echo -n -e $i "\t" ; done | xargs gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf
dpi mode pixel raw jpg50% gif png 100 C 816x1180 3MB 70-100kB 150 C 1232x2099 6.2MB 100-200kB 440kB 1,3MB 150 TG 1232x2099 2.1MB 50-100kB 180kB 160kB 300 BW 2480x3542 1MB 400-500kB 80-90kB 60-70kB C: farbig TG: "True Gray" BW: "Black & White" A4: 215x300 statt 210x297 300dpi:2480x3508 150dpi:1240x1754

Die Beispiele zeigen, welche Komprimierung der Dateien erreichbar sind. GIF ist bei Farbe und Graustufen wenig geeignet, da hier nur wenige Farbstufen (meistens zu wenige) erzeugt werden. Bei schwarz/weis sind GIF und PNG verlustfreie Komprimierungen. Die Komprimierung JPG ist hier am schlechtesten, da hier durch die Kachelberechung fiktive Grauwerte hinzukommen. Bei Verwendung geeigneter Optionen sind bei farbigen Bildern JPG und PNG ungefähr gleichwertig. PNG ist ein freieres Format und sollte daher bevorzugt werden.

Bei genauer Ansicht der Pixelwerte fällt auf, dass diese in der Länge in der Tabelle etwas größer sind als bei A4 angegeben. Die Ursache ist, dass hier mit dem Blatteinzug gescannt wurde und das amerikanische Format “letter” einbezogen wird. Bei der weiteren Verarbeitung hat dies allerdings auch nicht gestört.

5.4  Texterkennung

Installiert für die Texterkennung wurden einige verschiedene Pakete. Die Texterkennung von einer Testdatei (einer ps to png,pnm,tiff gewandelt) hatte viele Schwierigkeiten bei der Erkennung.

# ocr text recognition apt-get install ocrad # another ocr text recognition apt-get install ocropus # ocropus needs tesseract too apt-get install tesseract-ocr apt-get install tesseract-ocr-deu

Die Beispieldateien wurden nicht eingescannt, sondern aus einer in pdf konvertierten Seite (Seite 44) dieses Dokumentes erzeugt. Zur Erzeugung wurden folgende Befehle verwendet:

pdftoppm -f 44 -l 44 -r 150 my_know_how_100117.pdf > my_know_how_S44_150dpi.ppm pdftoppm -f 44 -l 44 -r 300 my_know_how_100117.pdf > my_know_how_S44_300dpi.ppm pdftoppm -f 44 -l 44 -r 600 my_know_how_100117.pdf > my_know_how_S44_600dpi.ppm pdftoppm -f 44 -l 44 -r 1200 my_know_how_100117.pdf > my_know_how_S44_1200dpi.ppm

Das Programm “tesseract” benötigt einige Vorkonfigurationen. Die man-Pages geben etwas Informationen. Es dauert, bis der Befehl “ocroscript” in den Verweisen gefunden wird. Somit ist das Programm für die ersten Versuche nicht so geeignet.

Die Anwendung “ocrad” ist für den Anfänger mehr bedienerfreundlich. Bei der Erkennung des Beispiels mit 150 dpi versagt die Erkennung kläglich. Bei genauer Durchsicht zeige sich, dass die Überschrift in größeren Buchstaben erkannt wurde.

ocrad my_know_how_S44_150dpi.ppm | less

Die nächste größere Auflösung von 300dpi brachte ein deutlich besseres Ergebnis und es wurden die meisten Buchstaben erkannt. Noch größere Auflösungen zeigten keine wesentlichen Verbesserungen. Schwierigkeiten gibt es vor allem bei der Erkennung vom “ß” und den Liguatoren (ff, fi, ft).

Bei tesseract gibt es die Anwendung ocroscript. Die Ausgabe erfolgt Standardmäßig als HTML.

ocroscript recognize my_know_how_S44_150dpi.ppm | less # or ocroscript recognize my_know_how_S44_150dpi.ppm > test01.html # and view file with browser

Bei der Erkennung des Beispiels mit 150 dpi versagt “ocroscript” bei der Erkennung meistens. Bei genauer Durchsicht zeigte sich, dass die Überschrift in größeren Buchstaben erkannt wurde. Die nächste größere Auflösung von 300dpi brachte ein deutlich besseres Ergebnis und es wurden die meisten Buchstaben erkannt. Die Zahl der Buchstabenfehler bei 300dpi war größer als mit ocrad. Die Überschrift mit 300dpi war fehlerhafter als mit 150dpi. Noch größere Auflösungen zeigten keine Verbesserungen, eher Verschlechterungen war der Eindruck. Schwierigkeiten gibt es vor allem bei der Erkennung im Bereich der “ß”, den Liguatoren (ff, fi, ft) und sonstigen Sonderbuchstaben. Der Versuch mit 1200dpi benötigte zu viel Resourcen (Prozessor 75% Memory und 1,6GB Swap) und wurde daher nach 20 Minuten abgebrochen.

5.5  Virtualisierung

5.5.1  Anmerkungen zur Virtualisierung

Eine Virtualisierung ist eine Möglichkeit identische Rechner mit identischer Software auf verschiedenen Rechnern sogar mit unterschiedlichen Betriebssystemen laufen zu lassen. Von der Entwicklungsgeschichte betrachtet, fing diese Entwicklung vorwiegend mit Emulatoren an. Hierbei wurde eine Anwendung geschrieben, die jeden Rechenschritt eines Prozessors und der Peripherie exakt nachbildet. Bei der Emulation wurden daher viele Maschinenzyklen auf dem Rechner benötigt um einen Maschinenzyklus eines anderen Prozessors nachzubilden.

Wenn aber auf dem Gastgeberrechner (engl.: host) die gleiche Prozessorarchitektur vorhanden ist, wie emuliert werden soll, gibt es Wege dies zu beschleunigen. Um das Prinzip zu verstehen ist es notwendig zu wissen, dass die Anwendungen und auch die Betriebssysteme in der Regel in einer höheren Programmiersprache geschrieben werden (z.B. C, C++) und letztendlich durch einen Compiler in ablauffähigen Maschinencode (Binaries) umgesetzt werden. Innerhalb des Maschinencodes sind durchaus Befehlsbytesequenzen enthalten, die unkritisch auch auf dem Prozessor direkt ausgeführt werden könnten.

Durch Optimierung der Erzeugung des Maschinencodes durch den Compiler auf möglichst viele Sequenzen, die bei einer Emulation direkt auf dem Prozessor ausgeführt werden können, ist eine erhebliche Beschleunigung einer Emulation notwendig. Bei Verwendung einer anderen Prozessorarchitektur ist eine solche Optimierung leider nur sehr eingeschränkt möglich und bleibt daher in der Geschwindigkeit immer zurück. Aus dem Grunde hat Apple bei seinen Rechnern im Jahre 2005 begonnen von der PowerPC-Prozessorfamilie (Motorola 68er Reihe) auf die Intel-Prozessorfamilie umzusteigen. Auf einem Apple ibook G4 (1GB RAM, ca. max 1500 MHz, PowerPC) benötigte Ubuntu 6er Version für Intel-Rechner statt einer Minute zehn Minuten zum Hochfahren, auf Grund der Emulation ohne Beschleunigung mit qemu für PowerPC.

Nach meiner Ansicht ist die PowerPC-Architektur eigentlich besser als die Intel-Architektur. Auf der anderen Seite gab es bei der Intel-Architektur von Anfang an die Aufwärtskompatibilität. Aus dem Grunde funktioniert heute noch DOS auf vielen Rechnern. Es gibt immer wieder Experten die eine Aufwärtskompatibilität für Überflüssig halten, aber wer will jedesmal mit einem neuen Rechner auch die gesamte Software neu beschaffen und diese jeweils an eine neue Hardware anpassen.

Der Programmierer sieht von den erwähnten Zusammenhängen in der Regel nichts und es ist auch nicht notwendig das zu wissen, es sei denn er programmiere Compiler oder erstelle Assemblercode. Auf Grund vieler weitere Methoden zur Beschleunigung ist der Begriff Emulation nicht mehr ganz passend. Es wird daher allgemein besser der Begriff Virtualisierung verwendet.

Es gibt auf dem Markt mehrere Virtualisierungen für verschiedene Betriebssysteme. Für den Privatanwender bieten viele kommerzielle Hersteller freie Versionen an.

Bis auf die letzte Virtualisierungsanwendung gibt es diese als Freeware sowohl für Linux wie auch für Windows. Es gibt auch Versionen für Apple Macintosh PowerPC von einzelnen Anbietern, aber meist nicht als Freeware bzw. werden diese meist nur noch für die Intel-Rechner von Apple gepflegt.

Der Linux-Anfänger ist eigentlich gut beraten, wenn er auf seinem Rechner mit einem anderen Betriebssystem Linux in einer Virtualisierung ausprobiert. Die virtuelle Umgebung ist dafür eine ideale Spielwiese. Es gibt auch fertige Linux auf einem Live-USB-Stick, die unter Windows laufen. Diese basieren meistens auf qemu.

5.5.2  Installation und Betrieb einer Virtualisierung

Die Pakete “qemu” und “virtualbox” gibt es bei Debian unter “apt-get” zur Installation.

apt-get install virtualbox Reading package lists... Done Building dependency tree Reading state information... Done Package virtualbox is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source E: Package virtualbox has no installation candidate

Für die Installation von virtualbox muß nach der Meldung die apt-get Download-Quellenliste erweitert werden. Für den Anfänger ist das wieder eine Herausforderung.

Es wird also zunächst qemu installiert. Bei apt-get wurden auf der Konsole auch noch einige Hinweise zu weiteren Paketempfehlungen angezeigt. Oft sind diese Angaben eine wertvolle Hilfe bei der Suche nach Problemlösungen. Es ist daher oft sinnvoll mit “copy&paste” solche Texte aufzuheben.

apt-get install qemu Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libbrlapi0.5 libvdeplug2 qemu-system qemu-user qemu-utils Suggested packages: qemu-user-static samba kqemu-source debootstrap Recommended packages: vde2 vgabios bochsbios openhackware openbios-ppc openbios-sparc The following NEW packages will be installed: libbrlapi0.5 libvdeplug2 qemu qemu-system qemu-user qemu-utils 0 upgraded, 6 newly installed, 0 to remove and 386 not upgraded. Need to get 17.1MB of archives. After this operation, 51.0MB of additional disk space will be used. Do you want to continue [Y/n]? Y Get:1 http://ftp.us.debian.org sid/main libvdeplug2 2.2.3-3 [12.1kB] Get:2 http://ftp.us.debian.org sid/main libbrlapi0.5 4.1-4 [68.0kB] Get:3 http://ftp.us.debian.org sid/main qemu-system 0.11.1-2 [11.5MB] Get:4 http://ftp.us.debian.org sid/main qemu-user 0.11.1-2 [5,173kB] Get:5 http://ftp.us.debian.org sid/main qemu-utils 0.11.1-2 [307kB] Get:6 http://ftp.us.debian.org sid/main qemu 0.11.1-2 [96.9kB] Fetched 17.1MB in 22s (775kB/s) ... # and so on

Für den Arbeitsspeicher RAM des virtuellen Rechner wird natürlich RAM des Gastgeberrechners benötigt. Damit das System durch Swappen nicht zu sehr ausgebremst wird, sollte darauf geachtet werden. Auf dem Gastgeberrechner sollten nicht viele Anwendungen während der Virtualisierung parallel laufen, wenn dieser viel vom Arbeitsspeicher zugewiesen wurde.

Auf einem Netbook mit 1GB RAM mit aktuelles Linux aus dem Jahre 2009 sollten nicht weniger als 512 MB RAM für den Gastrechner verbleiben. Es in dem Falle für eine virtuelle Umgebung maximal bis zu 512 MByte als RAM zugewiesen werden. Wer mehr benötigt, sollte als Gastbetriebssystem ein Linux für Resourcenschwache Rechner verwenden. Für Windows XP und Windows 7 gelten ähnliche Grenzen.

Nach der Installation sollte vor einem ersten Aufrufversuch, immer erst die “man-page” aufgerufen und durchgesehen werden.

man qemu # some interesting parts: -M machine Select the emulated machine ("-M ?" for list) -cpu model Select CPU model (-cpu ? for list and additional feature selection)

Ein erster Versuch funktioniert nicht, da der virtuelle Rechner noch ein BIOS benötigt. Ein Fehler aus 2004 gibt es wieder im Debian, war die erste Vermutung, dass das Verzeichnis mit den BIOS nicht gefunden wird. Diese ist hier unter “/usr/share/qemu/” zu finden.

qemu -boot once=d qemu: could not load PC BIOS 'bios.bin'

Und nun ein Versuch mit einer weiteren Anleitung zu Qemu (siehe Literaturverzeichnis L13).

Zuerst ist eine virtuelle Festplatte zu erzeugen. Für die Versuche wird ein eigenes Verzeichnis angelegt. In dem Verzeichnis wird eine virtuelle Festplatte angelegt, die zunächst noch leer ist. Als Distro für die virtuelle Umgebung wird eine Mini-Distro, hier Puppy-Linux heruntergeladen.

# create directories mkdir ~/Virtuals cd ~/Virtuals mkdir qemu cd qemu # create an empty virtual harddisk image qemu-img create -f qcow2 Test01.img 200M # start again: qemu -hda Test01.img -cdrom pup-431.iso -boot d qemu: could not load PC BIOS 'bios.bin' # bug from 2004 again path of BIOS is wrong # you have to add path to find BIOS qemu -hda Test01.img -cdrom pup-431.iso -boot d -L /usr/share/qemu/

Und nun funktioniert es immer noch nicht. Bei der Forschung nach der Ursache stellt sich heraus, dass die bios in dem Verzeichnis als Links angelegt sind und ins Leere gehen. In mc steht vor dem Namen ein ! und mit ls werden diese schwarz angezeigt.

# install this to get this bios: apt-get install bochsbios # now bios.bin is now existing # new attempt qemu -hda Test01.img -cdrom pup-431.iso -boot d -L /usr/share/qemu/ Could not load option rom 'vgabios-cirrus.bin' # install this to get this bios: apt-get install vgabios # now vgabios.bin, vgabios-cirrus.bin is now existing # new attempt qemu -hda Test01.img -cdrom pup-431.iso -boot d -L /usr/share/qemu/ # now it is running

Nun ist es schon besser, aber nun fehlt noch das BIOS einer Standardgrafikkarte. Also wieder suchen und nachladen ist angesagt. In den Hinweisen bei der Ausgabe auf der Konsole mit apt-get standen glücklicherweise die Namen der Pakete. Ohne diese Hilfe wäre die Suche sicher länger gewesen.

Puppy bootet zwar aber bleibt im Startpunkt “Updating...network-drivers-list” hängen. Nach einem Reboot wurde es noch einmal versucht. In dem Falle wird nicht ein kleines Fenster aufgemacht, sondern qemu im Vollbildmodus gestartet. Mit str+alt+f1 kann eine der Basiskonsolen erreicht werden. Zurück in X11 auf alt+f7 ist der Bildschirm von qemu verschwunden, aber mit top geprüft, ist der Prozess noch am laufen. Mit str+alt+f8 wird der Bildschirm von qemu erreicht. Mit str+alt+f7 wird wieder X11 mit der Konsole erreicht. Im Konsolenfenster, in dem qemu gestartet wurde, kann mit str+c qemu beendet werden. Im folgenden Verlauf zeigte sich später dieses störende Verhalten nicht mehr auf einer “user”-Konsole.

qemu -hda Test01.img -cdrom pup-431.iso -boot d -L /usr/share/qemu/ No protocol specified No protocol specified init kbd

Die Bedienung der Tastatur bringt nur vollkommen andere Zeichen auf den Bildschirm. Die Ergänzung von “-k de” bringt die notwendige Abhilfe, aber es läuft noch nicht. Allerdings sind bei Tastaturbelegung einige Zeichen z.B. “=” nicht erreichbar. DSL kommt mit seiner grafischen Oberfläche hoch, aber mit der Maus kann diese nicht bedient werden.

Als nächstes wird eine 4er Version DSL (DamnSmallLinux) heruntergeladen. Diese startet auch nicht. Es ist für das Booten die Option “lowram” am DSL Bootbildschirm einzugeben. Der Grund ist, dass bei qemu der Standardwert für RAM 128 MB ist. Mit den vorherigen Fehlermeldungen ist kaum auf die Lösung zu kommen.

qemu -hda Test01.img -cdrom DSL_current.iso -boot d -L /usr/share/qemu/ -usb -soundhw sb16 -k de # works only with dsl option lowram
qemu -cdrom DSL_current.iso -k de -m 512 No protocol specified No protocol specified init kbd. Could not open SDL display

Nun noch eine Versuch von Puppy-Linux mit 256 MB RAM.

qemu -hda Test01.img -cdrom pup-431.iso -boot d -L /usr/share/qemu/ -usb -soundhw sb16 -k de -m 256

Nach dem vielen herumprobieren, fand ich per Zufall nur heraus, dass ich vorher mit “xrandr –output LVDS –panning 1024x800” wieder erreichen kann, dass ein eigenes Fenster in der aktuellen graphischen Umgebung geöffnet wird. Von einer “root”-Konsole gibt es die gleichen Probleme, aber diese lassen sich mit “xrandr” nicht in den Griff bekommen. Nachdem ich das durchgeführt habe, ging es plötzlich. Allerdings ist die Anzeige etwas zu groß für das Netbook.

Der Rechner wird nochmal gebootet. Auch ohne xrandr wird als “user” ein eigenes Fenster geöffnet für die Virtualisierung. Gleiches gilt für den “root” über “sudo”. Das Eröffnen einer neuen und weiteren X11 Session findet weiterehin bei Start auf einer echten “root”-Konsole statt. Hier funktioniert qemu nur bedingt mit den Problemen bei der Tastatur und mit der Maus. Somit funktioniert nun die Virtualisierung mit qemu von einer “user”-Konsole. Das störende Verhalten war anscheinend durch öfteres hartes Abbrechen von qemu mit “kill” statt “ctrl-c” im der Konsole entstanden.

qemu -cdrom DSL_current.iso qemu -cdrom pup-431.iso

Bei der Emulation ist das Hochfahren von DSL erträglich. Das Surfen in DSL über den Gastrechnerzugang funktionierte auf Anhieb. Beim Start von DSL ist zu berücksichtigen, dass in der Virtualisierung bei der Eingabe der Kerneloptionen über die US-Tastaturbelegung eingegeben wird. Es erfolgen einige Abfragen beim Start von DSL. Ich habe “xvesa”, 640x480, 16-Bit-Farbtiefe, keine usbmouse, sondern ps2-mouse ausgewählt. Mit diesen Einstellungen sollte DSL “out of the box” funktionieren.

Aber Puppy Linux benötigt wirklich eine lange Zeit zum Booten. An der Stelle “Updating...network-drivers-list” endet diesmal nicht der Bootvorgang, aber es dauert mehrere Minuten bis der nächste Schritt erreicht wird.

5.5.3  Installation eines Betriebsystems in einer Virtualisierung

Folgende Schritte sind notwendig um ein Windows in eine virtuelle Umgebung zu installieren.

mkdir ~/WinTry cd ~/WinTry qemu-img create -f qcow2 Test01.img 4G # create/copy image of installCD to your folder qemu -hda Test01.img -cdrom WinInstall.iso -boot d -L /usr/share/qemu/ # try your installation

Folgende Schritte sind notwendig um ein Linux in eine virtuelle Umgebung zu installieren.

mkdir ~/DSL_Try cd ~/DSL_Try qemu-img create -f qcow2 Test01.img 4G # create/copy image of installCD to your folder qemu -hda Test01.img -cdrom DSL_current.iso -boot d -L /usr/share/qemu/ # try your installation - use DSL installer

5.5.4  VMWARE

Eine bekannte Software für die Virtualisierung ist vmware. Es gibt kostenlose Versionen des vwware-player und vmware-server. Im folgenden Mitschrieb wurde vmware-player heruntergeladen. Für das Herunterladen muss bei vmware registriert werden. Es werden etwas viele Angaben benötigt, z.B. Firmenangabe. Für die rein private Nutzung hilft hier ein Bindestrich oder die Verwendung eines Firmennamens “none”.

Für die erste Beschäftigung mit Linux und für den ersten Installationsversuch ist die Verwendung einer virtuellen Umgebung sehr zu empfehlen.

# lets look for vmware available by apt-get sudo apt-cache search vmware # getting following output: imvirt - detects several virtualizations libimvirt-perl - Perl module for detecting several virtualizations libview-dev - VMware's Incredibly Exciting Widgets libview2-dbg - VMware's Incredibly Exciting Widgets libview2 - VMware's Incredibly Exciting Widgets virt-goodies - A collection of helpful virtualisation related tools vmfs-tools - Tools to access VMFS filesystems xmount - tool to crossmount between multiple input and output harddisk images xserver-xorg-input-vmmouse - X.Org X server -- VMMouse input driver to use with VMWare xserver-xorg-video-vmware - X.Org X server -- VMware display driver # conclusion: not available by apt-get, but some tools for vmware
# homepage of vmware http://www.vmware.com/ http://www.vmware.com/products/server/ http://www.vmware.com/products/player/
# you have to register to get a free download # select right version (here for 32bit linux) # here you find how to install and essentials vmware_player300.pdf # the main package VMware-Player-3.0.1-227600.i386.bundle VMware-VIX-1.8.2-227600.i386.bundle # some more documents GuestOS_guide.pdf vix180_vmrun_command.pdf vix180_player_technote.pdf
# look into vmware_player300.pdf mkdir -p ~/Virtuals/vmware_player cd ~/Virtuals/vmware_player # now running the installer sudo sh VMware-Player-3.0.1-227600.i386.bundle
# after installation start vmplayer vmplayer # now running the configuration menue # accept EULA # I selected a Puppy-Linux iso for Installation # I cannot access buttons, so I have to xrandr --output LVDS --panning 1024x768 # now I can press button next # I selected "Other 2.6 Kernel" # Name puppy_linux for Files # Split into 2GB Files # Virtual Disk 0,2GB # After done this virtual machine starts first term. # vmware recognized my 1.3M build in webcam # vmware asks do downlaod VMWARE tools for Linux. # I pressed button download. # puppy_linux continues # VMWARE tools for Linux download hang up at update tool. # I cannot soft end vmware. # stopped hard by sudo kill -9 process_number_of_vmware-installer # redone by options, install all tools

Nach der Installation und ersten erzeugten virtuellen Umgebung wurde ein Verzeichnis angelegt in dem sich die Konfigurations-, HD-Image-, und Log-Dateien befinden. Da die virtuellen Festplattendateien viel Platz benötigen und die Log-Dateien bei häufiger Nutzung auch zunehmen, kann hierbei schnell die der Speicherplatz dieser Partition aufgebraucht sein. Es empfiehlt sich ein Auslagern auf eine ander Partitionen und diese unter dem Verzeichnis einzuhängen.

~/vmware/puppy_linux
# Try with Puppy Linux (pup-431.iso) # - starts in virtual environment. # - cannot access virtual hard drive. # - cannot access www-access from host
# Try with damn-small-linux (Nov 2008, Kernel 2.4) # - starts in virtual environment. # - cannot access virtual hard drive. # - can access www-access from host
# Try with KNOPPIX_V6.0.1CD-2009-02-08-DE.iso # - starts in virtual environment. # - can access virtual hard drive. # one partition with fdisk created # partition with mkfs.msdos formatted # works # - can/not access www-access from host - not tested # - some programs have trouble with 640x480 # openoffice covers task panel # terminal is not fully displayed # - work around with xterm

Die Verwendung von VMWARE auf einem Netbook ist zwar möglich, aber auf Grund der minimalen Fenstergröße von 1024x768 (Breite kann noch verändert werden, aber nicht die Tiefe/Höhe) wird diese Nutzung eher mehr eine Qual. Nur mittels xrandr (ab Version 1.3 und panning) kann vmware-player mit einem Betriebssystem bei 640x480 Auflösung verwendet werden. Es gibt allerdings einige Anwendungen, die bei 640x480 nicht mehr oder nur eingeschränkt verwendbar sind.

Vermutlich ist die Mindestfenstergröße von vmware-player unter Windows ähnlich und somit kann diese nur mit einem externen Monitor mit mindestens 1024x768 sinnvoll verwendet werden. Besser wird dies nur, wenn vmware in seinem virtuellen Fenster als Feature “panning mit gefangener Maus” einführen würde.

5.5.5  Künstliche Windows-Umgebung wine

Die Anwendung “wine” stellt keine Emulation oder Virtualisierung dar. Es wurde bei wine die Windows-Umgebung für die Anwendungen nachprogrammiert. Somit können Windows-Programme ohne das Betriebssystem Windows gestartet und auch installiert werden. Einige Anwendungen, für die es unter Linux kein Pendant gibt, können so unter Linux zum Laufen gebracht werden. Es wird keine Windows-Lizenz benötigt, wie es mittels Dualboot, Virtualiserung oder Emulation erforderlich wäre.

# install wine sudo apt-get install wine

Oftmals ist es jetzt bereits möglich einige Windows-Programme zu starten. Bei meiner Installation war als Standard Win XP voreingestellt. Wenn Programme von einer Partition mit installiertem Windows gestartet werden sollen, darf diese mit mount nur als read-only eingehängt sein. Es besteht sonst die Gefahr, dass auf dieser einige Konfigurationen verändert werden und Programme nicht mehr laufen. Manchmal ist es notwendig diese ein zweites Mal zu starten.

wine notepad

Nach diesem kleinen Versuch, sollte auf jeden Fall die Konfiguration aufgerufen werden und dort die einzelnen Reiter durchgegangen werden. Bei mir waren die meisten Werte bereits gesetzt. Nur bei Audio fehlten noch die Werte. Allerdings werden beim Anklicken von Test ein Vorschlag erstellt, der übernommen wurde.

# first start configuration winecfg

Im Unterverzeichnis “ /.wine” befinden sich alle Dateien für die künstliche Windows-Umgebung. Mit folgendem kleinen Listing kann eine Übersicht über alle Dateien inklusive md5-Summen gespeichert werden.

sudo find ~/.wine/ -type f -printf %s"\t"%TY%Tm%Td_%TH%TM"\t" -exec md5sum '{}' \; > wine_$(date +%Y%m%d).txt

Für die weitere Verwendung von wine mit Programmen und Installationen ist es gegebenenfalls sinnvoll ein eigenes Verzeichnis anzulegen und von dort aus die Installation von Programmen zu starten. Ansonsten sollte in entsprechendes Unterverzeichnis bei wine installiert werden.

cd ~/.wine/drive_c
Alle Dateien unter: cd ~/.wine/drive_c sind im Dateimanager unter C: zu finden Alle Dateien des Linux-Wurzelverzeichnisses: cd / sind im Dateimanager unter Z: zu finden.

In ein unten angegebenes Verzeichnis wurde erfolgreich von den PortableApps die Anwendung xnview installiert und gestartet.

mkdir -p ~/Virtuals/wine_XP # fetch xnview from # http://portableapps.com/apps/utilities # Install by wine-safe XnViewPortable_1.97.2.paf.exe # say yes for installing # chose folder # Z:\home\dieterd\Virtuals\wine_XP\XnViewPortable # start program wine XnViewPortable/XnViewPortable.exe # in case of failing, start again

Viele Anwendungen, die mit den Standardfunktionen (api, dll, vxd) von Windows auskommen, können mit wine verwendet werden.

ls .wine cd .wine mkdir wine_XP cd wine_XP # testing some programs # installing program for ms windows portableapps wine-safe XnViewPortable_1.97.2.paf.exe # installation works # start program for testing wine XnViewPortable.exe # program works wine-safe winMd5SumPortable_1.0.1.55_Rev_3_English.paf.exe wine winMd5SumPortable/winMd5Sum.exe # program works wine-safe 7-ZipPortable_4.65_Rev_2.paf.exe wine 7-ZipPortable/7-ZipPortable.exe # program works wine-safe TrueCrypt\ Setup\ 6.3a.exe wine TrueCrypt/TrueCrypt wine TrueCrypt/TrueCrypt.exe wine TrueCrypt/TrueCrypt/ # program works not wine-safe FreeOTFE_5_21.paf.exe wine FreeOTFE/FreeOTFE_Launcher.exe # program works not wine-safe FreeOTFEExplorer_3_51.paf.exe wine FreeOTFEExplorer/FreeOTFEExplorer_Launcher.exe # program works (hungs up sometimes)

5.6  Dateimanager und ftp

Die Dateimanager mc (Midnight Commander) und Konqueror haben bereits alles Notwendige für den ftp-Zugang dabei. Beim Konqueror erfolgt der Aufruf durch die Eingabe des unten angegenen Beispiels in der Link-Adressleiste. Beim mc wird statt eines Dateipfades hintern cd das Gleiche eingegeben. Fehlt eine der notwendigen Angaben so erscheint beim Konqueror ein entsprechenden Eingabefenster (Login-Fenster).

# ftp access with konqueror ftp://useraccountname:password@homepage.de # ftp access with mc (midnight commader) cd ftp://useraccountname:password@homepage.de

Die beiden ftp-clients sind einfach zu bedienen und die Installation eines weiteren ftp-clients ist eigentlich nicht mehr notwendig.

5.7  Fraktale Figuren

Aus der Welt der Mathematik gibt es die fraktalen Figuren, die interessant zum Ansehen sind. In der Open-Source-Welt gibt es auch hier einige nette kleine Programme mit denen diese Figuren auf dem Bildschirm darstellbar sind und sich auch als Bild abspeichern lassen.

# apt-cache search fractals # looked in output for a tool # decided to install fraqtive and xaos apt-get install fraqtive apt-get install xaos

Mit dem Programm fraqtive lassen sich einfach schöne fraktale Mandelbrot-Bilder und fraktale Julia-Bilder erzeugen. Das Programm xaos erstellt Mandelbrot-Bilder mit komfortablen Zoomen in dem Bild.

5.8  Multimedia Konvertierungen

# convert a video to theora codec # here only width is set manually, hight is calculated ffmpeg2theora inputfile -x 640 -o outputfile.ogv
# find info about media file # with redirection of output to use text info # with grep select interesting part ffprobe inputfile 2>&1 | grep -A 20 "^Input"
# wmv media file standard codec mencoder infile -vf scale=960:540 -o outfile -oac lavc -lavcopts acodec=wmav2 -ovc lavc -lavcopts vcodec=wmv2 # media file mpeg4/divx compressed mencoder infile -vf scale=640:360 -o outfile -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4
# simple media converter ffmpeg -i infile -s 640x360 outfile.mpg

Bei der Konvertierung ist nicht nur der gewählte Codec entscheidend, sondern auch die gewählte Auflösung und Bitrate. Bei 1920x1080, 24bit, 30 Frames/s und CD-Audio hätte unkomprimiert dies folgende Datenraten:

Audio Video 192 kByte/s 186 MByte/s 1,5 Mbit/s 1,5 Gbit/s

Eine kleine handliche Videocamera für HDTV mit H264 Komprimierung erreicht auf Grund der Rechenleistung nicht die maximal mögliche Komprimierung. Immerhin etwa 2-2,5 Mbyte/s (d.h. auf ca 1/70) ermittelte ich bei einer Kamera. Mit einer 4GB SD-Karte reicht das für 25 Minuten Aufzeichnung.


Previous Up Next