Wednesday 24 June 2009

MSI X320 installation (revisited)

(this post has been updated on Sept. 3rd, 2009)

Installing Ubuntu from scratch (unless you want to live with Windows Vista Home Edition) on a MSI X320 is non trivial at best. The notebook comes without any CD-ROM but boots from an external USB CD- or DVD drive.

Installation goes straight forward, the system comes up nicely.

Things to keep in mind

Graphics resolution is 1024x768. The display can run at 1366x768. Here is what you have to do to get it:

Setting the right screen resolution

In Synaptic Package Manager under Settings/Repositories/Third-Party Software add:
deb http://ppa.launchpad.net/ubuntu-mobile/ppa/ubuntu jaunty main
copy the following text to a text file:
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.0.10

mI0ESXQtMgEEAMtSSxV/TSMW1mEnFVc7DJ/g/7UOq+TnlSs68uVbhUoh0BRuVScOb81dsyTg
IB3WQzbvE2r0ELa+L/hYGsRH9XOq5u+qVtBJmDtUWjT0okVlBBIpyWkM61sWCQYkbs4UcF9a
U+zfy4W1rIY81etivlqWQ79XmZ5iUHHMvGzvbZONABEBAAG0JExhdW5jaHBhZCBQUEEgZm9y
IFVidW50dSBNb2JpbGUgVGVhbYi2BBMBAgAgBQJJdC0yAhsDBgsJCAcDAgQVAggDBBYCAwEC
HgECF4AACgkQmdayHMZZijA7ZAP8DBWyjyo8O8hNbpvN/T7kEB4HxcNd6R6HaGQen3jSBrxe
vviVA1h2Md81C6gnvr/XT/kUYLyEK1oIY+jw8nHl7Z6Vf8kDfDACiN4KJXQY8wMOotQhHCZd
UM93u4yTZy+hWHcHU0/7a5EOU2bT7x3CztYJN7PURR89Sto3aXy3aW0=
=0g8f
-----END PGP PUBLIC KEY BLOCK-----
Save it under the name "msi.key" and import in the tab Authentication/Import Key File... (alternatively you can download the key from here).

Reload the repository. You should now find a package:
poulsbo-driver-2d and
poulsbo-driver-3d as well as
psb-kernel-source (will be needed by the wireless network driver as well).
Install it and its depending packages. Further install
compiz-settings-manager
awn-manager
and all depending packages if you want to mimic Apple.

Now edit the file /usr/bin/compiz. Its a wrapper script to launch compiz. Find the line that starts with:
WHITELIST="..."
Add a space and "psb" at the end so that screen composition works with the Poulsbo chipset.

I also installed AUT2 (the Austrian Ubuntu Theme) which has resembles a silvery blueish style. For that, copy AUT2 into /usr/share/themes and UE-icon-set-light into /usr/share/icons.

After rebooting the machine, you will be greeted with an optimized resolution of 1366x768. Choose the AUT2 theme from the Preferences/Appearance control panel.

Wireless LAN

You might find your machine not offering bluetooth and WLAN. Bluetooth can be turned on with the Fn-F9 key combination. WLAN ist toggled with the Fn-F8 key (not very intuitive icon).

Ubuntu does not provide a wireless driver for the RaLink RT3090 pci card built into the MSI X320. In order to get wireless working you need to download the source file. Either go to RaLink directly:
http://www.ralinktech.com/ralink/Home/Support/Linux.html
and download the file "2009_0612_RT3090_Linux_STA_V2.1.0.0_DPO.tar.gz" or download sources for SuSE 11 (which have some handy patches enclosed):
http://download.opensuse.org/repositories/home:/Akoellh/openSUSE_11.0_Update/src/rt3090sta-2.1.0.0-1.2.src.rpm
The driver derives from the RT2860. If you want to adjust the interface name to wlan-x and the driver name to rt3090sta, you need to patch some source files. SuSE delivers 5 patches, 4 of them apply, on is for 64bit versions only (which do not make sense and I could not get the driver to work with this patch).

Install the patch utility and optionally the rpm utility:
sudo apt-get install patch rpm
Sleves up

Extract the sources. If you extract from the RPM you have to extract the tar.gz contained in the directory within rt3090sta-2.1.0.0-1.2.src as well (I renamed the directory to RT3090 for convenience).

In the RPM sources you find 5 patch files, some decriptive text and the original source directory (is the same as the one from RaLink).

Source code preparation

You can either apply the patches or apply changes manually. To apply patches cd into the directory containing the Makefile (2009_0612_RT3090_Linux_STA_V2.1.0.0_DPO). All patches create a backup of the files patched (they have an extension .orig).
patch -b -p0 ---input=../rt3090sta-2.1.0.0-config.patch
This patches the Makefile and the os/linux/config.mk file. In my case I had to revert the changes in the Makefile (I simply copied the Makefile.orig over the Makefile).

You can apply these changes manually by editing ./os/linux/config.mk. Set:
HAS_WPA_SUPPLICANT=y
...
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
This allows the driver to be controlled from the Network Manager applet.

Next apply the WPA-mixed patch. This changes the encryption cypher to TKIP-AES.
patch -b -p0 ---input=../rt3090sta-2.1.0.0-WPA-mixed.patch
You can change the line in ./common/cmm_wpa.c from MIX_CYPHER_NOTUSE to:
WPA_MIX_PAIR_CYPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES
manually.

If you use the patch utility, you can change the driver name to rt3090. This is cosmetic:
patch -b -p0 ---input=../rt3090sta-2.1.0.0-remove-potential-conflicts-with-rt2860sta.patch
This replaces all appearances of "rt2860" to "rt3090" in the file ./os/linux/pci_main_dev.c and can be done manually using gedit or vi.

We are nearly there. Another cosmetic change is applied by:
patch -b -p0 ---input=../rt3090sta-2.1.0.0-convert-devicename-to-wlanX.patch
This changes the default ra device to wlan device. You can manually replace the "ra" with "wlan" in the define statements of the file ./include/rtmp_def.h.

If you are not there, go back to the directory containing the first Makefile.

Compile

Simply call
make
This will start the compile process. Don't worry about the error messages. I tried to fix them but the results were no better.

After a while the make process will terminate with an error message (it cannot copy files to the /tftpboot directory). Don't worry, we don't need it.

Install

You can call
make install
or manually copy the driver and bind it to the OS:
cp ./os/linux/rt3090sta.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/.
depmod -a
There is also an install utility that you can use for this purpose.

Configure

You have to copy the file RT2860STA.dat to /etc/Wireless/RT2860STA. Create the directory Wireless and RT2860STA if it does not exist (if you used make install, this is done for you).

If the file is not found there, the wlan interface will not get registered and you will find an error entry in /var/log/syslog:
... RtmpOSFileOpen(): Error 2 opening /etc/Wireless/RT2860STA/RT2860STA.dat
(I found some posts on the internet that suggested fixing paramters in some configuration files. I think the euphoric success messages are due to frustration and not due to solution. Only having a system readable version of the file in the right place makes the driver work).

Edit the file /etc/Wireless/RT2860STA/RT2860STA.dat. Change the settings for:
CountryRegion
CountryRegionABand
CountryCode
WirelessMode
AuthMode=WPA2PSK
EncryptType
WPAPSK
or Keysettings. You can find the correct parameters to use in the template file README_STA_pci. Ignore advice of the rest of the file, it does not work in Ubuntu.

Start the driver

Before you continue, check the Network Manager applet. It should not offer you any wireless networks nor should you be able to Enable wireless either.
sudo modprobe rt3090sta
should work flawlessly. After a while you should be able to connect to the wireless network. Enter the connection information in Network Manager. If you choose auto connect and connection available to all users, connections will be set up automatically.

Reboot the machine. The driver should get loaded automatically after reboot.

Caveats

Some things to keep in mind:
  • The driver is copied into a directory tree of the kernel libs that gets replaced as soon as the kernel gets updated. You have to copy the kernel driver anew to the correct library path. I presume this is an accepable tradeoff until drivers get shipped with the standard image
  • The driver does not connect to SSIDs that are hidden (as was the case with my WLAN). I had to set the router to show my SSID in order to get a connection. This was the reason it took me that long to figure out how to install.
  • The warning messages that you saw during make do mean something. The source leaves some variables uninitialized. This generally is not a sign of good quality code. However, the driver works sufficiently. I hope RaLink people will deal with the warnings.
  • The driver does not correctly deregister for sleep mode.
Disable non-functional SD card driver

The SD card driver does not work on the MSI X320 (as of September 2009). The sdhci kernel mode drivers are notorious for making the machine unresponsive. The device does not release locking bits thus causing permanent timeouts, slowing the machine considerably. To disable kernel mode drivers in Ubuntu
  • goto /etc/modprobe.d/
  • create a file somenameorother.conf (I called it blacklist_sdhci.conf)
  • edit it to:
    blacklist sdhci
    blacklist sdhci_pci
  • restart the machine
You can edit existing blacklists but they might get overwritten in case of OS upgrades.

Other caveats
Neither suspend to RAM nor hibernating works.

I tried Karmic Koala (9.10) but neither the Poulsbo drivers, the SD card nor power savings were fixed.

Conclustion
If you can live with rebooting the machine, the MSI X320 is a slim, leightweight notebook. Here is a screenshot of how my machine looks now:

Monday 22 June 2009

Webmin 1.480

I run webmin to manage my servers. To upgrade I usually download the latest package from the webmin website and install using dpkg.

Today I saw a notification on the System Information page. Following the link upgrades to 1.480. This is the first time upgrading from within webmin worked on my servers.

If you need web based server administration, I can recommend webmin.

Tuesday 16 June 2009

Error in Gnome-RDP

Gnome-RDP is a nice client to administer remote computers. It offers RDP protocol as well as VNC and SSH. It has a simple interface that just does it. And it keeps its settings in a SQlite database.

And here the problem starts.

After every major upgrade of Ubuntu, Gnome-RDP does not read the file correctly:
Error in query:
SELECT * FROM version WHERE id=1
Error:file is encrypted or is not a database
This is annoying as connection information and passwords are stored in this database.

Reason for the error is a difference in the SQlite schema. The error message is missleading.

Here is a fix that works on Ubuntu 9.04.
  1. Open a console window
  2. Check if sqlite and sqlite3 are installed (type sqli and tab. If you have installed a fresh copy then sqlite might be missing. Temporarily install it)
    sudo apt-get install sqlite
  3. Make a copy of the gnome config database
    cd
    mv .gnome-rdp.db .gnome-rdp-backup.db
  4. Start Gnome-RDP and quit immediately. This creates an empty config database. Then you dump the old database using sqlite to the new database using the new sqlite3
    gnome-rdp
    sqlite .gnome-rdp-backup.db ".dump session" | fgrep INSERT | sqlite3 .gnome-rdp.db
    Just dump the session table (which will dump CREATE statements as well) and just use the INSERT statements to copy the data into the new file.
  5. Starting Gnome-RDP should now work fine.
  6. Deinstall sqlite (you won't need it)
    sudo apt-get remove sqlite
Hope the developers of gnome-rdp will do a database check in the next release.

Thanks to Mick K for the solution.