Blog

Fingerprint reader unter Linux - fprint

Vor einiger Zeit waren die Fingerprint reader von IBM/Lenovo Thinkpads, wie zB

% lsusb | grep Finger
Bus 004 Device 002: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader

durch thinkfinger unterstützt, doch in letzter Zeit war er so nicht mehr zur Mitarbeit zu überreden. Abhilfe ist recht einfach, dank fprint. Unter Debian:

# aptitude install libpam_fprint

Eine Anleitung seinen Fingerprint reader in Betrieb zu nehmen findet sich in der Dokumentation zum Paket, bzw auf http://reactivated.net/fprint/wiki/Pam_fprint

Tags:
19. Nov 2009

Xorg beenden per [Ctrl] + [Alt] + [Backspace]

Mit Xorg in der Version 7.4 bzw xserver-common in Version 1.6.1 hat leider nicht nur Input-hotplugging Einzug in Debian gehalten, sondern leider hat sich auch das gewohnte Verhalten zum schnellen Beenden von Xorg geändert.

So ist es jetzt zwar notwendig aber nicht mehr hinreichend in den ServerFlags der Datei /etc/X11/xorg.conf die Option DontZap auf False zu setzen. Vielmehr muß das Event ctrl_alt_bksp auch ausgeliefert werden. Am einfachsten geschieht dies wenn in der Datei /etc/default/console-setup die Variable XKBOPTIONS um den Eintrag terminate:ctrl_alt_bksp durch Beistrich getrennt erweitert wird.

# apt-cache policy xserver-common
xserver-common:
  Installed: 2:1.6.1.901-2
  Candidate: 2:1.6.1.901-2
  Version table:
 *** 2:1.6.1.901-2 0
        900 http://ftp.debian.at unstable/main Packages
        100 /var/lib/dpkg/status

# grep terminate /etc/default/console-setup
XKBOPTIONS="lv3:ralt_switch,terminate:ctrl_alt_bksp"

# grep -1 DontZap /etc/X11/xorg.conf
Section "ServerFlags"
        Option "DontZap"        "False"
EndSection

Das obige Ergebnis sollte sich auch per setxkbmap erledigen lassen, jedoch bei mir leider, wie auch der Versuch hal zum setzen der Option terminate:ctrl_alt_bksp zu überreden, ohne den gewünscht Erfolg.

Tags:
22. Jun 2009

Xorg - Input-hotplugging - veraltert

[!] Die Methode Input-hotplugging und die dabei nötige Konfiguration der Geräte mit Hal vorzunehmen ist veraltert und muß nicht auf aktuellen (März 2010) "unstable" Systemen funktionieren! Stand März 2010

Die hier beschriebene Funktionalität wurde mit xorg aus Debian Experimental in der Version 7.4~4 getestet.

Viele Notebookuser sollten das folgende Problem kennen. Input-hotplugging war bis vor kurzem nur unter bestimmten Umständen unter Linux und X möglich. Entweder man verwendet nur ein Device (/dev/input/mice oder /dev/psaux) in seiner xorg.conf und verzichtet bei mehreren Eingabegeräten auf eine korrekte Konfiguration unter Ausnutzung aller Möglichkeiten der Geräte oder man verwendet mehrere Geräte, mit expliziter Deviceangabe, in der xorg.conf und muß sie immer beim Start von X eingesteckt haben. Ohne jetzt auf den kleinsten gemeinsamen Nenner der Möglichkeiten eingeschränkt zu sein war es so nötig entweder durch suspend und resume oder durch Neustart des Xservers alle neuen Geräte zur Funktion zu überreden.

Mit der kommenden Version 7.4 scheint sich das endlich zu ändern. Per default scheint jetzt HAL die Konfiguration der Geräte zu übernehmen und die xorg.conf wird obsolete.

Das alte Verhalten von Xorg bewahren - Input-Hotplugging deaktivieren

Bevor ich die Konfiguration für Hotplugging zeige, will ich, für all jene die diese Funktionalität nicht benötigen und mit dem alten Verhalten von Xorg zufrieden waren, eine Möglichkeit zeigen wie man dieses bewahren kann. Will man weiter seine alte xorg.conf ohne Input-hotplugging benutzen muß man folgenden Eintrag an die xorg.conf anhängen:

% grep -1 AutoAddDevices /etc/X11/xorg.conf_oldbehavior
Section "ServerFlags"
       Option "AutoAddDevices" "false"
EndSection

Input-hotplugging Howto

Für das Aktivieren von Input-Hotplugging muß dieses entweder den zuvor genannten Eintrag in der xorg.conf (Xorg in der Version 7.4~4) auskommentieren oder mit

% grep -1 AutoAddDevices /etc/X11/xorg.conf_hotplugging
Section "ServerFlags"
       Option "AutoAddDevices" "true"
EndSection

aktivieren.

Nun werden die Konfigurationseinträge für Mäuse bzw Tastaturen in der xorg.conf ignoriert und HAL übernimmt diese Aufgabe. Um HAL die Optionen aus der xorg.conf zu übergeben ist es nötig im Verzeichnis /etc/hal/fdi/policy/ eine *.fdi-Datei mit diesen zu erzeugen.

Beispiel einer fdi-Datei: IBM/Lenovo Thinkpad mit externer UltraNav-Tastatur

Die folgende fdi-Datei dient mir zur Konfiguration des Trackpoints, des Touchpads, der internen Tastatur und der externen Tastatur mit UltraNav (Trackpoint und Touchpad) bzw einer einfachen Logitech Notebookmaus.

% cat /etc/hal/fdi/policy/thinkpad.fdi
<?xml version="1.0" encoding="UTF-8"?>
<!--Comments may follow-->

<deviceinfo version="0.2">
 <device>
  <match key="info.product" string="TPPS/2 IBM TrackPoint">
   <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
   <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
   <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
   <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
  </match>
  <match key="info.capabilities" contains="input.keys">
   <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
   <merge key="input.x11_options.XkbModel" type="string">pc105</merge>
   <merge key="input.x11_options.XkbLayout" type="string">de</merge>
   <merge key="input.x11_options.XkbVariant" type="string">nodeadkeys</merge>
   <merge key="input.xkb.rules" type="string">xorg</merge>
   <merge key="input.xkb.model" type="string">pc105</merge>
   <merge key="input.xkb.layout" type="string">de</merge>
   <merge key="input.xkb.variant" type="string">nodeadkeys</merge>
  </match>
  <match key="info.capabilities" contains="input.touchpad">
   <merge key="input.x11_options.LeftEdge" type="string">1700</merge>
   <merge key="input.x11_options.RightEdge" type="string">5300</merge>
   <merge key="input.x11_options.TopEdge" type="string">1700</merge>
   <merge key="input.x11_options.BottomEdge" type="string">4200</merge>
   <merge key="input.x11_options.FingerLow" type="string">25</merge>
   <merge key="input.x11_options.FingerHigh" type="string">30</merge>
   <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
   <merge key="input.x11_options.MaxTapMove" type="string">220</merge>
   <merge key="input.x11_options.VertScrollData" type="string">100</merge>
   <merge key="input.x11_options.MinSpeed" type="string">0.06</merge>
   <merge key="input.x11_options.MaxSpeed" type="string">0.12</merge>
   <merge key="input.x11_options.AccelFactor" type="string">0.0010</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
   <merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
  </match>
  <match key="info.product" string="Synaptics Inc. Composite TouchPad / TrackPoint">
   <match key="info.udi" contains="/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if1_logicaldev_input">
    <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
    <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
    <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
    <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
    <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
   </match>
  </match>
 </device>
</deviceinfo>

Wie aus der Datei /etc/hal/fdi/policy/thinkpad.fdi ersichtlich können Optionen aus der xorg.conf einfach übernommen werden.

Erstellen einer fdi-Datei für HAL

Die folgenden Ausführungen stellen den Weg dar wie ich zu meiner funktionierenden fdi-Datei gekommen bin.

Welche Geräte kennt HAL

Zuerst war es nötig die Geräte zu finden um matches zu erzeugen. Hier hilft der Befehl:

% hal-find-by-capability --capability input | xargs -I{} hal-device {}

Schritte zur fdi-Datei für HAL

Als nächsten Schritt kann man daran gehen seine fdi-Datei nach folgenden Regeln zu erstellen

  • AutoAddDevices muß entweder per default oder manuell in der xorg.conf aktiviert sein.
  • xml-Deklaration und deviceinfo- bzw device-Tags in der neuen fdi-Datei einfügen.
  • matches finden und in fdi-Datei eintragen.
  • Optionen aus xorg.conf übernehmen und als key="input.x11_options.$OPTION_AUS_XORGCONF" mit dem type string als zB merge-Tag einfügen.
  • HAL neustarten.
  • Xorg neustarten.

Danach sollten Input-Hotplugging funktionieren.

Weiterführende Literatur

Update 4. Dez 2008

  • Typos und unnötige Option ZAxisMapping des Trackpoints entfernt.

Update März 2010

  • Auf aktuellen Debian unstable Systemen scheint die Methode Input-hotplugging und die dabei nötige Konfiguration der Geräte mit Hal vorzunehmen, nicht mehr zu funktionieren!
Tags:
9. Jän 2009

Iptables - Was tun wenn das Limit mit ip_conntrack trackbarer Verbindungen erreicht ist?

Auf Grund eines aktuellen Anlasses tauchte dieses Wochenende in einer Diskussion das Thema "Was tun wenn ip_conntrack nicht mehr alle Verbindungen verarbeiten kann?" bzw "Wie kann man es vermeiden, daß Pakete im connection tracking des Linux Kernels landen?" auf. Im Endeffekt zeigten sich zwei Lösungen, die dritte Möglichkeit, das vollständige Deaktivieren von ip_conntrack, fällt für mich nicht darunter. Da es sich in der Problemstellung um einen sehr stark frequentierten Webserver handelt, haben sich die Betrachtungen auf Port 80 konzentriert.

ip_conntracki/nf_conntrack - erhöhen von nf_conntrack_max

Als erste Lösung bietet sich ein erhöhen der möglichen Verbindungen an, doch scheint jede Verbindung rund 350 Byte an nonswapable Kernelspeicher zu verbrauchen und sollte man Verkehr auf Port 80 wie in unserem Fall nicht weiter filtern sondern nur auf das Target ACCEPT umleiten, bietet sich ja noch die Möglichkeit Port 80 vom tracking auszunehmen. Dies bringt uns zur zweiten Lösung.

NOTRACK - einzelne matches vom connection tracking ausnehmen

/!\ Die folgende Befehle greifen tief in das Regelwerk einer iptables basierten Firewall ein. Sie können möglicherweise bestehendes Regelwerk umgehen und sollte auf keinen Fall unreflektiert und ungetestet übernomen werden.

Iptables bietet das Target NOTRACK um ein Paket, bevor es im üblicherweise genutzten filter-table abgearbeitet wird, im raw-table mit dem state UNTRACKED zu markieren und so nicht in das connection tracking von ip_conntrack bzw nf_conntrack auf zunehmen. Hiefür ist es in unserem Fall notwendig im raw-table des PREROUTINGs uns OUTPUTs das Paket von und für Port 80 als UNTRACKED zu markieren und dann im filter-table alle als UNTRACKED markierten Pakete rechtzeitig zu behandelt.

Erstellen des raw-tables

Als Ausgangslage nehme ich erst einmal es existiert noch kein raw-table. Wir flushen das PREROUTING und den OUTPUT im raw-table und markieren alle Pakete von und für Port 80 als UNTRACKED bzw leiten sie nach NOTRACK um.

Zuerst für das PREROUTING: Alle Pakete für Port 80 (dport 80) sollen den state UNTRACKED erhalten.

# iptables -t raw -F PREROUTING
# iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK

Analog sollen alle Daten vom Webserver (sport 80) nicht getrackt werden.

# iptables -t raw -F OUTPUT
# iptables -t raw -A OUTPUT -p tcp --sport 80 -j NOTRACK

Obige iptables Befehle liefern folgenden raw-table.

# iptables -L -v -n -x --line-numbers -t raw
Chain PREROUTING (policy ACCEPT 15977 packets, 1286451 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 NOTRACK    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80

Chain OUTPUT (policy ACCEPT 33729 packets, 7534935 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 NOTRACK    tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:80

Hieraus wird auch ersichtlich man könnte das tracking bzw das Ausnehmen vom tracking fein granuliert einstellen. Doch um diese Pakete richtig zu behandeln sind noch Eingriffe in den filter-table notwendig.

Anpassen des filter-tables zur richtigen Behandlung von UNTRACKED markierten Paketen

Um jetzt auch alle als UNTRACKED markierten Pakete, in unserem Fall, alle Pakete von und für Port 80, rechtzeitig zu behandeln, könnten Regeln für Port 80 in den filter-table eingebaut werden, oder es könnte, weit eleganter, der Dummystate UNTRACKED genutzt werden um alle nicht getrackten Pakete, in unserem Fall, zu akzeptieren. Um die zu erreichten fügen wir an erster Stelle (-I) je eine Regel für INPUT und OUTPUT ein, die alle als state UNTRACKED markierten Pakete abfängt und an das Target ACCEPT umleitet.

# iptables -I INPUT -m state --state UNTRACKED -j ACCEPT
# iptables -I OUTPUT -m state --state UNTRACKED -j ACCEPT

Sieht man sich nun /proc/sys/net/ip_conntrack an sollten keine neuen Verbindungen auf Port 80 getrackt werden und die Limits von ip_conntrack bzw nf_conntrack nicht mehr überschritten werden.

Fazit

Wer das Target NOTRACK nutzen will, sollte sich im Klaren sein,daß er, auch wenn er durch Nutzung dieses Targets möglicherweise Speicher spart und an Performance gewinnt, viele komplexe Mechanismen zur Paketbehandlung an den UNTRACKED markierten Paketen verliert. Sollte bisher kein komplexes Regelwerk vorhanden sein, mag das Einführen des Targets NOTRACK verlocken erscheinen, jedoch erreichen die wenigstens Server Zugriffszahlen, die auch nur annähert, meiner Meinung nach, diesen Verzicht auf eine mögliche Nutzung von komplexen Regelwerk rechtfertigen.

Einer weiteren Konsequenz sollte man sich bewußt sein, alle auf ip_conntrack bzw nf_conntrack basierten Tools zur Verbindungsanalyse, wie zB iptstate zeigen die UNTRACKED markierten Verbindungen nicht mehr an, jedoch netstat bietet noch immer eine Möglichkeit auch diese Verbindungen zu analysieren.

Sollte man sich dafür entscheiden das Target NOTRACK zu nutzen bietet es einen eleganten Weg nur einen Teil der Pakete vor einer Behandlung durch komplexere Regeln auszunehmen.

Tags:
15. Dez 2008

POVRay 3.7 Beta expired - workaround

/!\ Die folgenden Ausführungen sind lediglich mit POVRay in den Versionen 3.7.beta.26 - 29 getestet, scheinen aber schon seit 3.7.0.beta.23 zu funktionieren /!\

Nachdem dieser Workaround schon seit einem Jahr¹ oder anders seit POVRay 3.7 Beta 23 existiert, aber scheinbar noch recht unbekannt ist, will ich ihn auch hier anbringen.

% povray foo.pov
povray: this pre-release version of POV-Ray for Unix has expired

POVRay Betas sind in ihrer Nutzungsdauer limitiert, damit Entwickler nur Bugreports zur aktuellen Version bekommen. Doch leider steht bei Ablauf dieser Frist meist noch keine neue Version der Beta zum download bereit. So wurden früher Systemzeiten manipuliert oder seit es den Sourcecode zu den Betas zum download gibt, dieser verändert, um die Nutzungsdauerlimitierung auszuhebeln. Doch zumindest seit povray 3.7 beta 23 stellen die Entwickler von POVRay eine Kommandozeilen Option zur Verfügung, die bei korrekter Nutzung die Laufzeit der Beta um bis zu einer Woche verlängert und das bis zu einem Jahr.

Workaround

  • POVRay mit der Option --betacode ausführen. Dieser Befehl liefert einen Zahlencode nach stderr.
  • den Zahlencode in der Environment-Variable POVRAY_BETA speichern.
  • POVRay noch bis zu einer weiteren Woche nutzen und das scheinbar bis zu einem Jahr :)

Oder noch komfortabler lässt sich dieser Workaround mit einem Zsh alias nutzen. (Annahme: POVRay sei nach /home/$user/pov_beta installiert)

% alias pov_old_3.7='export POVRAY_BETA=`${HOME}/pov_beta/bin/povray --betacode 2>&1`;${HOME}/pov_beta/bin/povray'

Nun kann POVRay durch den Aufruf des alias ganz normal genutzt werden.

% pov_old_3.7 foo.pov
povray: this pre-release version of POV-Ray for Unix expires in 1 day(s) and 13 hour(s)
Persistence of Vision(tm) Ray Tracer Version 3.7.0.beta.29 (g++ 4.3.1 @
 x86_64-unknown-linux-gnu)
This is an unofficial beta-test version compiled by:
    -----8<-----[ snipped ]----->8-----

{i} Weitere Informationen finden sich auf dem POVRay Newsserver ins besondere unter http://news.povray.org/povray.beta-test/thread/<476af506$1%40news.povray.org>/.

Tags:
11. Dez 2008

Animationen - Avis aus Png-Dateien erstellen

Um Animationen aus den einzelnen mit POVray generierten Bildern zu erstellen, kann man gifs mit Imagemagick erzeugen oder besser avis mit Mencoder. Damit aich den Aufruf hierfür auch nicht mehr vergesse:

% mencoder "mf://input???.png" -mf fps=25:type=png -ovc raw -o output.avi

Tags:
25. Sep 2008

awesome Version 3 - minimalistischer aber funktionsreicher WM - WIP

Achtung dieser Post bezieht sich auf awesome in der Version 3 bzw deren RCs

Als Beschreibung spricht die Manpage für sich.

NAME
       awesome - awesome window manager

---8<---

DESCRIPTION
       awesome is a window manager for X. It manages windows in different
       layouts, like floating or tiled. Either layout can be applied
       dynamically, optimizing the environment for the application in use and
       the task performed.

       In tiled layout, windows are managed in a master and stacking area. The
       master area contains the windows which currently need most attention,
       whereas the stacking area contains all other windows. In floating
       layout windows can be resized and moved freely. Dialog windows are
       always managed floating, regardless of the layout applied. The spiral
       and dwindle layout are special cases of the tiled layout where the
       stacking area is arranged in a spiral for the former or as a
       rectangular fractal for the later.

       Windows are grouped by tags. Each window can be tagged with one or
       multiple tags. Selecting certain tags displays all windows with these
       tags.

       awesome can contain small statusbars which can display anything you
       want: all available tags, the layout, the title of the visible windows,
       a text, etc.
---8<---

Zusammenfassend, die Tags entsprechen im großen und ganzen den virtuellen Desktops oder Workspaces der anderen WM, jedoch kann jedem dieser sein eigenes Layout zugewiesen werden. Weiters kann jedem Programm ein Defaulttag oder Defaultdesktop und ein Defaulterscheinungsbild zugewiesen werden. Bei Gimp kommt ja schwer ums floating Layout herum. So lassen sich auch im tiled Modus einzelne Anwendung mit Titelleiste wie gewohnt darstellen.

Neben der vielen Darstellungsformen besitzt awesome in der Standardkonfiguration noch eine Statusleiste mit einer Übersicht über die Tags, einem Teil für die unter dem aktuell angezeigten Tag laufenden Programmen, einer Uhr, einem Umschalter zwischen den einzelnen Layoutmodi und schlußendlich einem Systray der mit KDE Programmen wie Kontact, Korganizer und ähnlichen wunderbar zusammenarbeitet.

Customized Awesome

Datum und Uhrzeit besser lesbar

Awesome generiert, in der Datei rc.lua, in der Defaulteinstellung die Uhrzeit time_t in der Zeile

mytextbox.text = " " .. os.time() .. " time_t " 

in einem meiner Meinung nach unschönen Format, weiters wird die Zeit alle Sekunden aufgerufen, zwar nett, aber unnötig.

Ändert man diese Zeile in

mytextbox.text = " " .. os.time("%H:%M   %d. %b %y") .. " "

erhält man eine üblichere Variante der Zeit bzw Datumsangabe. Da die Zeit jetzt zB. als 13:12 02. Sep 08 erscheint, kann man auf das sekündliche Aufrufen in der Zeile

awful.hooks.timer.register(1, hook_timer)

verzichten und diese in

awful.hooks.timer.register(60, hook_timer)

ändern und somit nur mehr alle 60 Sekunden nach der Zeit zu fragen. Einziges Manko bei dieser Art der Reduzierungder Timeraufrufe ist, daß beim Starten von awesome bis zu einer Minute vergeht bis die Uhr angezeigt wird.

Tips um Unklarheiten zu vermeiden

Unterschiedlicher Zeichensatz zwischen Terminal und awesome Prompt (Mod4 + F1 oder F4)

Der awesome Prompt scheint die Variable LC_MESSAGES zu überprüfen, um zu entscheiden welcher Zeichensatz der richtige ist. Ich nutze zum Beispiel deutsche Zeichensätze nur LC_MESSAGES ist Englisch eingestellt um die Fehlermeldungen in Englisch zu erhalten, was das Suchen selbiger im WWW ungemein vereinfacht. Bei meiner Konfiguration habe ich somit das Problem das jede Anwendung überzuckert daß meine Tastatur deutsch ist und ich nur gewisse Fehlermeldungen auf Englisch erhalten will. Der awesome Prompt interpretiert dies aber als englische Tastatur wodurch die Verwirrung perfekt wird. Ein Verändern von LC_MESSAGES bringt Abhilfe, ist aber nicht die Lösung so wie ich sie mir vorstelle.

Fehlende oder zu ergänzende Features

Das einzige Feature, daß mir an awesome wirklich fehlt ist, eine Tastenkombination die

kfmclient openURL $EINGABE

aufruft. Damit ich wie aus KDE gewohnt mit Aufrufen wie leo:$SOME_WORD, gg:foo bar oder dbug:awesome schnell ohne zuvor konqueror zu starten Suchen mit zB. Leo, Google oder dem Debian Bugtracker durchführen kann.

Resümee

Wem die großen DEs immer weniger zusagen, kann in awesome, so man gerne einen Rechner mit Tastatur bedient, eine interessante Alternative finden. So Tastatur zentriert awesome auch erscheint, die üblichen mouse-only Tätigkeiten wie Surfen oder Bildbearbeitung, wenn nicht mit Imagemagick, lassen sich sehr einfach im floating Modus eben nur mit der Maus durchführen. Und sollte das nicht reichen, man kann ja mit lua gerne den WM erweitern.

Tags:
25. Sep 2008