Linux (SuSE 9) auf einem Medion MD 2804 Notebook (microstar)

  • back
  • Kein WLAN mit SUSE 9.3 auf Medion MD 2804

    WLAN ist nicht in Betrieb zu nehmen, der Kundensupport hat mich kurzerhand abgebürstet.
    Auch auf einem neuen DELL Notebook hat SUSE 9.3 arge Probleme mit WLAN. Damit kann ich SuSE nicht mehr für Nutzer dieses Notebooks weiterempfehlen - außerdem werden Kunden bei Installationsproblemen von SUSE anscheinend alleingelassen. Ich werde mich jetzt nach einer anderen Distribution (wahrscheinlich Debian) umsehen und kann nur jedem MD 2804 Nutzer empfehlen, auf einer alten SUSE zu bleiben oder ebenfalls die Distribution zu wechseln.

    Also nachfolgender Text bezieht sich nur auf SUSE < 9.3.

    Vorwort

    Ich habe mich für das neue SuSE 9 entschieden, da dort der ACPI Support fortgeschritten ist. Ich beschreibe hier nur die Hardware, für die ein Benutzereingriff vonnöten ist, der Rest wurde von SuSE 9 anstandslos erkannt und eingebunden. Nach den unten beschriebenen Operationen, die allerdings ein paar Linux Kenntnisse abfordern, ist dieses Notebook fast ohne jede Einschränkung gegenlüber Windows XP einsetzbar, das einzige, was mir bis jetzt noch nicht geglückt ist, sind die ACPI Suspend Modi, dafür hat man in anderen Bereichen aber sogar Vorteile gegenüber Windows XP.

    Grafikkarte

    Der NVIDA Treiber der GeforceFX GO 5600 läuft leider nicht ohne Eingriffe in die XF86Config:

    		Section "Device"
    		  BoardName    "0x031a"
    		  BusID        "1:0:0"
    		  Driver       "nvidia"
    		  Identifier   "Device[0]"
    		  Option       "NvAGP" "1"
    		  Screen       0
    		  Option       "Rotate" "off"
    		  VendorName   "NVidia"
    		EndSection
    		

    Insbesondere die Option "NvAGP" ist von großer Wichtigkeit, ohne diese hängt sich der Rechner gnadenlos auf und kann nur noch per Kaltstart wiederbelebt werden.

    Mousepad

    Wurde leider nicht korrekt erkannt, nach einen Eingriff in die XF86Config läuft aber alles Bestens. Mit diesem Treiber kann man auch die Scrollbuttons aktivieren und das Touchpad zur Laufzeit ohne X Neustart ein- und ausschalten. Ich habe einfach den Treiber in /usr/X11R6/lib/modules/input/synaptics_drv.o ausgetauscht und den synclient nach /usr/bin kopiert.

    		Section "InputDevice"
    		  Driver       "synaptics"
    		  Identifier   "Mouse[1]"
    		  Option       "AccelFactor" "0.0010"
    		  Option       "Device" "/dev/psaux"
    		  Option       "Edges" "1900 5400 1800 3900"
    		  Option       "Finger" "25 30"
    		  Option       "InputFashion" "Mouse"
    		  Option       "MaxSpeed" "0.18"
    		  Option       "MaxTapMove" "220"
    		  Option       "MaxTapTime" "20"
    		  Option       "MinSpeed" "0.02"
    		  Option       "Name" "Synaptics;Touchpad"
    		  Option       "VertScrollDelta" "100"
    		  Option       "ZAxisMapping" "4 5"
    		  Option       "SHMConfig" "on"
    		  Option       "UpDownScrolling" "on"
    		EndSection
    		

    SHMConfig funktioniert nur mit dem neuen Treiber, diese Option sorgt dafür, daß man das Touchpad zur Laufzeit und ohne X Neustart konfigurieren kann.

    Softmodem

    Wurde zwar korrekt erkannt, aber der Treiber wird beim Booten nicht automatisch eingebunden. Ich habe mir ein kleines Init Script /etc/init.d/softmodem dafür gebastelt:

    		#! /bin/sh
    		# Copyright (c) 2004 Silvio Iaccarino.  All rights reserved.
    		#
    		# Author: Silvio Iaccarino <silvio@iaccarino.de>
    		#
    		# /etc/init.d/softmodem
    		#
    		# description: init script for softmodem activation
    		### BEGIN INIT INFO
    		# Provides:          softmodem
    		# Required-Start:
    		# Required-Stop:
    		# Default-Start:     3 5
    		# Default-Stop:
    		# Description:       activates the softmodem
    		### END INIT INFO
    		
    		. /etc/rc.status
    		
    		rc_reset
    		
    		
    		# See how we were called.
    		case "$1" in
    		  start|b)
    		    echo -n "activating softmodem"
    		    /bin/lsmod|grep slamrmo>/dev/null
    		    if [ $? != '0' ] ; then
    		        echo -n " - loading module"
    		        /sbin/modprobe -q slamrmo>/dev/null
    		    fi
    		        rc_status -v
    		    /bin/lsmod|grep slamrmo>/dev/null
    		    if [ $? == '0' ] ; then
    		        test -e /dev/modem && rm /dev/modem
    		        ln -s /dev/ttySL0 /dev/modem
    		    fi
    		    ;;
    		  status)
    		    echo -n "checking for softmodem"
    		    /bin/lsmod|grep slamrmo>/dev/null
    		    rc_status -v
    		    ;;
    		  stop)
    		    echo -n "deactivating softmodem"
    		    /sbin/modprobe -r -q slamrmo
    		    rc_status -v
    		    /bin/lsmod|grep slamrmo>/dev/null || test -e /dev/modem && rm /dev/modem
    		    ;;
    		  *)
    		    echo "Usage: $0 start stop status"
    		    exit 1
    		esac
    		rc_exit
    		

    IRDA Port - Infrarot-Drucker

    Mir ist es nicht gelungen, meinen Infrarot Drucker (Canon BJC 80) per CUPS anzubinden. Irgendwann hatte ich keine Lust mehr und habe stumpf ein lp0 Device erzeugt, das in Wirklichkeit ein irlpt0 ist:

    			mknod /dev/lp0 c 161 16
    		

    Das ist sicher nicht die feine Art, aber äußerst wirkungsvoll und bei einem Notebook ohne eingebautes lp0 und ohne die Möglichkeit, je eines einbauen zu können, nicht wirklich tragisch.

    CPU - Steuerung

    Dieses Notebook hat zwar eine Desktop CPU (Pentium 4), immerhin aber unterstützt diese CPU "Throttling" - quasi eine Art Leer-Schleife für die CPU um Strom zu sparen. Das Script (/usr/bin/cpu) hierzu gibt ein Audio Feedback, weil ich es später einem Hotkey zuordnen will und dort kein optisches Feedback zu sehen bekomme.

    		#!/bin/sh
    		CPUSPEED=`cat /proc/acpi/processor/CPU0/throttling|grep active|awk {'print $3'}|tr -d T`
    		case "$1" in
    		    +)
    		    if [ "$CPUSPEED" -gt "0" ] ; then
    		        CPUSPEED=$(expr $CPUSPEED - 1)
    		        echo -n $CPUSPEED>/proc/acpi/processor/CPU0/throttling
    		        playwave /opt/kde3/share/sounds/KDE_Beep_Pop.wav
    		    else
    		        playwave /opt/kde3/share/sounds/KDE_Beep_ShortBeep.wav
    		    fi
    		    ;;
    		
    		    -)
    		    if [ "$CPUSPEED" -lt "7" ] ; then
    		        CPUSPEED=$(expr $CPUSPEED + 1)
    		        echo -n $CPUSPEED>/proc/acpi/processor/CPU0/throttling
    		        playwave /opt/kde3/share/sounds/KDE_Beep_Pop.wav
    		    else
    		        playwave /opt/kde3/share/sounds/KDE_Beep_ShortBeep.wav
    		    fi
    		    ;;
    		    0|1|2|3|4|5|6|7)
    		    echo -n $1>/proc/acpi/processor/CPU0/throttling
    		    ;;
    		    *)
    		    cat /proc/acpi/processor/CPU0/throttling
    		    ;;
    		esac
    		

    Nun kann man mit "cpu -" und "cpu +" das Throttling der CPU steuern - mit "+" wird der Rechner schneller, verbaucht aber mehr Strom, mit "-" legt die CPU mehr Ruhepausen ein und spart Strom. Sobald man eine Grenze erreicht, gibt es einen Warnton.

    ACPI - Lüftersteuerung

    Mit seinem Desktop Prozessor und der Turbo Grafikkarte ist klar, daß dieses Notebook nicht zu den Leisen seiner Gattung gehört.

    Ab SuSE 9.1 braucht man hier kaum noch Abhilfe, da das System die Lüftersteuerung anständig durchführt. Nur die ACPI Trippoints für die Lüftersteuerung sind sehr konservativ, weshalb der Lüfter öfter an sind, als Not tut. Hier kann man einfach mit diesem Init Script Ruhe schaffen:

    		#!/bin/sh
    		# Copyright (c) 2004 Silvio Iaccarino.  All rights reserved.
    		#
    		# Author: Silvio Iaccarino <silvio@iaccarino.de>
    		#
    		# /etc/init.d/silence
    		#
    		# description: Switches the FANs off
    		### BEGIN INIT INFO
    		# Provides:       silence
    		# Required-Start: $acpid
    		# Required-Stop:
    		# X-UnitedLinux-Should-Start:
    		# X-UnitedLinux-Should-Stop:
    		# Default-Start:  5
    		# Default-Stop:
    		# Description:    Switches the FANs off
    		### END INIT INFO
    		
    		. /etc/rc.status
    		
    		rc_reset
    		
    		case "$1" in
    		    start|reload)
    		    echo -n "switching the fans off"
    		    echo -n "80:75:70:60:60" > /proc/acpi/thermal_zone/TZ1/tip_points
    		    echo -n 0 > /proc/acpi/fan/FN1/state
    		    echo -n 0 > /proc/acpi/fan/FN2/state
    		    sleep 1
    		    echo -n 3 > /proc/acpi/fan/FN1/state
    		    echo -n 3 > /proc/acpi/fan/FN2/state
    		    rc_status -v
    		    ;;
    		    status)
    		        cat /proc/acpi/fan/FN1/state
    		    cat /proc/acpi/fan/FN2/state
    		    ;;
    		    stop)
    		    echo -n "switching the fans on"
    		    echo -n 0 > /proc/acpi/fan/FN1/state
    		    echo -n 0 > /proc/acpi/fan/FN2/state
    		    rc_status -v
    		    ;;
    		esac
    		rc_exit
    		

    Unter SuSE 9 ist die Lüftersteuerung gelinde gesagt bescheiden und das Notebook damit unnötig laut. Um hier abzuhelfen, habe ich ein ganzes Bündel von Scripten gebastelt, die mir die verdiente Ruhe verschaffen. Mit dem ersten Script, das ich /usr/bin/fan genannt habe, kann man die beiden Lüfter manuell steuern, bzw. sich den Status (Temperatur, Lüfter an/aus) ansehen - als root wohlgemerkt:

    		#!/bin/sh
    		if [ -z $1 ] ; then
    		    echo -n "Temperatur          :"
    		    cat /proc/acpi/thermal_zone/THRM/temperature|awk {'print $2'}
    		    echo -n "CPU Lüfter          :"
    		    cat /proc/acpi/fan/FN1/state|awk {'print $2'}
    		    echo -n "Grafikkarten Lüfter :"
    		    cat /proc/acpi/fan/FN2/state|awk {'print $2'}
    		    . /etc/temperatures
    		    echo "Lüfter an ab        :$fan_on"
    		    echo "Lüfter aus ab       :$fan_off"
    		    exit 0
    		fi
    		
    		if [ "$1" == "--help" ] ; then
    		    echo "fan on  - schaltet Lüfter ein"
    		    echo "fan off - schaltet Lüfter aus"
    		    echo "fan     - zeigt Temperatur Infos"
    		fi
    		
    		if [ "$1" == "on" ] ; then
    		    echo -n 0 > /proc/acpi/fan/FN1/state
    		    echo -n 0 > /proc/acpi/fan/FN2/state
    		elif [ "$1" == "off" ] ; then
    		    echo -n 3 > /proc/acpi/fan/FN1/state
    		    echo -n 3 > /proc/acpi/fan/FN2/state
    		fi
    		

    Seltsamerweise muß man die Lüfter erstmal mit "fan on" einschalten, um sie mit "fan off" abschalten zu können. Das nächste Script /usr/bin/check-temperature wird von Cron einmal pro Minute aufgerufen und schaltet die Lüfter an oder aus, wenn bestimmte Temperaturgrenzen erreicht wurden:

    		#!/bin/bash
    		
    		temp=`cat /proc/acpi/thermal_zone/THRM/temperature |awk {'print $2'}`
    		
    		. /etc/temperatures
    		
    		if [[ "$temp" -ge "$fan_on" ]] ; then
    		    echo -n 0 > /proc/acpi/fan/FN1/state
    		    echo -n 0 > /proc/acpi/fan/FN2/state
    		fi
    		
    		if [[ "$temp" -le "$fan_off" ]] ; then
    		    echo -n 3 > /proc/acpi/fan/FN1/state
    		    echo -n 3 > /proc/acpi/fan/FN2/state
    		fi
    		

    In /etc/temperatures kann man nun die Grenzen für die Lüfterschaltung definieren:

    		fan_off=38
    		fan_on=47
    		

    Das sind sehr konservative Werte, die dazu führen, daß die Lüfter sofort loslegen, wenn man zB. Videos anschaut, oder die 3D Hardware aktiviert.
    Das Script /usr/bin/check-temperature ist nun in /etc/crontab einzutragen, indem man diese Zeile anhängt:

    		*/1 * * * * root /usr/bin/check-temperature
    		

    Nun kommt eine Absonderlichkeit ins Spiel: Um die Lüfter per ACPI abschalten zu können, müssen sie einmal per ACPI eingeschaltet werden. Auch dafür habe ich mir ein Init Script /etc/init.d/silence gebastelt:

    		#!/bin/sh
    		# Copyright (c) 2004 Silvio Iaccarino.  All rights reserved.
    		#
    		# Author: Silvio Iaccarino <silvio@iaccarino.de>
    		#
    		# /etc/init.d/silence
    		#
    		# description: Switches the FANs off
    		### BEGIN INIT INFO
    		# Provides:       silence
    		# Required-Start: $acpid
    		# Required-Stop:
    		# X-UnitedLinux-Should-Start:
    		# X-UnitedLinux-Should-Stop:
    		# Default-Start:  5
    		# Default-Stop:
    		# Description:    Switches the FANs off
    		### END INIT INFO
    		
    		. /etc/rc.status
    		
    		rc_reset
    		
    		case "$1" in
    		    start|reload)
    		    echo -n "switching the fans off"
    		    /usr/bin/fan on
    		    sleep 1
    		    /usr/bin/fan off
    		    rc_status -v
    		    ;;
    		    status)
    		        /usr/bin/fan
    		    ;;
    		    stop)
    		    echo -n "switching the fans on"
    		    /usr/bin/fan on
    		    rc_status -v
    		    ;;
    		esac
    		rc_exit
    		

    Bei der Aktivierung dieses Init Scripts bitte sicherstellen, daß /etc/init.d/acpi zuvor gestartet wurde. Um sofort Ruhe zu haben, schaltet dieses Script die Lüfter gleich nach dem Booten aus, sonst müßte man erst warten, bis der Cron Job die Arbeit erledigt. Und siehe da, das Notebook ist unter Linux auf einmal ruhiger, als es unter Windows XP jemals war.

    TV Out

    Die hohe Qualität von Xine schreit gradezu danach, TV Out zu nutzen, aber auch tuxracer und Konsorten machen auf einem TV Bildschirm keine schlechte Figur. Man könnte dies per TWinview realisieren, so wie es Windows macht - LCD und TV zeigen dann das gleich Bild an, oder man erweitert den Desktop auf beide Screens. Die Sache hat einen Hacken - das LCD wird mit 1024x768 angesteuert, was auf TV ziemlich mies aussieht. Da mit TWinview beide Screens die gleiche Auflösung haben müssen, müßte man also auf 800x600 runterschalten. Darum habe ich mich für einen anderen, in meinen Augen viel eleganteren Weg entschieden, einen Weg, um den uns alle Windows User beneiden werden: ich definiere einfach eine zweite NVida Karte mit anderem Screen und starte mit diesen Parametern einem zweiten XServer. So kann man bequem per Strg+Alt+F7/F8 zwischen beiden Screens mit jeweils unterschiedlichen Auflösungen umschalten, auf dem LCD kann man Programme starten, die auf TV ausgeben. Beide Screens gleichzeitig geht nicht, macht aber auch keinen Sinn, denn man hat ja nur eine Maus und eine Tastatur. Diese Parameter sind der XF86Config hinzuzufügen:

    		Section "Monitor"
    		  HorizSync    30-50
    		  Identifier   "Monitor[1]"
    		  ModelName    "PAL TV"
    		  VendorName   "Telefunken"
    		  VertRefresh  57-60
    		  UseModes     "Modes[1]"
    		EndSection
    		
    		Section "Modes"
    		  Identifier   "Modes[1]"
    		  Modeline  "800x600" 36.88 800 832 912 1024 600 601 604 621
    		EndSection
    		
    		Section "Screen"
    		  DefaultDepth 16
    		  SubSection "Display"
    		    Depth      16
    		    Modes      "800x600"
    		  EndSubSection
    		  Device       "Device[1]"
    		  Identifier   "TV"
    		  Monitor      "Monitor[1]"
    		EndSection
    		
    		Section "Device"
    		  BoardName     "0x031a"
    		  BusID         "1:0:0"
    		  Driver        "nvidia"
    		  Identifier    "Device[1]"
    		  Option        "NvAGP" "1"
    		  Option        "ConnectedMonitor" "TV"
    		  Option        "TVStandard" "PAL-B"
    		  Option        "TVOutFormat" "COMPOSITE"
    		  Screen        0
    		  Option        "Rotate" "off"
    		  VendorName    "NVidia"
    		EndSection
    		

    Mit diesem Script von Markus Iofcea kann man nun zB. Xine auf TV Out starten...

    		#!/bin/sh
    		# Author: Markus Iofcea
    		# Copyright: 2002
    		# This document is released under the terms of GPL (http://www.fsf.org/copyleft/gpl.html).
    		X -screen TV :1 -ac & sleep 2; DISPLAY=:1 xine -f && kill `ps aux | awk '/X\ -screen/ {print $2}' `
    		

    Hotkeys

    Um alle Hotkeys (Fn+xyz) zu aktivieren, ist einiges an Handarbeit zu tun. Zuerst ist via Yast2 das aumix Paket (Audio Steuerung via Console) zu installieren. Anschließend braucht man ein Hotkey-Tool wie zB. dieses hier. Nun einfach einen Link von /usr/bin/xbindkeys in ~/.kde/Autostart erzeugen und eine .xbindkeysrc mit diesem Inhalt in das Home Verzeichnis ablegen:

    		"xbindkeys_show"
    		  control+shift + q
    		
    		"mute"
    		  c:160
    		
    		"aumix -v -"
    		  c:174
    		
    		"aumix -v +"
    		  c:176
    		
    		"synclient TouchpadOff=0"
    		  control+shift + t
    		
    		"synclient TouchpadOff=1"
    		  control+shift + u
    		
    		"sudo fan off"
    		  control+shift+s
    		
    		"sudo fan on"
    		  control+shift+l
    		
    		"sudo cpu +"
    		  c:205
    		
    		"sudo cpu -"
    		  c:203
    		

    Und die .Xmodmap aus dem Home Verzeichnis ist um folgende Zeile zu ergänzen:

    		keycode 178 = XF86WWW
    		keycode 236 = XF86Mail
    		keycode 203 = XF86Back
    		keycode 205 = XF86Forward
    		keycode 176 = XF86AudioRaiseVolume
    		keycode 174 = XF86AudioLowerVolume
    		keycode 160 = XF86AudioMute
    		

    Nach einem X Neustart kann man mit dem KDE Menüeditor FN+F10 und FN+F11 als Hotkeys an Mailer und Browser binden. Per Strg+Shift+u kann man nun das Touchpad abschalten, per Strg+Shift+t wieder einschalten. Für die Lüfter und CPU Steuerung muß man die Scripts fan und cpu per sudo freischalten, dazu ist /etc/sudoers um folgende Zeile zu ergänzen:

    		MeinName ALL=NOPASSWD: /usr/bin/fan, /usr/bin/cpu
    		

    Ab dann funktionieren auch die CPU Takt-Hotkeys und man kann mit control+shift+s die Lüfter abschalten, bzw. mit control+shift+l einschalten.

    Zusammen mit Windows

    Es bietet sich im Prinzip an, die Backup-Partition für Linux zu benutzen.
    Um auf die Windows Boot Partition schreibend zuzugreifen, empfiehlt sich captive, denn mit den Standard-NTFS-Treibern kann man nur lesen.

    Sonstiges

    Viele weitere und nützliche Informationen sind bei Tuxmobil zu finden. Dort werden auch andere Medion Notebooks behandelt und einiges davon hat auch für dieses Notebook seine Gültigkeit.