Artikel-Schlagworte: „Linux“

Lucid, der ATI Treiber, KMS und Performance

Dienstag, 6. Juli 2010

Bisher gab es nie Probleme mit der Installation eines proprietären Grafiktreibers für meine Onboard ATI Radeon HD3300, was sich aber in Ubuntu Lucid Lynx geändert hat. Nach dem Update von Karmic auf Lucid und dem Herunterladen des Treibers über das Applet Hardware Treiber erhielt ich einen bunten Brei an Farben und Linien, welcher sich auch noch bei jeder Mausbewegung änderte und bewegte. Verschob man ein Fenster, konnte man Glück haben, dass man eventuell Menüs oder Schriften wieder korrekt angezeigt bekam. Da dies aber in keinster Weise akzeptabel war, verschwand der verbuggte Treiber schnell wieder von meinem System und ich versuchte mein Glück diesmal mit dem Exemplar von der ATI Seite: Doch auch hier das gleiche Bild (im wahrsten Sinne des Wortes). Also, alle proprietären Treiber wieder entfernt und wieder den standard Open Source “radeon” aktiviert. Bisher lief damit eigentlich alles einwandfrei, bis, ja bis auf eine Kleinigkeit die eigentlich nich so besonders auffällig war aber doch ein wenig störte. Das System war träge, nicht wirklich langsam, aber träge. Mal ein ruckeliges Scrollen auf Websites während die CPU Last nach oben schoss, mal kurze Programmaussetzer, nichts gravierendes aber trotzdem nervig.

Also entschloss ich mich dem Problem auf den Grund zu gehen, was allerdings gar nicht so einfach war, denn was löste diesen Bug aus? Nach einiger Suche fand ich dann den Übeltäter: KMS (kernel-mode-settings), die neue Kernel-Videoarchitektur die eigentlich Probleme be- und die Performans anheben sollte. Laut Known Issues for Lucid Lynx eine bekanntes Problem was allerdings nur sehr selten auftreten soll – anscheinend gehöre ich auch zu diesen sehr seltenen Fällen. Die Lösung ist einfach und schnell gemacht:

Um KMS zu deaktiviern muss die Datei /etc/default/grub editiert werden. An der Stelle GRUB_CMDLINE_LINUX muss die Option nomodeset hinzugefügt werden.
Anschliessend muss noch ein sudo update-grub ausgeführt werden um die Änderung zu übernehmen. Nach einem Reboot ist das Problem behoben.

Die eigene Handschrift am PC

Donnerstag, 15. Oktober 2009

Heute bin ich auf eine sehr gute und interessante Webseite aufmerksam geworden: www.fontcapture.com ! Hier hat man die Möglichkeit anhand von Buchstaben-Schriftproben seine eigene individuelle Handschrift in den PC zu bringen. Dies funktioniert ganz einfach, zuerst druckt man sich einen Bogen aus, auf dem man dann sämtliche Buchstaben, Zahlen und Zeichen einträgt. Hat man dies ordentlich erledigt, muss man die Seite einscannen und die gescannte Datei zu fontcapture.com hochladen. Auf dem Server wird dann aus den Schriftproben eine Truetype Schrift erstellt, die man sich in einer Vorschau mittels beliebigem Text anzeigen lassen und natürlich auch direkt downloaden kann. Die .ttf Datei muss bei Windows in den Ordner C:\Windows\Fonts und unter Linux zum Beispiel nach \usr\share\fonts\truetype. Die von mir produzierte Schrift, sieht wie folgt aus:

writing

Alternative Linux mirware für den violet mir:ror

Samstag, 5. September 2009

Wer den mir:ror von Violet unter Linux betreiben möchte, wird schnell feststellen, dass einige Dinge nicht so schön funktionieren wie auf eine Mac oder unter Windows. Nehmen wir mal eins der wichtigesten Beispiele: das Ausführen von Scripten. Die aktuelle mirware Version kann leider nur mit Windows .bat – Scripten und Mac OS Scripten umgehen. Tiefergreifende Shell Skripte unter Linux sind leider nicht möglich. Doch findige Leute haben sich dieses Problems angenommen und eine eigene “mirware” namens erawrim speziell für Linux gebastelt. Es arbeitet auf der Konsole und legt für jedes RFID Tag einen eigenen Ordner im ~/.erawrim Verzeichnis an, dessen Namen man zu Beginn einmal festlegen muss. In dem jeweiligen Ordner befinden sich standartmäßig 4 Dateien: pose.sh (zeigen) und retire.sh (entfernen), zwei leere Skripte, die mit Leben gefüllt werden dürfen. Zudem noch die Dateien lasttime und times welche einmal das Datum der letzten Sichtung des Tags und die Anzahl der bisherigen Sichtungen des Tags enthält. Der große Vorteil ist nun natürlich, dass man komplett selbst bestimmen kann, welche Aktionen ausgeführt werden sollen, wenn die Tags auf den Mirror gelegt werden. Auch komplexe Shellskripe sind damit startbar und auch die Sprachausgabe lässt sich relativ leicht durch espeak oder mbrola nutzen. Für schöne optische Anzeigen kann man das Gnome Notification Framework nutzen. Ein wirklich großer Vorteil gegenüber der original mirware ist allerdings noch gar nicht beachtet worden: die Unabhängigkeit von violet und ihren Servern bzw. dem Internet, was die Erkennungs- und Ausführungsgeschwindigkeit enorm steigert. Da die Software bisher nur in Französisch mit französischer Dokumentation vorliegt, werde ich kurz erklären wie man erawrim installiert und lauffähig bekommt.

1) Zuerst die aktuelle Version aus dem SVN besorgen mittels: svn checkout http://erawrim.googlecode.com/svn/trunk/ erawrim-read-only

2) Nun in das Verzeichnis erawrim-read-only wechseln und mittels make && sudo make install kompilieren und installieren.

3) Nun den Mirror vom USB Anschluss trennen und den erawrim deamon mit erawrim_do start starten.

4) Jetzt wird man auf französisch aufgefordert den Mirror einzustöpseln und danach mit ENTER zu bestätigen. Hat alles geklappt wird dies durch z.B. Ouverture réussie: /dev/hidraw2 angezeigt. Möglich sind auch andere hidraw Geräte.

5) Das wars auch schon fast! Nun kann ein RFID Tag registriert werden. Legt man ein Tag auf den Reader, wird man aufgefordert einen Namen für das Tag/Objekt einzugeben. Diesen gibt man ein und bestätigt mit ENTER. Damit ist das Objekt registriert und die jeweiligen Skripte können nur im Ordner ~/.erawrim/<Objekt/RFID-Name>/ nach den eigenen Wünschen angepasst werden.

Das Skript benötigt beim Start einmal Root Rechte für den Zugriff auf den Mirror.

Tipps und Ideen gibts hier (auf Französisch): http://noog.fr/blog/2009/03/22/mirror-de-la-societe-violet-sous-linux/

Die erawrim Seiten bei google code: http://code.google.com/p/erawrim/

Multipath Routing und 2 DSL Leitungen

Donnerstag, 6. August 2009

routingDie Anschaffung einer 2. DSL Leitung stellte mich vor folgendes Problem: Wie schaffe ich es, beide Leitungen zu benutzen und ihre Routen gemäß der Bandbreiten zu gewichten? Der Server, der diese Aufgabe erledigen sollte, war sowieso schon lange in Betrieb und benötigte nur eine kleine Umkonfiguration sowie ein wenig zusätzliche Hardware, sprich 2 Netzwerkkarten. Mein erster Versuch, das Multipath Routing mit 2 Netzkarten zu bewerkstelligen stellte sich als schwieriges Unterfangen ein und so baute ich kurzerhand eine 3. NIC ein.

Was soll nun passieren und was passiert nicht?

Multipath Routing bedeutet, dass die Daten die Möglichkeit bekommen, mehrere Wege (Paths) in ein Netz zu bekommen. Das suchen sie sich jedoch nicht selbst aus, sondern der Router (in diesem Fall der Server) entscheidet, welche Pakete über welche Route also welchen Internetanschluss laufen. Hierfür gibt es verschiedene Gewichtungsmöglichkeiten der einzelnen Routen die man nach Lust und Laune oder Bandbreite einstellen kann. Man nutzt also nur beide Leitungen abwechselnd nach festen Kriterien, bündelt aber nicht die Anschlüsse (bonding)! Ein Download nutzt weiterhin immer nur eine Leitung (load balancing)! Aber zum Technischen:

Konfiguration:

Vorneweg: Für sämtliche Befehle werden root Rechte benötigt! Es bietet sich also an, direkt in einer root-shell zu arbeiten!

Vorraussetzung ist ein Linux PC / Server mit installiertem Paket iproute. Zuerst legt man 2 neue Routing Tables in der Datei /etc/iproute2/rt_tables an, indem man am Ende folgendes einfügt

200     se555     #Routingtable für Verbindungen zu Router 1
201     v721      #Routingtable für Verbindungen zu Router 2

Die Namen für die einzelnen Tables können natürlich auch anders vergeben werden. Nun kommt die eigentliche Arbeit, das Einstellen der Routen. Hier gibt es mehrere Ansätze wo die Informationen hinterlegt werden sollen. Die einen plädieren für ein Script, ich konnte mich mehr mit dem Ansatz anfreunden, die Informationen direkt in die /etc/network/interfaces Datei einzutragen. Bei mir sieht die Datei wie folgt aus:

iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0


# Connection zu SE555
iface eth1 inet static
address 192.168.1.199
netmask 255.255.255.0
post-up ip route add 192.168.1.1 dev eth1 src 192.168.1.199 table se555
post-up ip route add default via 192.168.1.1 table se555
post-up ip rule add from 192.168.1.199 table se555
post-down ip rule del from 192.168.1.199 table se555

# Connection V721
auto eth2
iface eth2 inet static
address 192.168.1.198
netmask 255.255.255.0
post-up ip route add 192.168.1.2 dev eth2 src 192.168.1.198 table v721
post-up ip route add default via 192.168.1.2 table v721
post-up ip rule add from 192.168.1.198 table v721
post-down up rule del from 192.168.1.198 v721

Dabei gehören folgende IPs zu folgenden Geräten:

eth0 192.168.1.200        LAN Interface

eth1 192.168.1.199        Uplink zu Router 1

eth2 192.168.1.198        Uplink zu Router 2

192.168.1.1                       Router 1

192.168.1.2                       Router 2
Ist alles eingestellt, können die Interfaces hochgefahren werden mittels ifconfig eth1 up bzw. ifconfig eth2 up. eth0 sollte ja bereits up sein, sofern man per ssh verbunden ist. Sind nun alle Schnittstellen aktiv, kann die Konfiguration schnell mit ifconfig überprüft werden. Der Befehl ip route gibt Übersicht über das Routing der einzelnen Interfaces. Nun muss dem System nur noch mitgeteilt werden über welche Route, was geroutet werden soll und in welchem Verhältnis. In meinem Fall ist Anschluss 1 eine DSL6000 Leitung und Anschluss 2 eine DSL25000 Leitung. Die Bandbreite von A1 ist also knapp 1/4 von A2, darum sollen Pakete in diesem Verhältnis auf die Leitungen aufgeteil werden. Das Routing, bzw. die Verteilung der Pakete erfolgt nach Eingabe von:
ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 25 nexthop via 192.168.1.2 dev eth2 weight 75
Damit sollte nun alles Funktionieren. Die default route wird nun auch angezeigt, wenn man ip route erneut zu rate zieht. Bei mir siehts wie folgt aus:
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.198
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.200
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.199
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
default
nexthop via 192.168.1.1 dev eth1 weight 25
nexthop via 192.168.1.2 dev eth2 weight 75

Nun muss nur noch der DHCP Server so eingestellt werden, das als Router bzw. Gateway die 192.168.1.200, also das LAN Interface benutzt wird. Und voila, das Multipath Routing konfiguriert!

Folgeartikel: http://maltekueppers.de/wp/?p=1356

ENDGÜLTIGE LÖSUNG: http://maltekueppers.de/wp/?p=1363

Quellen:

http://lartc.org/howto/lartc.rpdb.multiple-links.html

http://www.debian-administration.org/articles/377

http://wiki.ubuntuusers.de/Multiple_Uplink_Routing

Home Power Control

Freitag, 17. Juli 2009

PollinK8IOEs ist vollbracht! Nach vielem Testen und Basteln habe ich es nun geschafft. Die K8 I/O von Pollin ist zusammengebaut und ist wider erwarten doch funktionstüchtig :) . Nach anfänglichen Problemen mit dem USB to RS232 Kabel, welches jegliche Kommunikation mit der Karte verweigerte (Hinweis für mich: Solche Adapter sind Müll!), versuchte ich den COM Port zu nutzen welcher glücklicherweise mein Mainboard noch ziert. Doch auch der verweigerte in Zusammenarbeit mit der Karte seinen Dienst. Glücklicherweise fand ich an meinem Homeserver noch einen echten LPT Ausgang und damit sollte auch die Karte endlich funktionieren und ihren Dienst aufnehmen (Kleiner Hinweis: Die Karte scheint wirklich nur an echten LPT Ausgängen zu arbeiten!). Nach langem Suchen im Internet stieß ich auf den Quellcode für das Programm lpic, eine Software, welche das einfache Steuern der Karte unter Linux ermöglicht. Nachdem ich Programm und Karte nun auf Herz und Nieren getestet hatte, begann ich mit dem Auseinanderbauen der Funkfernbedienung und lötete Kabel an die Tasterkontakte um die mit der Relaiskarte schalten bzw. drücken zu können. Auch das funktionierte einwandfrei und die Fernbedienung schaltete per Relaiskarte die Steckdose. Dummerweise benötigt man pro Steckdose zwei Kanäle an der Relaiskarte, einen zum Schalten des Ein- und einen zum Schalten des Austasters, was aber nicht weiter stört, denn 4 Steckdosen reichen mir (vorerst) allemal. Ein weiteres Problem war die Entfernung des Servers bzw. der Fernbedienung zu den zu schaltenden Steckdosen, denn diese ist enorm hoch (20m durch Wände). Ein Wunder das die Dosen noch ein Signal erhaschen. pollink8io1

Nach einigem herumprobieren wurde es mir allerdings zu nervig, ständig für das Schalten einer einfachen Steckdose eine SSH Verbindung zum Server aufzubauen und dort mühevoll Befehle einzutippen. Dann kam mir eine Idee: Apache mit PHP! Da der Server sowieso mit einem Webserver ausgestattet war, musste ich ihn nur noch dazu bringen per PHP Shell Skripe auszuführen. Auch das klappte mit einigen Hürden irgendwann, sodass ich nun in der Lage bin sämtliche Steckdosen per Webinterface bzw. per Lan zu steuern. Das Script ist im Moment nur elementar, aber funktionsfähig. Mit Sicherheit werde ich noch einige Funktionen einbauen, die mir das Leben erleichtern bzw. das Steuern komfortabler Gestalten, aber fürs erste soll es so reichen. Hier meine Vorgehensweise:
Bei Linuxforen.de fand ich folgenden C-Quellcode der unter GNU-GPL veröffentlicht wurde. Ich habe lediglich die “Fehler” behoben (siehe Thread):  lpic.c
Kompiliert man nun das ganze mit gcc lpic.c -O -o lpic -Wall erhält man die compilierte lpic File, welche dann nach /usr/bin/ kopiert werden sollte. Ist dies geschehen, sollte man nun per lpic 8 toggle alle Relais auf der K8 IO schalten können. Dazu muss man übrigens root Rechte besitzen, da ansonsten eine Fehlermeldung erscheint.
Funktioniert dies können wir uns um den Apache sowie die PHP Realisierung kümmern. Ich gehe davon aus, dass Apache mit PHP installiert ist und läuft. Da wir für die Ausführung des Scripts root Rechte benötigen, müssen wir zuerst www-data in der /etc/sudoers file hinzufügen. Dazu fügen wir die Zeile www-data ALL=NOPASSWD: /usr/bin/lpic hinzu und speichern die Datei. Dann legen wir uns im Webroot ein Verzeichnis an, welches unsere PHP Files beherbergen soll, ich habe es “steckdosen” genannt (also /var/www/steckdosen). Hier hinein kommen 2 Files, einmal eine index.php und eine steckdosen.php. Die index.php enthält ein simpeles Formular, welches die Eingaben an die eigentliche Funktionsdatei steckdosen.php weitergibt. Diese ruft dann unser Shellscript lpic mit entsprechenden Parametern auf, je nach Funktion. Da ich die “Taster” der Fernbedienung nur kurz drücken muss um die Steckdose schalten zu lassen, kann ich das Relais nach kurzer Zeit auch wieder öffnen (sonst würde ich die ganze Zeit das An-Signal weitersenden), dies geschieht durch erneuten Aufruf von lpic im php Code nach einer kurzen Pause von 2 Sekunden. Zusätzlich habe ich eine meta-refresh eingebaut, welches mich wieder zurück zur index.php bringt. So kann ich nun meine Steckdosen von der ganzen Welt :) aus übers Internet mit einfachsten Mitteln steuern.

Verwendete Files:
lpic.c Download
index.php Download
steckdosen.php Download

Quellen:
http://www.ip-phone-forum.de/showthread.php?p=749716

http://www.linuxforen.de/forums/showthread.php?t=198642&highlight=relais+software