Samsung N220

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen
Samsung N220

Das Samsung N220 ist ein Netbook basierend auf der neuen Pineview-Plattform von Intel. Da das Gerät in vielen Tests sehr gut abgeschnitten hat und vor allem eine lange Akkulaufzeit und sehr gute Tastatur bietet, habe ich mir das N220 zugelegt. Der EeePC ist damit in Rente. Da ich den N220 unter openSUSE betreibe, liegt mein Augenmerk natürlich auf Installation und Konfiguration von Linux.

Spezifikation

Offizielle Infos und Support von Samsung

Für Backup und Restore des Windows-Krams:

Testberichte und Infos

Foren und Wikis

Linux/openSUSE Unterstützung

GMA 3150 Grafik:

  • unterstützt seit xf86-video-intel 2.10.0 release (Jan 2010)
  • enthalten ab openSUSE 11.3 (Milestone Releases), Xorg 7.5
  • kernel mode-setting (KMS) mandatory, ab Kernel 2.6.32

Probleme:

  • Handbuch nur im Flash-Format und zudem nur als exe-Datei
  • BIOS-Update nur als exe-Datei

Weitere Hinweise:

  • Kernel-Modul für Samsung Netbooks siehe samsung-laptop.ko (noch in Entwicklung, staging)

Installation und Konfiguration unter openSUSE

Die folgende Beschreibung gilt für openSUSE 11.3 Milestone 4 bzw. 5. Die meisten Tipps und Vorschläge zum Betrieb unter Linux habe ich im folgenden übernommen von der Seite Samsung N150 auf archlinux.org. Das N220 ist intern fast identisch zum N150.

Updates:

  • Konfiguration und Verhalten erfolgreich unter openSUSE 11.4 getestet.
    • Spezielles Script und Tastaturbelegung für WLAN Toggle (Fn-F9) nicht mehr nötig.

Windows-Auslieferungszustand

Partitionstabelle nach Ersteinrichtung des mitgelieferten Windows 7 Starter:

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x9d97ba08

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        1959    15728640   27  Unknown
/dev/sda2   *        1959        1972      102400    7  HPFS/NTFS
/dev/sda3            1972        7193    41943040    7  HPFS/NTFS
/dev/sda4            7193       30402   186422272    f  W95 Ext'd (LBA)
/dev/sda5            7193       29829   181820416    7  HPFS/NTFS
/dev/sda6           29829       30401     4598464+  49  Unknown
  • sda1: Wiederherstellungspartition (Samsung Recovery Solution)
  • sda2: SYSTEM-Partition (daraus wird Windows gebootet)
  • sda3: C-Laufwerk
  • sda4: Extended
  • sda5: D-Laufwerk
  • sda6: - (nicht benutzt)

Firmware (nach Update): 08JI

Installation

Die Installation von openSUSE 11.3 Milestone 5 (initial über openSUSE-NET-x86_64-Build0552-Media.iso aus dem früheren Factory-Zweig) musste mit dem Kernel-Bootparameter "acpi=off" im Textmodus erfolgen, da Maus und Tastatur in Yast im Grafikmodus nicht funktionierten. Nach der Installation trat dieses Problem nicht mehr auf.

Partitionierung

Für Windows 7 wurde erstmal eine 40GB Partition behalten (sda1-sda3), um z.B. BIOS-Updates machen zu können. Der Rest wurde für Linux partitioniert, wobei eine normale Partition für /boot (sda5) eingerichtet wurde und der Rest für Verwendung mittels LVM (sda6).

fdisk -l /dev/sda:

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9d97ba08

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        1959    15728640   27  Unknown
/dev/sda2            1959        1972      102400    7  HPFS/NTFS
/dev/sda3            1972        7193    41943040    7  HPFS/NTFS
/dev/sda4   *        7194       30401   186418260    f  W95 Ext'd (LBA)
/dev/sda5            7194        7218      200781   83  Linux
/dev/sda6            7219       30401   186217416   8e  Linux LVM

cat /etc/fstab:

/dev/vgsystem/root   /                    ext4       acl,user_xattr        1 1
/dev/mapper/cr_data  /data                ext4       acl,user_xattr,nofail 0 0
/dev/vgsystem/swap   swap                 swap       defaults              0 0
/dev/disk/by-id/ata-SAMSUNG_HM250HI_S20TJ9BZ216055-part5 /boot                ext4       acl,user_xattr        1 2
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0

pvdisplay:

  --- Physical volume ---
  PV Name               /dev/sda6
  VG Name               vgsystem
  PV Size               177.59 GiB / not usable 968.00 KiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              45463
  Free PE               2
  Allocated PE          45461
  PV UUID               acjsI7-OsNy-3NFW-816J-n53o-tBqp-DAZV0Q

vgdisplay:

  --- Volume group ---
  VG Name               vgsystem
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               177.59 GiB
  PE Size               4.00 MiB
  Total PE              45463
  Alloc PE / Size       45461 / 177.58 GiB
  Free  PE / Size       2 / 8.00 MiB
  VG UUID               RZWnh9-r41m-dIpo-2d5z-bZoE-oOvu-fTnKIk

lvdisplay:

  --- Logical volume ---
  LV Name                /dev/vgsystem/data
  VG Name                vgsystem
  LV UUID                xMbY2e-m1rm-ej2h-raVC-Eoey-DDZB-eMDavx
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                143.58 GiB
  Current LE             36757
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Name                /dev/vgsystem/root
  VG Name                vgsystem
  LV UUID                5wPLgI-oiLp-OsE8-NFsM-tZvl-kA1s-fCLqZg
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                30.00 GiB
  Current LE             7680
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
   
  --- Logical volume ---
  LV Name                /dev/vgsystem/swap
  VG Name                vgsystem
  LV UUID                Rge7xU-Ilzm-EOuV-ef8D-ONoO-M1Oi-SFLUHB
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

Ethernet

Das 10/100 MBit/s Interface wird direkt erkannt. Kernel-Modul ist sky2.

WLAN

Hinweis: Das Script und die explizite Tastaturbelegung für WLAN Toggle (Fn-F9) ist seit openSUSE 11.4 (KDE 4.6) nicht mehr nötig. Das Script unten funktioniert aber immer noch.

WLAN funktioniert ohne Anpassung. Kernel-Modul ist athk9.

Zum Aktivieren von WLAN muss zunächst einmal der "Hardware-Schalter" im BIOS eingeschaltet sein. Dann kann man mit dem folgenden Script, ähnlich wie unter archlinux.org beschrieben, WLAN aus- und einschalten:

cat /usr/local/sbin/rftoggle:

#!/bin/bash
FONT='-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*'
DELAY=2

blocked=`/usr/sbin/rfkill list wlan | grep "Soft blocked: yes"`

if [ -z "$blocked" ]; then
   sudo /usr/sbin/rfkill block wlan
   kdialog --passivepopup "WLAN disabled" 3
   osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
   WLAN disabled
EOF
else
   sudo /usr/sbin/rfkill unblock wlan
   kdialog --passivepopup "WLAN enabled" 3
   osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
   WLAN enabled
EOF
fi

Dabei wird mit dem rfkill-Kommando gearbeitet, welches man auch für die Abfrage des Status verwenden kann:

rfkill list

Zuordnung zu Fn-F9-Tastenkombination siehe unten.

Bluetooth

Ein- und Ausschalten des Bluetooth-Devices geht unabhängig von WLAN mit dem folgenden Script, inkl. Anzeige in X11.

cat /usr/local/sbin/bttoggle

#!/bin/bash
FONT='-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*'
DELAY=2

blocked=`/usr/sbin/rfkill list bluetooth | grep "Soft blocked: yes"`

if [ -z "$blocked" ]; then
   sudo /usr/sbin/rfkill block bluetooth
   kdialog --passivepopup "Bluetooth disabled" 3
   osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
   Bluetooth disabled
EOF
else
   sudo /usr/sbin/rfkill unblock bluetooth
   kdialog --passivepopup "Bluetooth enabled" 3
   osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
   Bluetooth enabled
EOF
fi

Zuordnung zu Fn-F8-Tastenkombination siehe unten.

Audio

Kein Problem, wird automatisch erkannt und unterstützt. Kernel-Module snd_hda_codec_realtek und snd_hda_intel.

Grafik und Display

Die Xorg Version 7.5 arbeitet sehr gut zusammen mit dem Grafik-Chip, ohne Erstellung einer /etc/X11/xorg.conf.

Umschaltung der Grafik-Ausgabe

Externes Display mit 1920x1080 ansteuern (was entgegen der Spec funktioniert):

xrandr --output VGA1 --mode 1920x1080

Internes Display ausschalten:

xrandr --output LVDS1 --off

Wieder das interne Display initialisieren/einschalten:

xrandr --output LVDS1 --mode 1024x600

Externes Display ausschalten:

xrandr --output VGA1 --off

Das Script kann genutzt werden und auf Fn-F4 gelegt werden, um das Display umzuschalten.

In /usr/local/bin/display_toggle wurden die Devices angepasst und die DISPLAY-Variable auskommentiert:

...
# External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"
EXTERNAL_OUTPUT="VGA1"
INTERNAL_OUTPUT="LVDS1"
EXTERNAL_LOCATION="left"

# Figure out which user and X11 display to work on
# TODO there has to be a better way to do this?
X_USER=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $1}')
#export DISPLAY=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $3}')

# Switch to X user if necessary
...

Helligkeit des interne Displays

Siehe Script archlinux.org. Das Script /usr/local/sbin/backlight funktioniert auch auf dem N220:

#!/bin/bash
# increase/decrease/set/get the backlight brightness (range 0-255)
#

# PCI device on which to operate
DEVICE=00:02.0

# Amount to raise/lower the backlight when called with "up" or "down"
AMOUNT=8

# Minimum backlight value reachable via "down"
MIN=1

# Default backlight level when toggling on
DEFAULT=6c

#get current brightness in hex and convert to decimal
var1=`setpci -s $DEVICE F4.B`
var1d=$((0x$var1))
case "$1" in
       up)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d+$AMOUNT);if (a<255) print a else print 255" | bc`
               echo "$0: increasing brightness from 0x$var1 to 0x$var2"
               setpci -s $DEVICE F4.B=$var2
               ;;
       down)
               #calculate new brightness
               var2=`echo "ibase=10; obase=16; a=($var1d-$AMOUNT);if (a>$MIN) print a else print $MIN" | bc`
               echo "$0: decreasing brightness from 0x$var1 to 0x$var2"
               setpci -s $DEVICE F4.B=$var2
               ;;
       set)
               #n.b. this does allow "set 0" i.e. backlight off
               echo "$0: setting brightness to 0x$2"
               setpci -s $DEVICE F4.B=$2
               ;;
       get)
               echo "$0: current brightness is 0x$var1"
               ;;
       toggle)
               if [ $var1d -eq 0 ] ; then
                       echo "toggling up"
                       setpci -s $DEVICE F4.B=$DEFAULT
               else
                       echo "toggling down"
                       setpci -s $DEVICE F4.B=0
               fi
               ;;
       *)
               echo "usage: $0 {up|down|set <val>|get|toggle}"
               ;;
esac
exit 0

Suspend to RAM

Wenig Probleme. Manchmal wacht das Gerät aber nicht wieder auf und muss neu gestartet werden.

Touchpad

Ein- und Ausschalten geht ohne Anpassung mittels Fn-F10. Siehe Script unter http://wiki.archlinux.org/index.php/Samsung_N150#Touchpad für das Prüfen, ob das Touchpad eingeschaltet ist. Leider lässt sich das Script nicht auf Fn-F10 legen. Mein Script /usr/local/bin/report_touchpad mit leichten Änderungen bei der Anzeige:

#!/bin/bash

FONT='-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*'
DELAY=1
state=Unknown

case "$1" in
   on)
      state=Enabled
      ;;
   off)
      state=Disabled
      ;;
   *)
      echo "usage: $0 {on|off}"
      exit 2
      ;;
esac

kdialog --passivepopup "Touchpad $state" 3
osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
Touchpad $state
EOF

exit 0

Für Aktivierung von Multitouch gibt es dort auch ein HAL-Eintrag, welcher unter /usr/share/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi abgelegt ist:

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
        <device>
                <match key="info.capabilities" contains="input.touchpad">
                        <merge key="input.x11_driver" type="string">synaptics</merge>
                        <merge key="input.x11_options.TapButton1" type="string">1</merge>
                        <merge key="input.x11_options.TapButton2" type="string">2</merge>
                        <merge key="input.x11_options.TapButton3" type="string">3</merge>


                        <merge key="input.x11_options.SHMConfig" type="string">true</merge>

                        <merge key="input.x11_options.VertEdgeScroll" type="string">false</merge>
                        <merge key="input.x11_options.PalmDetect" type="string">false</merge>

                        <merge key="input.x11_options.VerteScrollDelta" type="string">100</merge>

                        <merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>
                        <merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>
                        <merge key="input.x11_options.EmulateTwoFingerMinZ" type="string">40</merge>
                        <merge key="input.x11_options.EmulateTwoFingerMinW" type="string">5</merge>



                </match>
        </device>
</deviceinfo>

CPU Frequenz umschalten / Powermanagement

Siehe http://wiki.archlinux.org/index.php/Samsung_N150#CPU_frequency_scaling. Die dort genannten Module werden bereits automatisch gestartet. Das Script /usr/local/sbin/cpufreq_toggle siehe wie folgt aus:

#!/bin/bash

current=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`
future=unknown

if [ "$current" == "performance" ]; then
   future="ondemand"
elif [ "$current" == "ondemand" ]; then
   future="powersave"
else
   future="performance"
fi

echo "$future" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "$future" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor

echo "$future"

Und hier das Script /usr/local/bin/cpufreq_toggle_osd, welches noch eine Anzeige in X11 bietet:

#!/bin/bash

FONT='-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*'
DELAY=1

state=`sudo /usr/local/sbin/cpufreq_toggle | tail -1`
message="CPU Performance State Unknown"

if [ "$state" == "performance" ]; then
   message="Performance Mode"
elif [ "$state" == "powersave" ]; then
   message="Low Power Mode"
elif [ "$state" == "ondemand" ]; then
   message="Automatic Mode"
fi

kdialog --passivepopup "$message" 3
osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
$message
EOF

exit 0

Akku

Die Anzeige des Akku-Zustand (inkl. der verbleibenden Zeit) erledigt das folgende Script, welches auf Fn-F2 gelegt wird (s.u.):

#!/bin/bash

FONT='-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*'
DELAY=3

state=`acpi -V`

kdialog --passivepopup "$state" 3
osd_cat -A center -p middle -f $FONT -d $DELAY << EOF
$state
EOF

exit 0

Fn-Tasten

Viele Fn-Tasten werden vom System nicht erkannt. Die zugehörigen Keycodes müssen erstmal bekannt gemacht werden. Eintrag in /etc/init.d/boot.local:

setkeycodes e002 227   # Fn+F4 maps to switchvidmode
setkeycodes e003 236   # Fn+F2 maps to battery
setkeycodes e004 148   # Fn+F5 maps to prog1
setkeycodes e006 238   # Fn+F9 maps to wlan
setkeycodes e008 225   # Fn+Up maps to brightnessup
setkeycodes e009 224   # Fn+Dn maps to brightnessdown
setkeycodes e031 149   # Fn+F7 maps to prog2
setkeycodes e033 202   # Fn+F8 maps to prog3
setkeycodes e077 191   # Fn+F10 maps to F21 whenever the touchpad is enabled
setkeycodes e079 192   # Fn+F10 maps to F22 whenever the touchpad is disabled

# Ensure key release events occur for all except Fn+F7, which properly reports a key release for some reason
echo 130,131,132,134,136,137,179,247,249 > /sys/devices/platform/i8042/serio0/force_release

Dann kann man die Fn-Tasten in KDE4 unter "Systemeinstellungen -> Systemverwaltung -> Tastenkombinationen" bzw. "Kurzbefehle und Gestensteuerung" einem Befehl bzw. Script zugeordnen. Die Einstellungen landen dann unter ~/.kde4/share/config/khotkeysrc.

Folgende Fn-Tasten wurden dort konfiguriert:

  • Display-Helligkeit erhöhen - Fn-Pfeil-hoch - sudo /usr/local/sbin/backlight up
  • Display-Helligkeit verringern - Fn-Pfeil-runter - sudo /usr/local/sbin/backlight down
  • Display an/aus - Fn-F5 - sudo /usr/local/sbin/backlight toggle
  • WLAN an/aus - Fn-F9 - /usr/local/sbin/rftoggle
  • Bluetooth an/aus - Fn-F8 - /usr/local/sbin/bttoggle
  • CPU-Powermodus umschalen - Fn-F7 - /usr/local/bin/cpufreq_toggle_osd
  • Akku-Status anzeigen - Fn-F2 - /usr/local/bin/report_battery
  • Display ext - Fn-F4 - xrandr --output VGA1 --mode 1280x1024

visudo:

Cmnd_Alias NETBOOK_CMDS = /usr/local/sbin/backlight, /usr/local/sbin/rftoggle, /usr/local/sbin/bttoggle, /usr/local/sbin/cpufreq_toggle, /usr/sbin/rfkill
%users  ALL=(ALL) NOPASSWD: NETBOOK_CMDS

Für HAL existieren Einträge für Samsung-Notebooks. Dort kann man den N220 ergänzen, was allerdings keinen Einfluss auf nötige setkeycodes-Kommandos hat.

cat /usr/share/hal/fdi/information/10freedesktop/30-keymap-misc.fdi

 <match key="/org/freedesktop/Hal/devices/computer:system.hardware.product" contains_outof="NC10;SP55S;SQ45S70S;SX60P;SX30S;SX22S;R59P/R60P/R61P;Q210;Q310;X05;P560;R560;N150/N210/N220">
...
          <append key="input.keymap.data" type="strlist">e077:f21</append> <!-- Fn+F10 Touchpad on -->
          <append key="input.keymap.data" type="strlist">e079:f22</append> <!-- Fn+F10 Touchpad off -->
...

Webcam

Die Webcam funktioniert ohne Anpassungen mit Skype und anderen Webcam-Applikationen (wxcam, cheese). Kernel-Modul ist uvcvideo.

Besondere Anwendungen und Dienste

  • initrd: dm_mod und ext4 hinzugefügt in /etc/sysconfig/kernel
  • Postfix: relayhost und sasl-Parameter
  • NTP
  • knetworkmanager
  • Webcam Apps, Skype

Offene Punkte

  • Belegen von Fn-F10 mit Ausgabe des Touchpad-Zustands (an/aus)
  • Doppelklick Touchpad (wenn man es denn braucht)
  • Testen und Belegen von Fn-F4 mit Display-Umschalter-Script
  • LED für "WLAN an/aus" leuchtet ständig. Gelöst mit openSUSE 11.4.
  • Überschreiben von /etc/resolv.conf durch netconfig (networkmanager), dabei wird "options single-request" nicht eingefügt für IPv6. Kann über Dateien in /etc/NetworkManager/dispatcher.d gesteuert werden.
  • Magic-Sysrequests aktivieren

Siehe auch