Mittwoch, 7. November 2007

Sprache bei Ubuntu/Gutsy ändern

Ich sag's ja, wenn man Windows-Administratoren Linux-Maschinen installieren lässt: bei der Installation "Englisch" als Sprache ausgewählt! Klar, unter Windows macht man das so, damit man die Updates früher bekommt, bzw. damit Dritt-Software überhaupt funktioniert. Also die Sprache umstellen. Der altbekannte Weg

sudo dpkg-reconfigure localeconf

funktionierte unter Feisty, aber unter Gutsy nicht mehr. Hier muss man händisch die Datei

/etc/default/locale

Folgendes eintragen:

LANG="de_DE.UTF-8"

noch das Sprachpaket installieren:

sudo apt-get install language-pack-de

dann das altbewährte

sudo dpkg-reconfigure locales

und schon hat man nach einem Relogin alles auf Deutsch. Genauer beschrieben ist es hier:

http://wiki.ubuntuusers.de/Spracheinstellungen

Donnerstag, 1. November 2007

nVidia Netzwerkkarten, Hibernate/Suspend und fehlende Netzwerkkonfiguration

Ich habe einen nVidia Corporation CK8S Ethernet Controller auf meinem Asus Board. Nach einem Suspend erhält die Karte keine IP-Adresse mehr. Den Grund dafür liefert ein dmesg:

0000:00:05.0: Invalid Mac address detected: 71:4a:28:d8:11:00
Please complain to your hardware vendor. Switching to a random MAC.

Bzw ein ifconfig, der nach jedem Suspend/Resume-Zyklus eine neue Netzwerkkarte (eth1, eth2 usw) anzeigt.

Aha: nach jedem Resume wechselt die MAC-Adresse, woraufhin mein Ubuntu von einer neuen Netzwerkkarte ausgeht. Ein Blick in /etc/udev/rules.d/70-persistent-net.rules zeigt auch das ganze Ausmaß der Katastrophe: viele Einträge mit unterschiedlichen MAC-Adressen. Laut einem Forums-Post handelt es sich hier um "reversed IP-address", was man im BIOS abstellen kann. Wer keine entsprechende Option findet, oder wie ich keine Lust hat, den Rechner neu zu starten, der stellt seine Netzwerkkonfiguration von MAC-Adresse auf PCI-Adresse um: die korrekte PCI-Adresse steht in der dmesg-Ausgabe; alternativ kann man auch die Ausgabe von lspci für die Netzwerkkarte verwenden und "0000:" davor schreiben (wer hat schon mehrere PCI-Busse installiert?). Dann passt man die Datei

/etc/udev/rules.d/70-persistent-net.rules

an, indem man den Eintrag

SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:11:d8:28:4a:71", NAME="eth0"

durch

SUBSYSTEM=="net", DRIVERS=="?*", ID=="0000:00:05.0", NAME="eth0"

ersetzt, wobei natürlich die passende ID einzutragen ist. Danach klappt es dann auch mit dem Netzwerk nach einem Resume.

Dienstag, 30. Oktober 2007

VirtualBox Shared Folder

Die VirtualBox ist eine gute Alternative zu VMware & Co, die zudem unter der GPL steht. Recht praktisch sind die "Shared Folder", mit denen man ein Verzeichnis des Gastgebes freigeben und vom Gast aus zugreifen kann. Realisiert ist das für Windows als CIFS-Freigabe. Leider bekommt man leicht eine Meldung in der Art "Fehler 67" Name nicht gefunden. Die Ursache hierfür ist sind fehlende oder falsch installierte Gasterweiterungen. Mir ist es passiert, dass ich eine Virtuelle Maschine unter Linux mit Version 1.5.0 installiert habe und dann unter MacOS X mit Version 1.4 nutzen wollte und eben diesen Fehler erhielt. Zur Lösung habe ich die Gasterweiterungen deinstalliert

  • mit "regedit" im magischen "Run"-Verzeichnis das Starten der Gasterweiterungen entfernt
  • kurzfristig den Grafikkartentreiber umgestellt und beim obligatorischen Reboot dann die automatische Hardwareerkennung abgebrochen habe
  • die Dateien aus C:\Programme und C:\Windows\System32 gelöscht (alles mit "innoprakt" und "vbox" im Namen)
Danach kann man die restlichen Dateien entfernen und die älteren Gasterweiterungen installieren. Und schon klappt auch das

net use x: \\vboxsvr\share

Auf JBoss von Außen zugreifen

JBoss lauscht von Hause aus auf der lokalen Adresse, spricht 127.0.0.1. Will man über das Netzwerk darauf zugreifen, muss man ihn mit

run.sh -b

starten, wobei man auch

run.sh -b 0.0.0.0

angeben kann, dann akzeptiert er Verbindungen auf allen Adressen. Auf meinem Ubuntu kam es aber dazu, dass der InvokerLocator noch auf 127.0.0.1:3873 lauschte, was sich so zeigt:

> netstat -ln | grep 3873
tcp 0 0 127.0.1.1:3873 0.0.0.0:* LISTEN

bzw. auf dem Client durch diese Exception:

org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.1.1:3873/]

Durch sehr genaues Hinschauen merkt man, dass dort 127.0.1.1 steht, was einen dazu bringt, man in der Datei /etc/hosts nachzusehen:

127.0.1.1 ubuntu

und da hat man den Schuldigen gefunden: JBoss bestimmt den Namen, unter dem er erreichbar zu sein glaubt und lauscht nur auf dieser Adresse. Trägt man hier die richtige eigene Adresse ein, am besten mit dem kompletten Namen, dann funktioniert es auch, also beispielsweise

192.168.1.31 ubuntu.local

Montag, 22. Oktober 2007

JDK 1.3.1 unter Feisty/Gutsy

Installiert man das Sun JDK 1.3.1 unter Ubuntu/Feisty oder Gutsy, so erhält man beim Starten folgende Fehlermeldung:

/opt/jdk1.3.1_20/bin/i386/native_threads/java: error while loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory

weil die entsprechende LibC nicht mehr unter diesem Namen verfügbar ist (das mit den unterschiedlichen inkompatiblen (G)LIBC-Versionen hab ich eh noch nie verstanden). Das Problem lässt sich glücklicherweise mit 3 Befehlen beheben:

sudo apt-get install libstdc++2.10-glibc2.2
cd /usr/lib
sudo ln -s libstdc++-3-libc6.2-2-2.10.0.so libstdc++-libc6.1-1.so.2

Danach klappt es auch wieder mit dem Java:

/opt/jdk1.3.1_20/bin/java -version
java version "1.3.1_20"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_20-b03)
Java HotSpot(TM) Client VM (build 1.3.1_20-b03, mixed mode)

Montag, 9. Juli 2007

Maven-Archiva zum Laufen bringen

Archiva erlaubt es, einen zentralen Server für JAR-Dateien aufzusetzen, der von Maven verwendet wird. Es arbeitet als Caching-Proxy, so dass die Pakete nur einmal heruntergeladen werden müssen. Ebenso können damit die intern erstellten Pakete leicht für alle Entwickler zugängig gemacht werden.

Bei der Installation bin ich über mehrere Probleme gestolpert:

Port ändern
Der Port steht in der Datei apps/archiva/conf/application.xml; diese Datei existiert erst nach dem Auspacken der JAR-Datei, was beim ersten Start passiert.

Authentisierung notwendig
Archiva wollte unbedingt Benutzername und Passwort haben. Nachdem ich im User Management dem Guest die Rolle Global Repository Observer gab, ging es auch ohne.

Keine Downloads
Archiva wollte partout keine Pakete runterladen. Nachdem ich bei beiden Proxy Connectors der Whitelist ein **/** hinzugefügt hatte, ging es.


Jetzt kämpfe ich nur noch damit, dass das Eclipse-Plugin die Einstellungen ignoriert und direkt auf das central-Repository zugreift.

Mittwoch, 27. Juni 2007

Umlaute mit Kopete und ICQ

Schon länger hat mich geärgert, dass mein Kopete bei ICQ die Umlaut als chinesische Zeichen darstellt. Da ich gerade in Bahrain auf den verspäteten Flieger warte, habe ich Zeit gefunden, nach einer Lösung zu suchen; und diese war überraschend einfach: in den Zugangs-Einstellungen zu ICQ die "Standardkodierung für Nachrichten" auf "ISO-8859-15" stellen.

Mittwoch, 20. Juni 2007

Cisco VPN client unter Linux

Viele Unternehmen verwenden den Cisco VPN Client, um den verschlüsselten Zugriff auf ihr Netzwerk zu erlauben. Es gibt hierfür zwar einen Linux-Client, aber den hab ich nicht zum Laufen gebracht. Viel besser ist VPNC von den Jungs aus Kaiserslautern, das beim aktuellen Ubuntu enthalten ist.

Die Installation gestaltet sich sehr einfach: zuerst mit dem mitgelieferten Programm pcf2vpnc die .PCF-Datei konvertieren:

/usr/share/vpnc/pcf2vpnc vpn.pcf > vpn.conf

und dann den Zugang starten, wobei der vollständige Pfad zur Konfigurationsdatei angegeben werden muss:

sudo vpnc $PWD/vpn.conf

Wer die Passwörter nicht jedes Mal eintippen will, kann sie auch in der Konfigurationsdatei hinterlegen:

Xauth username Benutzername
Xauth password Passwort

Sehr praktisch sind auch die Optionen Target network und DNSUpdate: damit kann man das VPN auf bestimmte IPs oder IP-Bereiche einschränken sowie das Umstellen des DNS verhindern:

Target networks 192.168.1.17/32 192.168.2.0/24
DNSUpdate no

Richtig konfiguriert hat man damit eine reine Punkt-zu-Punkt-Verbindung zu den Zielrechnern und hat nicht mehr die Einränkungen eines deaktivierten "Allow Local LAN Access".

Sonntag, 17. Juni 2007

Derby und OutOfMemoryError

Nachdem ich heute wieder mal mehrere Stunden im Derby rumgewühlt habe, hab ich Folgendes zum Derby-Cache gefunden:

"Derby autotunes the database pagesize. If you have long columns, the default pagesize for the table is set to 32K. Otherwise, the default is 4K."

"long columns" sind beispielsweise VARCHAR(32000). Die Standard-Cachegröße ist 1.000 Pages, damit belegt Derby konkret 32MB für seinen Cache, nicht schlecht wenn man bedenkt, dass die JVM standardmäßig nur 64MB hat. Die Folge ist oftmals diese Fehlermeldung:

Exception in thread "main" java.sql.SQLException: Java exception: 'Java heap space: java.lang.OutOfMemoryError'.

Netterweise ist dieser Satz nicht bei den entsprechenden Konfigurationsoptionen - dort steht "Default: 4096" - sondern auf der Seite "Performance trade-offs of large pages". Da guckt man natürlich nicht direkt rein, wenn man die Seitengröße gar nicht ändern will.

Zum Ändern der Seitengröße muss man diese Properties beim Programmstart setzen (hier mit den Standardwerten), wobei die Seitengrölße vor einem CREATE TABLE bzw. CREATE INDEX bereits gesetzt sein muss.

System.setProperty("derby.storage.pageCacheSize", "1000");
System.setProperty("derby.storage.pageSize", "4096");

geht natürlich auch über -Dderby.storage.pageCacheSize=1000 bzw. -Dderby.storage.pageSize=4096 beim Aufruf der JVM.

Freitag, 15. Juni 2007

Skype-Startprobleme

Testweise hatte ich die Windows-Version von Skype unter Linux mit Wine installiert, leider nur mit mäßigem Erfolg. Statt es sauber zu deinstallieren, habe ich das Installationsverzeichnis einfach gelöscht. Danach konnte ich mein (Linux-)Skype unter KDE nicht mehr über «Befehl ausführen» starten. Nach einigem Suchen bin auf in den Grund hierfür in der Datei .xsession-errors gestoßen:

wine: cannot find 'C:\Programme\Skype\Skype.exe'

Mein KDE wollte also lieber die Wine-Version als die Linux-Version starten. Der Grund hierfür lag in der Datei

~/.local/share/applications/wine/Programme/Skype/Skype.desktop

die eine FreeDesktop-Konforme Verknüpfung zu einem Programm darstellt. Nachdem ich die Datei gelöscht habe, startet (Linux-)Skype wieder problemlos.

Samstag, 9. Juni 2007

Cursor kaputt mit neuem FGLRX-Treiber

Nach dem Update auf Version 8.37.6 des FGLRX-Treibers für meine Radeon Mobility X1400 funktionierte Xinerama nicht mehr: Der Mauszeiger auf dem zweiten Bildschirm erschien als ein Block aus uninitialisiertem Speicher. Eine Umstellung auf "SwCursor" hatte den bekannten Fehler zur Folge, dass beim Scrollen oder Klicken auf einen Link der vorherige Inhalt unter dem Cursor über den neuen Inhalt gezeichnet wurde und damit die Ausgabe stark störte. Abhilfe schaffte ein Downgrade auf Version 8.36.5, die aktuellste funktionierende Version.

Freitag, 8. Juni 2007

Zertifikatsverwandlung

Zum verschlüsselten Zugriff auf Webseiten wird SSL verwendet. Für eine sichere Verbindung ist es notwendig zu wissen, ob man die korrekten Schlüssel verwendet, oder ob diese auf dem Web zum Browser verändert wurden. Dies wird über Zertifikate geregelt, die die Authentizität eines Schlüssels gewährleisten. Die Zertifikate selbst müssen jedoch auch authentisiert werden, womit sich ein Henne-Ei-Problem stellt. Aus diesem Grund kommen alle Browser mit einer vorinstallierten Liste von SSL-Zertifikaten daher, die zu unterschiedlichen Firmen gehören. Diese bestätigen - gegen Zahlung eines entsprechenden Obulus - die Echtheit eines SSL-Schlüssels.

Wer das Geld sparen will, erzeugt sein eigenes Zertifikat und importiert dies in seinen Browser. Um die Sache nicht zu einfach zu machen, gibt es mehrere Formate für Schlüssel: PEM, DER, Netscape und PKCS #12. Konqueror ist in der Lage, alle Formate zu importieren, aber Firefox besteht darauf, ein PKCS #12 Zertifikat zu erhalten. Hat man nur ein PEM-Zertifikat, so muss man dieses konvertieren. Dies geht mit Hilfe von OpenSSL, das üblicherweise bei einer Linux-Distribution enthalten ist:

openssl pkcs12 -nokeys -export -in z.pem -out z.p12

Hierbei wird man nach einem Password gefragt, das man frei wählen kann und beim Importieren wieder angeben muss. Die Option -nokeys unterbindet das Schreiben der geheimen Schlüssel, die man bei einem SSL-Zertifikat üblicherweise nicht hat. Will man ein Zertifikat für einen Server konvertieren, das den geheimen Schlüssel enthält, so lässt man die Option weg.

Donnerstag, 7. Juni 2007

Alles kontrollieren

Gestern bin ich über ein nettes Programm gestolpert: Synergy. Damit kann man eine beliebige Zahl an Rechnern - Linux (bzw. jedes Unix), MacOS X und Windows - mittels einer Tastatur und Maus bedienen. Man braucht lediglich auf jedem Rechner die Software zu starten und dann die Monitorpositionen zu definieren, d.h. wo die Maus hin soll, wenn man auf jedem Rechner jeweils nach oben, unten, rechts und links aus dem Bildschirmfenster rausgeht. Es ähnelt damit x2vnc und x2x, die allerdings nur zwei Rechner fern steuern können. Die Definition der Monitorpositionen ist noch etwas hakelig, aber in der Praxis hat man meistens die Monitore nebeneinander stehen, so dass es recht einfach ist, die dazu passenden Werte einzutragen. Zudem kann man die gleiche Konfigurationsdatei auf allen Maschinen verwenden - sofern diese sich über die Rechnernamen einig sind - und kann deshalb das für einen selbst einfachste Konfigurationsprogramm - zur Zeit nur für Windows und Linux - verwenden.

Mittwoch, 6. Juni 2007

Webentwickler im Himmel

Als Webseiten-Schreiber muss oder zumindest sollte man seine Seiten mit möglichst vielen Browsern und vor allem Browserversionen testen, ob sie überall korrekt angezeigt werden. Mit Firefox/Mozilla/Netscape & Co ist das kein Problem - mehrere Versionen können gleichzeitig installiert sein. Vom InternetExplorer ist jedoch immer nur eine Version installierbar. Deshalb verwenden mache Web-Entwickler mehrere PCs oder VMWare mit unterschiedlichen Versionen, was natürlich nicht sonderlich komfortabel ist, aber so hat es Microsoft eben bestimmt. Dank der überlegenen Macht von Linux ist es jedoch möglich, mehrere IEs auf dem gleichen Rechner zu betreiben: einfach IEs4Linux verwenden, IE 5.01, 5.5 und 6 installieren und gleichzeitig verwenden:

Dienstag, 5. Juni 2007

Zeitsprünge

Betreibt man VMWare auf einem Rechner mit variabler Prozessorgeschwindigkeit (Intel SpeedStep, AMD PowerNow oder Cool'n'Quiet), dann kommt das Gastbetriebssystem innerhalb der VMWare außer Tritt und lässt die Uhr mal schneller, mal langsamer laufen, je nachdem, welche Geschwindigkeit der Prozessor gerade hat. Eine Lösung des Problems findet sich auf den VMWare-Seiten: zuerst muss man die maximale Geschwindigkeit des eigenen Prozessors herausfinden, beispielsweise so:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

danach trägt man diese Zahl zusammen mit zwei weiteren Parametern in die Datei /etc/vmware/config ein:

host.cpukHz = "1833000"
host.noTSC = "TRUE"
ptsc.noTSC = "TRUE"

Zusätzlich sollte man in den VMWare-Tools noch die automatische Zeitsynchronisation aktivieren - damit wird jede Minute die Uhr nachgestellt.

Masquerading ist veraltet

Wer wie ich mit Kernel 1.0 groß geworden ist, der hat mehrere Änderungen des Linux-Firewallcodes mitgemacht. Der letzte Stand war bei mir, dass man Masquerading über

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

einrichtet. Das ist natürlich immer noch so, aber wenn man eine statische IP-Adresse hat, dann wird eine andere Vorgehensweise empfohlen. Insbesondere wenn man mit virtuellen IP-Adressen arbeitet, also mehrere Adresse auf einem Interface definiert hat und man nicht die Haupt-IP-Adresse verwenden will, dann muss man statt MASQUERADE das Target SAME verwenden:

ifconfig eth0:0 192.168.0.1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.0.1

und schon erhalten alle maskierten Pakete die IP-Adresse des virtuellen Interfaces.

Samstag, 2. Juni 2007

Netzwerkkarte für VMWare-Bridging auswählen

Hat man mehrere Netzwerkschnittstellen und will man VMWare im Bridging-Modus verwenden, muss man die zu verwendende Netzwerkkarte einstellen. Diese Information speichert VMWare in der Datei /etc/vmware/locations im seltsamen Format:

answer VNET_0_INTERFACE wlan0

Wem das zu abenteuerlich ist, der muss bei der Konfiguration des Netzwerkes über vmware-config.pl statt den "wizard" den "editor" verwenden und kann dort dann die Schnittstelle angeben.

VMWare unter Ubuntu/Feisty

VMWare 5.5.x läuft nicht ohne Weiteres unter Kernel 2.6.20, da die Kernel-Module nicht mehr kompilieren:

Using 2.6.x kernel build system.
make: Gehe in Verzeichnis '/tmp/vmware-config0/vmmon-only'
make -C /lib/modules/2.6.20-16-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Betrete Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
In file included from /tmp/vmware-config0/vmmon-only/linux/driver.c:80:
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »compat_exit«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Fehler: expected declaration specifiers or »...« before »exit_code«
/tmp/vmware-config0/vmmon-only/./include/compat_kernel.h:21: Warnung: »int« ist Standardtyp in Deklaration von »_syscall1«
make[2]: *** [/tmp/vmware-config0/vmmon-only/linux/driver.o] Fehler 1
make[1]: *** [_module_/tmp/vmware-config0/vmmon-only] Fehler 2
make[1]: Verlasse Verzeichnis '/usr/src/linux-headers-2.6.20-16-generic'
make: *** [vmmon.ko] Fehler 2
make: Verlasse Verzeichnis '/tmp/vmware-config0/vmmon-only'
Unable to build the vmmon module.

Eine Anleitung, wie man es zum Laufen bekommt, findet man unter http://kb.barnoid.com/?p=18: eine tar-Datei auspacken, eine Datei drin ändern und wieder einpacken - dann geht es.

Freitag, 1. Juni 2007

Fglrx und Xinerama

Nachdem sich der Flachbildschirm etwas gewehrt hat, habe ich ihn doch zusammen mit dem Laptop-Schirm an den Start bekommen. Kurze Eckdaten: Toshiba A7 mit Radeon X1400, 1280x800 Pixel und ein Dell Bildschirm mit 1280x1024. Hier ist meine /etc/X11/xorg.conf:

Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "aticonfig-Screen[0]" 0 0
Screen "aticonfig-Screen[1]" RightOf "aticonfig-Screen[0]"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Synaptics Touchpad"
EndSection

Section "Files"

# path to defoma fonts
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

Section "Module"
Load "bitmap"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "vbe"
EndSection

Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "de"
Option "XkbVariant" "nodeadkeys"
EndSection

Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "true"
EndSection

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizScrollDelta" "0"
EndSection

Section "Monitor"
Identifier "Standardbildschirm"
Option "DPMS"
EndSection

Section "Monitor"
Identifier "aticonfig-Monitor[0]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection

Section "Monitor"
Identifier "aticonfig-Monitor[1]"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection

Section "Device"
Identifier "ATI RADEON X1400"
Driver "ati"
BusID "PCI:1:0:0"
EndSection

Section "Device"
Identifier "aticonfig-Device[0]"
Driver "fglrx"
Option "EnableMonitor" "lvds,tmds1"
Option "PairModes" ""
BusID "PCI:1:0:0"
EndSection

Section "Device"
Identifier "aticonfig-Device[1]"
Driver "fglrx"
BusID "PCI:1:0:0"
Screen 1
EndSection

Section "Screen"
Identifier "Default Screen"
Device "ATI RADEON X1400"
Monitor "Standardbildschirm"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x800" "1024x768" "800x600" "640x480"
EndSubSection
EndSection

Section "Screen"
Identifier "aticonfig-Screen[0]"
Device "aticonfig-Device[0]"
Monitor "aticonfig-Monitor[0]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800"
EndSubSection
EndSection

Section "Screen"
Identifier "aticonfig-Screen[1]"
Device "aticonfig-Device[1]"
Monitor "aticonfig-Monitor[1]"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x1024"
EndSubSection
EndSection

Section "ServerFlags"
Option "Xinerama" "true"
EndSection

Section "DRI"
Mode 0666
EndSection

Section "Extensions"
Option "Composite" "Disable"
EndSection

Donnerstag, 31. Mai 2007

Edimax EW7318USG unter Ubuntu

Da die WLAN-Netzwerkkarte in meinem Notebook den Geist aufgegeben hat, muss ich momentan auf eine externe USB-Karte zurückgreifen, und zwar auf eine Edimax EW7318USG. Hierbei handelt es sich um ein OEM-Produkt, in dem eine RALink RT73 Karte steckt, wie einem lsusb verrät:

148f:2573 Ralink Technology, Corp.

Die Treiber hierfür findet man beim rt2x00-Projekt. Unter http://forum.ubuntuusers.de/topic/74093/ findet man eine Anleitung, wie das ganze einzurichten ist. Allerdings muss man mittlerweile den Namen rausb0 durch wlan0 ersetzen und die Firmware wird automatisch nach /lib/firmware kopiert, man muss dies also nicht mehr selbst machen. Hier nochmal zum Mitschreiben, wie man es zum Laufen bekommt:

1. Treiber runterladen und kompilieren

wget http://rt2x00.serialmonkey.com/rt73-cvs-daily.tar.gz
tar xvzf rt73-cvs-daily.tar.gz
cd rt73-cvs-*/Module
make
sudo make install

2. Alte Treiber deaktivieren

sudo vi /etc/modprobe.d/blacklist (wem der VI zu exotisch ist, der verwende stattdessen nano)

und dort am Ende die folgenden Zeilen einfügen:

blacklist rt73usb
blacklist rt2x00lib
blacklist rt2570

3. Schnittstelle eintragen

In der Datei /etc/network/interfaces Folgendes eintragen:

auto wlan0
iface wlan0 inet dhcp
pre-up ifconfig wlan0 up
pre-up ifconfig wlan0 down
pre-up ifconfig wlan0 up
pre-up iwconfig wlan0 essid "Meine ESSID"
pre-up iwconfig wlan0 key "s:MeinPasswort"
pre-up iwconfig wlan0 mode Managed
pre-up ifconfig wlan0 up

Wer kein DHCP hat, der muss hier natürlich dhcp durch static ersetzen und die Adressen eintragen, aber wer macht das schon?

Damit sollte das Ganze beim Booten funktionieren. Wer es gleich ausprobieren möchte, der sollte zuerst mit

lsusb | grep rt

nachsehen, welche Treiber bereits geladen sind und diese mit modprobe -r Modulname erst entfernen. Dann den Adapter einstecken und mit iwconfig nachsehen, ob er richtig funktioniert:

wlan0 RT73 WLAN ESSID:"Meine ESSID"
Mode:Managed Frequency=2.462 GHz Access Point: 00:14:7F:22:4C:9F
Bit Rate=54 Mb/s
RTS thr:off Fragment thr:off
Encryption key:DEAD-BEEF-DEAD-BEEF-DEAD-BEEF-FF
Link Quality=100/100 Signal level:-38 dBm Noise level:-79 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Ja, das sind gerade mal 30cm zwischen Basisstation und Empfänger. Wer beim händischen Ausprobieren eine Meldung

Error for wireless request "Set ESSID" (8B1A) :
SET failed on device rausb0 ; Network is down.

erhält, der sollte ein

ifconfig wlan0 up

ausführen, dann klappt es.

Montag, 21. Mai 2007

Maven den Download abgewöhnen

Wenn man eigene Jar-Dateien in Maven einbaut, so soll man laut Dokumentation dies folgendermaßen machen:

mvn install:install-file -DgroupId=org.hibernate -DartifactId=hibernate-all -Dversion=3.2 -Dpackaging=jar -Dfile=hibernate-all-3.2.jar

Bei dieser Variante versucht Maven jedoch bei jedem Compilieren die entsprechende POM-Datei herunterzuladen:

Downloading: http://repo1.maven.org/maven2/org/hibernate/hibernate-all/3.2/hibernate-all-3.2.pom

Dies verhindert man, indem man dem "install:install-file"-Aufruf noch die Option "-DgeneratePom=true" hinzufügt. Damit wird eine entsprechende POM-Datei erzeugt und es erfolgen keine Downloads mehr.

Sonntag, 20. Mai 2007

Hibernate, MySQL und Microsoft Access

Verwendet man bei Hibernate als ID-Definition dies

<id name="id">
<generator class="hilo"/>
</id>

so erzeugt Hibernate hierfür automatisch BIGINT(20) Spalten, wenn MySQL verwendet wird. Diese funktionieren nicht im Microsoft Access auf Grund eines bekannten und bisher nicht behobenen Fehlers:

"The Microsoft Jet database engine incorrectly maps the BigInt data type to a Binary data type."

will man trotzdem Microsoft Access verwenden, muss man den Typ der Spalte manuell auf etwas ändern, mit dem Access klar kommt:

ALTER TABLE CHANGE COLUMN id id INT(10) NOT NULL AUTO_INCREMENT;

ATI FGLRX 8.35.5 und Kernel 2.6.20

Der ATI/AMD-Treiber für meine Radeon X1400 kompiliert nicht mit dem aktuellen Kernel 2.6.20, der bei Ubuntu/Feisty 7.04 dabei ist. Glücklicherweise gibt es einen Patch, der das Problem behebt. Hierzu muss man als root (sudo -i) Folgendes machen:

cd /usr/src/
mv fglrx.tar.bz2 fglrx-orig.tar.bz2
mkdir l
cd l
tar xvjf ../fglrx-orig.tar.bz2
cd modules/fglrx/
patch -p0 < ~kurt/Desktop/fglrx-8.35.5-for-2.6.20.patch
cd ../..
tar cvjf ../fglrx.tar.bz2 modules
cd ..
rm -rf l

und schon kann man mit 'm-a' das Paket kompilieren.

Donnerstag, 17. Mai 2007

KDEnlive (fast) besiegt

KDEnlive ist eine nette KDE-Anwendung zur Video-Bearbeitung. Leider habe ich keine aktuellen Pakete für mein (K)Ubuntu/Feisty 7.04 gefunden, also die SVN-Version runterladen und selber kompilieren. KDEnlive ist ein hervorragendes Beispiels für die GNU-Autotools-Hölle und mag nicht kompilieren:

possibly undefined macro: AM_INIT_AUTOMAKE

Mit etwas Gewalt kann man es aber überzeugen, doch zu kompilieren:

AUTOM4TE=/usr/bin/autom4te AUTOCONF=/usr/bin/autoconf2.50 AUTOHEADER=/usr/bin/autoheader2.50 AUTOMAKE=/usr/bin/automake-1.9 make -f Makefile.cvs

Danach ist es eigentlich recht langweilig, denn ein einfaches

dpkg-buildpackage -rfakeroot

Erzeugt die gewünschten Pakete. Wenn man die installiert klappt alles so lange gut, bis man versucht ein gespeichertes Projekt zu laden. Dann gibt es das hier:

(gdb) bt
#0 0x00000000 in ?? ()
#1 0xb7ec22cc in Mlt::Producer::position () from /usr/lib/libmlt++.so.0.2.2
#2 0x08122c64 in ?? ()
#3 0x08542b18 in ?? ()
#4 0xb68f8144 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7eeb7f8 in ?? () from /usr/lib/libmlt.so.0.2.3
#6 0xb7eda071 in mlt_properties_get_double () from /usr/lib/libmlt.so.0.2.3
#7 0x081eca68 in ?? ()
#8 0x00000000 in ?? ()

Klingt danach, als würde die libmlt machen, was sie will. Wenn man vor dem Laden ein Video zum leeren Projekt hinzufügt und damit die Video-Ausgabe initialisiert, scheint es besser zu klappen.