Difference between revisions of "Post Installing Arch on an X200"
(→Preface) |
(→Preface) |
||
Line 1: | Line 1: | ||
==Preface== | ==Preface== | ||
− | If your native language is Chinese or you are good at Chinese, I | + | If your native language is Chinese or you are good at Chinese, I recommend you read [http://forum.ubuntu.org.cn/viewtopic.php?f=155&t=286666 the Chinese version of this page] |
In this page, I will NOT tell you how to install ArchLinux in X200, but something make X200 work better after ArchLinux installation. | In this page, I will NOT tell you how to install ArchLinux in X200, but something make X200 work better after ArchLinux installation. |
Revision as of 05:42, 23 September 2010
Contents
Preface
If your native language is Chinese or you are good at Chinese, I recommend you read the Chinese version of this page
In this page, I will NOT tell you how to install ArchLinux in X200, but something make X200 work better after ArchLinux installation.
If you don't know how to install ArchLinux to your X200, ArchWiki,and Installing Arch on an X200. So if you reach here, I think you have installed ArchLinux to you X200 with desktop environment. If you think the tools in this page isn't the best one, or can't use in your desktop environment, please edit the page, and show your tools to us.
Prepare kernel modules
package: tp_smapi
You can install this package through yaourt, but the source is not patched for X200. So we need to patch the source.
in file hdaps.c
Search "X61" and add following line between " HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X61", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_X)," and "};"
add:
HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X200", HDAPS_ORIENT_SWAP | HDAPS_ORIENT_INVERT_X | HDAPS_ORIENT_INVERT_Y), { .ident = NULL }
After you patch source, you can repack the source, edit PKGBUILD, use makepkg to build the package.
Or you can make it step by step
$HDAPSD=true make
#make install #depmod -a
Configure modules
1 fan control:
file /etc/modprobe.d/modprobe.conf, add one line:
options thinkpad_acpi fan_control=1
2 audio:
options snd-hda-intel model=lenovo-x200 enable_msi=1
3 autoload modules:
tp_smapi hdaps acpi-cpufreq
Sensors
Package: lm_sensors, sensors-applet (gnome_applet), hddtemp
Add hddtemp to DAEMON, run sensors-detect to detect sensors, add sensors-applet to panel.
Fan control
Package: tpfand tpfan-admin(This package may not work well)
Add tpfand to DAEMON. If tpfan-admin can't work, you can write a profile yourself or install tpfand-profiles
After ArchLinux update Xorg to version 1.8, hal can remove from DAEMON. But this make tpfand doesn't work.
Simply edit the source can make tpfand works well.
File /usr/lib/python2.6/site-packages/tpfand/settings.py
change the part of code
def read_model_info(self): """reads model info from HAL""" try: bus = dbus.SystemBus() computer_obj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/devices/computer') computer = dbus.Interface(computer_obj, 'org.freedesktop.Hal.Device') product_id = computer.GetProperty('system.hardware.vendor') + "_" + computer.GetProperty('system.hardware.product') self.product_id = product_id.lower() product_name = computer.GetProperty('system.hardware.vendor') + "_" + computer.GetProperty('system.hardware.version') self.product_name = product_name.lower().replace('/', '-').replace(' ', '_') self.product_pretty_vendor = computer.GetProperty('system.hardware.vendor') self.product_pretty_name = computer.GetProperty('system.hardware.version') self.product_pretty_id = computer.GetProperty('system.hardware.product') except: print "Warning: unable to get your system model from HAL." self.product_id = None self.product_name = None self.product_pretty_vendor = None self.product_pretty_name = None self.product_pretty_id = None
TO
# try: # bus = dbus.SystemBus() # computer_obj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/devices/computer') # computer = dbus.Interface(computer_obj, 'org.freedesktop.Hal.Device') # product_id = computer.GetProperty('system.hardware.vendor') + "_" + computer.GetProperty('system.hardware.product') # self.product_id = product_id.lower() # product_name = computer.GetProperty('system.hardware.vendor') + "_" + computer.GetProperty('system.hardware.version') # self.product_name = product_name.lower().replace('/', '-').replace(' ', '_') # self.product_pretty_vendor = computer.GetProperty('system.hardware.vendor') # self.product_pretty_name = computer.GetProperty('system.hardware.version') # self.product_pretty_id = computer.GetProperty('system.hardware.product') # except: # print "Warning: unable to get your system model from HAL." self.product_id = u'LENOVO_74574AC' self.product_name = u'LENOVO_ThinkPad X200' self.product_pretty_vendor = dbus.String(u'LENOVO') self.product_pretty_name = dbus.String(u'ThinkPad X200') self.product_pretty_id = dbus.String(u'74574AC')
The last 5 lines you should replace them to yours. You can get them by python or from the bottom side of your X200.
Wheel Emulation
New file /etc/X11/xorg.conf.d/10-wheel-emulation.conf
# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable # http://bugs.freedesktop.org/show_bug.cgi?id=22442 Section "InputClass" Identifier "Trackpoint Wheel Emulation" MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint|ThinkPad USB Keyboard with TrackPoint|USB Trackpoint pointing device" MatchDevicePath "/dev/input/event*" Option "EmulateWheel" "true Option "EmulateWheelButton" "2" Option "Emulate3Buttons" "false" Option "XAxisMapping" "6 7" Option "YAxisMapping" "4 5" EndSection
HDAPS
Packages: hdapsd hdaps-gl thinkhdaps
Add hdapsd to DAEMON, add thinkhdaps to gnome gnome startup programs.
Laptop Mode
Package: laptop-mode-tools
Add laptop-mode to DAEMON, add edit file /etc/laptop-mode/laptop-mode.conf, change ENABLE_AUTO_MODULES' value to 1
Protect Battery
Make battery charge cycle grows slowly, we should change some value in sysfs.
New file: /etc/sysfs.conf
# Make battery live longer devices/platform/smapi/BAT0/start_charge_thresh = 50 devices/platform/smapi/BAT0/stop_charge_thresh = 90
OR
# Make battery live longer devices/platform/smapi/BAT0/start_charge_thresh = 10 devices/platform/smapi/BAT0/stop_charge_thresh = 100
(choose one you like, and I use the first one)
New file: /etc/rc.d/sysfsutils
#! /bin/sh -e ### BEGIN INIT INFO # Provides: sysfsconf # Required-Start: mountkernfs # Should-Start: udev module-init-tools loadcpufreq # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Set sysfs variables from /etc/sysfs.conf # Description: Similarly to /etc/init.d/procps.sh, you can configure # values for sysfs variables (such as power management # defaults) and /sys file permissions in /etc/sysfs.conf. ### END INIT INFO # /etc/rc.d/sysfsutils: # # (c) 2005 Martin Pitt <mpitt@debian.org> CONFFILE=/etc/sysfs.conf [ -r "$CONFFILE" ] || exit 0 . /etc/rc.conf . /etc/rc.d/functions case "$1" in start) stat_busy "Setting sysfs variables..." sed 's/#.*$//; /^space:*$/d; s/^space:*\([^=[:space:]]*\)space:*\([^=[:space:]]*\)space:*=space:*\(.*\)/\1 \2 \3/' \ $CONFFILE | { while read f1 f2 f3; do if [ "$f1" = "mode" -a -n "$f2" -a -n "$f3" ]; then if [ -f "/sys/$f2" ]; then chmod "$f3" "/sys/$f2" else stat_fail fi elif [ "$f1" = "owner" -a -n "$f2" -a -n "$f3" ]; then if [ -f "/sys/$f2" ]; then chown "$f3" "/sys/$f2" else stat_fail fi elif [ "$f1" -a -n "$f2" -a -z "$f3" ]; then if [ -f "/sys/$f1" ]; then # Some fields need a terminating newline, others # need the terminating newline to be absent :-( echo -n "$f2" > "/sys/$f1" 2>/dev/null || echo "$f2" > "/sys/$f1" else stat_fail fi else stat_fail exit 1 fi done } stat_done ;; stop) ;; *) echo "Usage: /etc/rc.d/sysfsutils {start|stop}" exit 1 ;; esac
#chmod +x /etc/rc.d/sysfsutils
Add sysfsutils to DAEMON.
Profiles I am using
a: rc.conf
MODULES=(!snd_pcm_oss !snd_mixer_oss !snd_seq_oss !thinkpad_ec tp_smapi hdaps acpi-cpufreq) DAEMONS=(syslog-ng dbus acpid hdapsd tpfand networkmanager hddtemp alsa laptop-mode sysfsutils)
b: tpfand.conf
enabled = True override_profile = True 0. CPU = 0:0 45:3 60:6 1. Mini PCI = 0:0 50:3 2. Sensor 2 = 0:255 3. GPU = 0:0 50:3 4. Bat0 = 0:0 35:2 5. Sensor 5 = 0:255 6. Bat1 = 0:0 35:2 7. Sensor 7 = 0:255 8. MB? = 0:0 45:2 60:4 9. MB? = 0:0 55:3 10. Sensor 10 = 0:255 11. Sensor 11 = 0:255 12. Sensor 12 = 0:255 13. Sensor 13 = 0:255 14. Sensor 14 = 0:255 15. Sensor 15 = 0:255 hysteresis = 2 interval_speed = 2 interval_duration = 500.000000 interval_delay = 5000.000000