Skip to content

mod_rewrite

Das mit dem mod-rewrite habe ich bisher nicht wirklich verstanden, sondern immer nur die Beispiele kopiert und gehofft, dass es funktioniert. Jetzt will ich aber alle domains in eine modx engine packen und muss mich wohl oder übel mit dem Problem beschäftigen.
Hier sammle ich meine Erkenntnisse:
Aus der Doku von mod_rewrite
The order of rules in the ruleset is important because the rewrite engine processes them in a particular (not always obvious) order, as follows: The rewrite engine loops through the rulesets (each ruleset being made up of RewriteRule directives, with or without RewriteConds), rule by rule. When a particular rule is matched, mod_rewrite also checks the corresponding conditions (RewriteCond directives). For historical reasons the conditions are given first, making the control flow a little bit long-winded.

Als erstes: Apache arbeitet die Zeilen in der .htaccess nicht von oben nach unten ab sondern sucht erst nach den Regeln und prüft dann ob Bedingungen dafür vorliegen.
Die Regel wird nach folgendem Muster erstellt:

CODE:
RewriteRule Pattern Substitution


Pattern ist dabei eine Zeichenfolge, die überprüft wird. Wenn es mit dem übergebenen Wert (der URL) eine Übereinstimmung gibt, wird in den Zeilen davor nach einer Bedingung gesucht. Dabei werden die Bedingungenl aber von oben nach unten abgearbeitet.

Wenn eine Bedingung verwendet werden soll muss diese folgendermaßen aussehen:

CODE:
RewriteCond TestString CondPattern


Teststring ist der Text, der überprüft werden soll. Durch Angabe von $N (0 <= N <= 9) wird die URL aus der Zeichenfolge (Pattern) der Regel (RewriteRule) verwendet. Wird %N (1 <= N <= 9) angegeben wird die Übergabe einer weiter oben liegenden Bedingung (RewriteCond) verwendet. Außerdem können RewriteMap oder Server-Variables wie z. B. HTTP_HOST oder PATH_INFO (Syntax: %{HTTP_HOST}) verwendet werden. Es muss also nicht zwingend die URL sein, die eine Bedingung erfüllt.
Wenn die Bedingung erfüllt ist, wird zu nächsten Bedingung gegangen. Es müssen also alle Bedingungen, die aufeinander folgen erfüllt sein (UND Verknüpfung). Die Bedingungen können auch durch OR miteinander verknüpft werden.
Wenn die Bedingungen erfüllt sind, wird der Pattern durch Substitution ersetzt.
Folgen mehrer Regeln hintereinander wird jeweils die Substitution der vorhergehenden Regel zum Pattern der nächsten.

CODE:
Text:
  .           Any single character
  [chars]     Character class: Any character of the class ``chars''
  [^chars]    Character class: Not a character of the class ``chars''
  text1|text2 Alternative: text1 or text2

Quantifiers:
  ?           0 or 1 occurrences of the preceding text
  *           0 or N occurrences of the preceding text (N > 0)
  +           1 or N occurrences of the preceding text (N > 1)

Grouping:
  (text)      Grouping of text
              (used either to set the borders of an alternative as above, or
              to make backreferences, where the Nth group can
              be referred to on the RHS of a RewriteRule as $N)

Anchors:
  ^           Start-of-line anchor
  $           End-of-line anchor

Escaping:
  \char       escape the given char
              (for instance, to specify the chars ".[]()" etc.)
Negation:
  !        to negate a pattern

lirc

seit Kernel 2.6.38 wurde das Modul lirc_i2c entfernt. Laut Heise: "Den Treiber "lirc_i2c" haben die Entwickler entfernt, weil der Treiber ir-kbd-i2c die gleiche Funktion offeriert. ".
Leider funktioniert das bei mir natürlich wieder einmal nicht so einfach. Während das alte Modul ein eigenes Device erzeugte und so direkt angesprochen werden konnte, wird jetzt mit dem Modul ir-kbd-i2c über Event-Tables zugegriffen:

CODE:
~$ dmesg |tail -n 4
Registered IR keymap rc-rc5-tv
input: i2c IR (Hauppauge) as /devices/virtual/rc/rc0/input4
rc0: i2c IR (Hauppauge) as /devices/virtual/rc/rc0
ir-kbd-i2c: i2c IR (Hauppauge) detected at i2c-0/0-0018/ir0 [bt878 #0 [sw]]

~$ tail -n 10 /proc/bus/input/devices
N: Name="i2c IR (Hauppauge)"
P: Phys=i2c-0/0-0018/ir0
S: Sysfs=/devices/virtual/rc/rc0/input4
U: Uniq=
H: Handlers=kbd event4 
B: PROP=0
B: EV=100013
B: KEY=afc302 2002805 0 0 0 4 18000 180 40000801 9e1680 0 800200 ffc

~$ sudo killall lircd
~$ sudo lircd --nodaemon -H devinput -d /dev/input/event4
lircd-0.8.7[17513]: config file contains no valid remote control definition
lircd-0.8.7[17513]: lircd(devinput) ready, using /var/run/lirc/lircd
lircd-0.8.7[17513]: accepted new client on /var/run/lirc/lircd
lircd-0.8.7[17513]: initializing '/dev/input/event4'
lircd-0.8.7[17513]: accepted new client on /var/run/lirc/lircd


Beim Start von irw in einem weiteren Terminal wird ausgegeben:

CODE:
lircd-0.8.7[17513]: accepted new client on /var/run/lirc/lircd
lircd-0.8.7[17513]: removed client

~$ ir-keytable 
Found /sys/class/rc/rc0/ (/dev/input/event4) with:
 Driver ir-kbd-i2c, table rc-rc5-tv
 Supported protocols: RC-5 
 Enabled protocols: RC-5
 Extra capabilities: <access denied> 

~$ sudo ir-keytable -a /etc/rc_maps.cfg
Old keytable cleared
Wrote 45 keycode(s) to driver 
Protocols changed to other


trotzdem geht es bisher nicht.

CODE:
~$ sudo modprobe -r ir_kbd_i2c
~$ dmesg |tail -n 2
23:23:44 lircd-0.8.7[22371] error reading '/dev/input/event4'
23:23:44 lircd-0.8.7[22371] closing '/dev/input/event4'

~$ sudo modprobe  ir_kbd_i2c     
~$ dmesg |tail -n 4
23:20:52 kernel Registered IR keymap rc-rc5-tv
23:20:52 kernel input: i2c IR (Hauppauge) as /devices/virtual/rc/rc1/input5
23:20:52 kernel rc1: i2c IR (Hauppauge) as /devices/virtual/rc/rc1
23:20:52 kernel ir-kbd-i2c: i2c IR (Hauppauge) _
    detected at i2c-0/0-0018/ir0 [bt878 #0 [sw]]

Screensaver GLText konfigurierbar machen

in Ubuntu KDE4 ist der Screensaver GLText nicht konfigurierbar bzw kann nur zwischen Systemzeit und Systeminformation gewählt werden. Von Haus hat der Screensaver aber noch weitere Einstellmöglichkeiten. Die folgende Konfigurationsdatei muss verändert werden:
CODE:
/usr/share/xscreensaver/config/gltext.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<screensaver name="gltext" _label="GLText">

  <command arg="-root"/>

  <number id="delay" type="slider" arg="-delay %"
          _label="Frame rate" _low-label="Low" _high-label="High"
          low="0" high="100000" default="20000"
          convert="invert"/>

  <select id="text">
    <option id="uname"  _label="Display system information" />
    <option id="clock"  _label="Display date and time"
            arg-set="-text '%A%n%d %b %Y%n%r'"/>
  </select>

  <hgroup>
  <select id="facing">
    <option id="front"   _label="Always face front"/>
    <option id="nofront" _label="Spin all the way around" arg-set="-no-front"/>
  </select>
  <boolean id="wander" _label="Wander" arg-unset="-no-wander"/>
  </hgroup>

  <select id="rotation">
    <option id="no"  _label="Don't rotate"               arg-set="-spin 0"/>
    <option id="x"   _label="Rotate around X axis"       arg-set="-spin X"/>
    <option id="y"   _label="Rotate around Y axis"       arg-set="-spin Y"/>
    <option id="z"   _label="Rotate around Z axis"       arg-set="-spin Z"/>
    <option id="xy"  _label="Rotate around X and Y axes" arg-set="-spin XY"/>
    <option id="xz"  _label="Rotate around X and Z axes" arg-set="-spin XZ"/>
    <option id="yz"  _label="Rotate around Y and Z axes" arg-set="-spin YZ"/>
    <option id="xyz" _label="Rotate around all three axes"/>
  </select>

  <boolean id="wire"    _label="Wireframe"              arg-set="-wireframe"/>
  <boolean id="showfps" _label="Show frame rate" arg-set="-fps"/>
<-- wird hier ergänzt-->
  <string id="text"    _label="Text"    arg="-text %"/>
  <file   id="program" _label="Program" arg="-program %"/>
<--bis hier-->
  <_description>
Displays a few lines of text spinning around in a solid 3D font.
The text can use strftime() escape codes to display the current 
date and time.

Written by Jamie Zawinski; 2001.
  </_description>
</screensaver>

würgaround plasmoid

Ich habe mit Hilfe von Python ein Plasmoid erstellt. Nach dieser Anleitung müssen sich die folgenden Dateien in einem Verzeichnis befinden, das wie das Plasmoid heißt:
/
/metadata.desktop
/contents/code/main.py
Im Unterverzeichnis / muss dann zunächst gepackt werden und anschließend installiert werden mit:
CODE:
zip -r ../<PlasmoidName>.zip .
plasmapkg -i ../<PlasmoidName>.zip
deeinstallieren: plasmapkg -r <PlasmoidName>

die verschiedenen Plasma-Datenquellen können im plasmaengineexplorer angezeigt werden.
Um ein superkarambatheme als plasmoid anzuzeigen muss es folgendermaßen installiert werden:
CODE:
plasmapkg --type=superkaramba -i Datei_Name.skz

Plasmoid über Bildschirmschoner

Unter KDE 4.4 lassen sich die Plasmoids nicht mehr über dem Bildschirmschoner anzeigen. dafür in der Datei /usr/share/kde4/config/plasma-overlayrc folgende Änderungen durchführen:
CODE:
[KDE Action Restrictions][$i]
plasma/allow_configure_when_locked=false

[Constraints]
FileDialog=false
LaunchApp=false

[General]
ExcludeCategories=Windows and Tasks,Application Launchers

ändern in:
CODE:
[KDE Action Restrictions][$i]
plasma/allow_configure_when_locked=false

[Constraints]
FileDialog=true
LaunchApp=true

[General]
ExcludeCategories=
;Windows and Tasks,Application Launchers


*.vdi kopieren/clonen

Um eine Kopie der virtuellen Maschine für VirualBox zu erstellen muss folgendes ausgeführt werden:
CODE:
VBoxManage clonevdi winXP.vdi winXP_Kopie.vdi

ein einfaches kopieren der Datei genügt nicht sondern führt zu einer Fehlermeldung

partition klonen

Um ein dist-upgrade vorher zu testen lege ich von der bestehenden Partition eine Kopie an. Dafür zunächst von einer Live-CD starten und von der bestehenden Partition ein Image anlegen:
CODE:
dd if=/dev/sda1 | gzip -9 > ~/image-sda1.img.gz 

anschließend verwende ich dieses Image um es auf eine andere Partition zu kopieren. Die Partition muss aber die gleiche Größe haben.
CODE:
gunzip -c ~/image-sda1.img.gz | dd of=/dev/sda4

Jetzt noch keinen Neustart vornehmen, da die Partitionen jetzt die gleiche UUID aufweisen und beim fdisk-Test dadurch ein Fehler erzeugt wird. Zuerst eine neue UUID für den Klon erzeugen mit:
CODE:
sudo tune2fs -U random /dev/sda4

Anschließend noch ein neues Label für die Partition angeben, um später Verwechslungen zu vermeiden:
CODE:
e2label /dev/sda4 newlabel


Virtualbox neuer Kernel

Nach der Installation eines neuen Kernels muss dieser in Virtualbox erst eingerichtet werden:
CODE:
~$ sudo /etc/init.d/vboxdrv setup
[sudo] password for lirio:
 <strong> Stopping VirtualBox kernel module vboxdrv                             [ OK ]
 </strong> Recompiling VirtualBox kernel module vboxdrv                          [ OK ]
 * Starting VirtualBox kernel module vboxdrv                             [ OK ]


Firefox und Adobe Reader 8 Plugin

Kleine Ursache große Wirkung. Jetzt habe ich doch gerade wirklich ewig gesucht um endlich pdf-dokumente in einem neuen Tab im Firefox öffnen zu können. Alle Hinweise bei ubuntuusers blieben erfolglos bzw. haben letzendlich das Chaos verursacht. Obwohl das Reader-Plugin in about:plugins gelistet war waren pdf-Dokumente bei den Mime-Types nicht vorhanden. Ein gut gemeinter Tipp versprach Abhilfe mit 'PDF Download 1.0.1.2'-Add-On. Das hat aber leider auch gar nichts geholfen. Letzendlich habe ich das Add-On wieder deinstalliert und den Reader über die Adobe-Seite heruntergeladen und neu installiert, aber leider ohne Erfolg. Die Lösung brachte ein Stöbern in about:config. dort gab es bei mir folgenden Eintrag:
CODE:
 Plugin.disable_full_page_plugin_for_types 
- vom Benutzer festgelegt - string - application/pdf 

diesen Eintrag mit Rechtsclick zurücksetzen und schon öffnet sich ein PDF-Dokument so wie gewünscht in einem neuen Fenster. Diesen Hinweis habe ich bei linux-club.de gefunden

Anrufe protokollieren

Es gibt ein Java-basiertes Toll, das alle Anrufe am S0-Bus über eine ISDN-Card protokolliert. Der PowerISDNMonitor bietet sogar die Möglichkeit die Adressen der anrufenden über das Netz mit anzeigen zu lassen. Starten ließ sich der Monitor problemlos. Leider wurde bei mir gar nichts gelogt. Im Forum bin ich aber auf die Lösung gestoßen. Es fehlte lediglich der Softlink auf libcapi20.so. mit
CODE:
ln -s /usr/lib/libcapi20.so.3 /usr/lib/libcapi20.so.2

läuft der Monitor jetzt. Jetzt muss nur noch einer anrufen ;-)

AVM FRITZ!Card

zunächst die Module laden mit
CODE:
modprobe capi
modprobe capidrv

die hisax module entfernen mit
CODE:
~$ sudo modprobe -r hisax_isac
~$ sudo modprobe -r hisax

dann ergeben sich folgende Module:
CODE:
~$ lsmod | grep capi*
capidrv                30996  1
capi                   18880  0
capifs                  6792  2 capi
isdn                  140384  1 capidrv
kernelcapi             41172  3 capidrv,capi,fcpci

als nächstes isdnlog:
CODE:
apt-get install isdnlog
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Reading state information... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  isdnlog-data isdnutils-base
Vorgeschlagene Pakete:
  ipppd isdnutils-doc isdnutils-xtools isdnvboxserver isdnvboxclient
Die folgenden NEUEN Pakete werden installiert:
  isdnlog isdnlog-data isdnutils-base
0 aktualisiert, 3 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 1363kB von 1517kB Archiven geholt werden.
Nach dem Auspacken werden 4325kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]?

konqueror als Standard

Um in KDE Konqueror wieder als Standard zu verwenden:
Klar geht: Konqueror -> Einstellungen -> Konqueror einrichten -> Dateizuordnung. Dann gibt es unter "inode" den Eintrag "directory". Diesen Aklicken und Rechts in der Rangfolge Konqueror ganz nach oben schieben.