After you’ve bought your Shuttle XS35GT silent media center / HTPC, you’ll want to install some good software to make the system work well. Personally, I like the XBMC software, and here I’ll describe how to install it on the XS35GT.
In order to reduce costs, and make the system run faster, I have chosen to install Ubuntu Linux with XBMC, rather than use Microsoft Windows.
Also, as the XS35GT contains no DVD or CD reader, we will be using a USB memory stick as a replacement for a CD/DVD boot/install media, so ensure you have one handy. A 1GB or 2GB device should be sufficient. The XS35GT refused to boot off one of my USB memory sticks and so I had to try another one that it would boot from, so if you get this problem just try another stick and you will be OK.
This installation how-to assumes you have installed a memory module and have either an SSD or HDD installed in the XS35GT case. I installed 2GB RAM, and a 32GB SSD. If you will be using the XS35GT purely as a streaming client connected to a NAS, then a small capacity SSD/HDD like 30GB is sufficient.
Additionally, this guide assumes you have attached an MCE certified remote control unit, as this will work out of the box, with no extra work.
This guide also assumes you will be setting up wired networking. You can easily find instructions elsewhere if you need to get wireless networking working.
I would recommend plugging a USB keyboard into the XS35GT for the installation process, and also during the setup of XBMC.
I have compiled this guide from various notes and so if anything doesn’t work, just leave a comment, preferably with a description of what’s wrong and what it should be, so I can correct it.
The guide is split into the following sections:
- Install the latest BIOS
- Change BIOS settings
- Install XBMC Dharma beta 2 Live
- Fix the invisible terminal screen problem
- Make the wired network work
- Make the wireless network work
- Get the HDMI audio working
- Customise XBMC settings
- Tuning the SSD
Before installing any software, I recommend downloading and installing the latest BIOS: version 1.09. However, I just took a look now and I can’t see the 1.09 BIOS, so it’s possible Shuttle removed this new BIOS recently — perhaps they noticed a serious bug? If you cannot see BIOS 1.09 or later, then you can skip this whole section and move on to installing XBMC etc. However, in future when a new BIOS comes out you may find these instructions helpful.
Download the version 1.09 BIOS here.
The BIOS file seems to be called XS35_SHB.109.zip.
Update: Due to people asking for this deleted BIOS 1.09, I have made it available here.
After downloading, unzip the BIOS files into a directory — let’s call it ‘bios’.
We’ll use a USB memory stick to install from, and we need to install a bootable copy of DOS to a USB memory stick, and then copy the ‘bios’ directory into the DOS directory on the USB stick.
The program we will use to create a bootable DOS on the USB memory stick is called UNetBootin and it can be downloaded from here.
The UNetBootin image allows you to install various operating systems to USB memory stick and we will use a free version of DOS called FREEDOS. Follow these steps:
- Use UNetBootin to install FREEDOS 1.0 to the USB memory stick
- Copy the ‘bios’ directory onto the USB memory stick
- Boot the XS35GT with the FREEDOS usb stick
- Select FREEDOS Live (don’t accept the default which is to install to hard drive)
- From the DOS command line, type ‘C:’ and hit enter key, and then cd into the ‘bios’ directory where the BIOS files are (e.g. cd bios)
- Type ‘flash’ and hit enter
- Be sure to wait until the flashing of the BIOS has completed (don’t interrupt it or the XS35GT is probably toast)
To enter the BIOS screens, turn the XS35GT on and hit the DEL key continuously on your USB keyboard until the BIOS screen is displayed.
If you managed to update to the new 1.09 BIOS, you will find a new item in the BIOS which allows you to enable the WLAN to be turned on permanently.
Also, whilst you’re in the BIOS turn on the AHCI mode for SATA, and on the Boot screen, change the boot order: make the first boot device the USB memory stick (must be plugged in whilst you’re in the BIOS), and make the second boot device the SSD or HDD that you will ultimately install Linux/XBMC onto.
Once all BIOS changes have been made, hit the F10 key to save your changes and reboot.
The next step is to download XBMC Dharma beta 2 Live from here.
Once you have downloaded the image file ‘xbmc-Dharma_beta2-live.iso’ it’s time to run the UNetBootin program again. In the UNetBootin screen, select the ‘Disk Image’ radiobutton, and then click the button at the end of the row to locate the ‘xbmc-Dharma_beta2-live.iso’ file.
Once you have located the ‘xbmc-Dharma_beta2-live.iso’ file from within your file system, the next step is to select the target device to ‘burn’ the image to. This is the time to select your USB memory stick.
Then click the ‘OK’ button and wait until the image has been written to the USB memory stick.
You now have a bootable USB memory stick ready to install XBMC Dharma beta 2 Live to your XS35GT’s SSD or HDD.
Now insert the USB memory stick into one of the XS35GT’s five USB ports and boot the XS35GT. Assuming you changed the BIOS settings so that it boots first from the USB memory stick, you should see a GRUB bootloader menu screen, which has ‘UNetBootin’ written at the top. Now select the option to install XBMC Live.
Once the installation starts, you will be asked for country, language etc, keyboard type etc.
Soon you will see a red screen which informs you that the installer was unable to detect any network. We will fix this later. Just select the ‘continue’ option for now.
Next you will see the setup screens for which drive/partition to install to. I just selected ‘use whole drive’. Select continue and wait for the installer to complete installation.
Next you will be asked for a user name to create. Use anything you like, for example ‘media’ or ‘xbmc’ etc. Remember this and the password, of course, as you will need it later.
When the installer completes the installation, it will tell you to remove any installation media like CD, DVD or in our case the USB memory stick. Do not remove the USB stick because we need to fix a problem which disables the terminal/command line functionality. So, leave the USB memory stick plugged in and reboot when the installer says installation is complete.
When you reboot the XS35GT after installation, when the UNetBootin GRUB bootloader screen appears, this time select the ‘XBMC Live (safe mode)’ (not INSTALL XBMC Live!) and move on to the next section.
There is something wrong with the installation of XBMC Live and this results in CTRL-ALT-F1 giving a black terminal screen, but you cannot see what you are typing. This seems to be caused by some resolution incompatibility, but we will fix it by editing a configuration file.
To cut a long story short, we will edit a file which is normally generated, and so normally we should not edit this file directly. Let’s edit it anyway.
If you followed the previous instructions and booted from the USB memory stick and selected ‘XBMC Live’ from the UNetBootin GRUB bootloader menu, you will soon see the XBMC screen. Now hit CTRL-ALT-F1 to get a terminal session. Login with the username and password you specified during installation and continue with the steps below:
Mount the SSD/HDD where the installed code is:
$ sudo mkdir -p /mnt/ssd
$ sudo mount /dev/sda1 /mnt/ssd
Then I edited the file generated by update-grub, which is naughty but it worked:
$ sudo nano /mnt/ssd/boot/grub/grub.cfg
Then I searched for the lines containing “gfxmode=…” and deleted all the resolutions listed and changed the line to be “set gfxmode=800×600@16”. You might find another resolution works better for you.
Then I searched for the lines containing “set gfxpayload=…” and deleted all the resolutions listed and changed the line to be “set gfxpayload=800×600@16”. You might find another resolution works better for you.
Then save the file, remove the USB stick, and reboot the machine.
Now that you have a working terminal you can install the network driver.
I have the latest compiled 126.96.36.199 version of the wired ethernet driver available here.
Download it and unzip the file. This driver will work with the ubuntu kernel version 2.6.32-24 that XBMC Dharma beta 2 Live uses.
Now do the following:
copy the jme.ko driver file to the root directory of a USB memory stick and plug it into the XS35GT
$ sudo mkdir -p /mnt/usbstick
$ sudo mount /dev/sdb1 /mnt/usbstick
$ cd /lib/modules/2.6.32-24-generic/kernel/drivers/net/
$ sudo cp /mnt/usbstick/jme.ko /lib/modules/2.6.32-24-generic/kernel/drivers/net/
$ sudo chown root:root jme.ko
$ sudo chmod 644 jme.ko
$ sudo modprobe jme
Now that the driver is installed, you need to configure your network. For simplicity, I assume your router contains a DHCP server to provide IP addresses to requesting connected network devices.
$ sudo nano /etc/network/interfaces
# add these 2 lines:
iface eth0 inet dhcp
$ sudo /etc/init.d/networking restart
You should now have wired ethernet networking operational. Type the following to see your IP address:
$ sudo ifconfig -a
Under the ‘eth0’ section, look for the ‘inet addr:’ subsection and you should see a valid IP address there…
If you intend to use the wireless networking (RTL8192SE), then update to BIOS 1.09 as it contains an option within the BIOS to keep the wireless networking on all the time. Once the BIOS is installed, using the method detailed above, enter the BIOS and select the option “wireless always on”.
Now it’s time to install the driver for wireless networking.
1. Download sources from here.
$ cp -r /mnt/rtl8192se_linux_2.6.0017.0705.2010/ /usr/local/src/
$ cd /usr/local/src/rtl8192se_linux_2.6.0017.0705.2010/
# make install
apt-get install build-essential subversion module-assistant
3. Generate wpa-psk hex key
wpa_passphrase “wlan network name” “plaintext passphrase”
4. Edit /etc/network/interfaces and add the following:
iface wlan0 inet dhcp
wpa-ssid “wlan network name”
wpa-psk “generated wpa key from step 3 or alternatively plaintext passphraase”
5. protect the network key
sudo chmod o=-r /etc/network/interfaces
Reboot and you should now have wireless networking.
This is the most tricky part of the installation, and if you don’t perform this step you will have no HDMI audio working, as you need to ensure you have the latest ALSA library and that the mixer channels are unmuted.
However, before we get ALSA up-to-date and operational, first check that the audio settings on your HD TV are set to digital. The reason I mention this is that on my first install of ALSA, I still had no sound and I was wondering why. In the end, I discovered that my ALSA was working, but because of a default audio setting on my TV, where audio was set to ‘Auto’, I heard no sound from XBMC using the HDMI setting. To make it work correctly, I had to switch the audio output on my TV from its default ‘Auto’ setting to ‘Digital’, and then all was working well.
Another gotcha you may discover is that after rebooting your XS35GT after ALSA SPDIF channel unmuting, you will have no sound output. This is because it seems that the changes to unmute the mixer channels are lost after reboot, so ensure you have the following in your /etc/rc.local file, which will unmute the mixer channels after reboot for you:
$ sudo nano /etc/rc.local
# Add the following lines:
# Unmute ALSA mixer so we can hear HDMI audio
/usr/bin/amixer -q -c 1 sset ‘IEC958’,0 unmute &> /dev/null
/usr/bin/amixer -q -c 1 sset ‘IEC958’,1 unmute &> /dev/null
/usr/bin/amixer -q -c 1 sset ‘IEC958’,2 unmute &> /dev/null
/usr/bin/amixer -q -c 1 sset ‘IEC958’,3 unmute &> /dev/null
# Enable USB0 port so it has power to respond to MCE remote wakeup: USB0 is the port next to the
# capped VGA port
echo USB0 > /proc/acpi/wakeup
# To check which USB ports are enabled during suspend:
# cat /proc/acpi/wakeup
# USB ports layout for the xs35gt:
# EUSB = front
# USB0 = back usb port next to the capped vga
# USB1 = next to USB1
# USB2 = back usb port next to the vga
# UBS3 = back usb port next to the lan
# Changes in this block are SSD optimisations that are required if you perform the SSD
# optimisations listed at the end of this guide.
# 1. Force filesystem to use noop disk scheduler (good for SSDs as no moving parts)
echo noop > /sys/block/sda/queue/scheduler
# 2. Discourage swapping to the max
echo 1 > /proc/sys/vm/swappiness
The last line of /etc/rc.local should be ‘exit 0’.
The version of ALSA included in the install is version 1.0.20 and we will upgrade it to version 1.0.23 in the following steps.
Please note that these notes were taken from an older guide that worked with ALSA version 1.0.20 and unfortunately one or two file names have changed. You will obviously notice when a file name doesn’t exist: just look for a similar looking file name and this is most likely the right file to edit.
Advanced Linux Sound Architecture Driver Version 1.0.20.
To avoid problems during the upgrade of Alsa-utils, we need to stop it with the following command :
sudo /etc/init.d/alsa-utils stop
sudo stop xbmc-live
sudo stop xbmc
We must then install the necessary tools to compile along with the kernel headers :
sudo apt-get -y install build-essential ncurses-dev gettext xmlto libasound2-dev
sudo apt-get -y install linux-headers-`uname -r` libncursesw5-dev
Then, we go in our personal home folder and download alsa-driver, alsa-lib and alsa-utils :
rm -rf ~/alsa* ~/.pulse*
After that, we create a new folder for the compilation and installation of the 3 files. Then, we move the 3 tar files that we just downloaded in this folder :
sudo rm -rf /usr/src/alsa
sudo mkdir -p /usr/src/alsa
sudo cp ~/alsa* .
Unpack the 3 tar files :
sudo tar xjf alsa-driver*
sudo tar xjf alsa-lib*
sudo tar xjf alsa-utils*
We compile and install alsa-driver :
sudo make install
We compile and install alsa-lib :
sudo make install
We compile and install alsa-utils :
sudo make install
Then, we remove the 3 tar files in our personal folder that are not anymore necessary :
rm -f ~/alsa-driver*
rm -f ~/alsa-lib*
rm -f ~/alsa-utils*
Then, just restart your computer and your ALSA version should be 1.0.23.
You can verify that you have now indeed have this version of ALSA:
Advanced Linux Sound Architecture Driver Version 1.0.23.
Just to be sure everything is well configured, execute this command :
then we’re gonna setup HDA Nvidia card in XS35GT
sudo nano /etc/modprobe.d/sound.conf
paste following line and save:
options snd-hda-intel enable_msi=0
reboot the computer, the next step is to unmute nvidia audio:
press F6, select HDA Nvidia, unmute all SPDIF there (‘M’ key), and unmute each channel by using cursor left/right keys to navigate.
Now we have to find out card # and device # of Nvidia HDMI so we can set it in xbmc:
note your card # and device # we’re going to use them for test then set up in xbmc
card 1: NVidia [HDA NVidia], device 7: NVIDIA HDMI [NVIDIA HDMI]
Subdevice #0: subdevice #0
based those # test your speakers with following command:
speaker-test -D plughw:1,7 -c2
If you don’t hear anything then don’t worry too much, just move on to the next section.
If you followed the guide through to here, you should have a working terminal, working wired network and working ALSA version 1.0.23.
Now there are some important XBMC settings to customise. Reboot your XS35GT and when you get to the XBMC screen, select the System menu, and perhaps System menu again.
Configure HDMI audio
Within the System->Audio menu ensure you have the following settings for HDMI audio to work:
Audio Output: HDMI
Audio Output Device: Custom
Custom Audio Device: plughw:1,7
Passthrough Audio Device: Custom
Custom Passthrough Device: plughw:1,7
Now you should have working HDMI audio.
VDPAU=Video Decode and Presentation API for Unix. This gives hardware acceleration for video presentation.
Now to get VDPAU working, go into the System->System->Video->Playback menu and enable the button for the “Allow hardware acceleration (VDPAU)”.
Configure Video source
Now to test out your setup for working network, sound and video, set up a video source. Assuming you are streaming video from your NAS, select the Video menu from the XBMC main menu and then select the ‘Add source’ item. Then select browse and select the ‘Add network location…’ menu item. This will then enable you to enter the network protocol (SMB/CIFS), server name/IP address of the NAS, the name of the share (shared folder), and the user name and password to use during access to the share. Once that works you are ready to test XBMC by playing your first video.
You will also want to calibrate the video output to fit your TV screen size correctly, and this can be found in the System->System->Video menu, if I remember correctly.
There are many, many more settings you can tweak, but these are the most important ones to set correctly.
Apparently, XBMC does not write heavily to the SSD, but if you use it in Library mode then XBMC will suck down lots of small image files, and so you might want to enable TRIM functionality, which has been backported and is available in the version of Ubuntu Linux installed.
If you decide to enable TRIM functionality then you might find this guide useful.
In addition to the mount option ‘discard’ to enable TRIM, I also:
* added the ‘noatime’ option to reduce writes to the SSD
* changed the default disk scheduler from [cfq] to [noop] as seek times are identical for all sectors on the SSD
* forced the ‘swappiness’ to 1 instead of the default value of 60 to reduce Linux’s aggressiveness for swapping to the minimum
That’s all folks!
I wrote this guide in a hurry, so I have undoubtedly made mistakes. Please report any errors or broken bits in the comments below.
If you get stuck, try reading this forum thread from around page 7 onwards. It’s where I helped get this machine configured with a few other people when the box appeared on the market in mid September.