Sunday, June 30, 2013

AIM Media Center Remote Control RC118 with Linux and XBMC

Bought myself a new remote control from Maplin yesterday for my media centre running XBMC on Linux (Debian Testing). It's an AIM Media Center Remote Control, model RC118 and only costs £20.


It's nicely made for the price, the only cons are that it's got a Windows logo on one button (uck!) and unlike my old remote (also from Maplin) not all the buttons work 'out of the box' on Linux & XBMC.

The 'pro' of this remote however is that it's a 'standard' MCE RC6 remote so the buttons can be translated and mapped with lirc. I couldn't do this with my old remote as it emulates a keyboard device.

For a relatively popular remote, surprisingly little information can be found on the web on how to set it up properly with lirc and XBMC, just the usual array of forum posts and incomplete or non-working advice. So some reading was required of the lirc & XBMC's Lircmap.xml documentation.

So here's the solution, if you discount creating the map files (as I've supplied them here) it's actually very simple. I've tested this on Debian (Testing) & Fedora 18 so I assume this would work just as well on derivatives such as Ubuntu/Mint and CentOS/RHEL respectively.
 

So first, install lirc...

Either use your preferred software installer GUI or save time by opening a terminal & using the command line;

On Debian & Ubuntu

 sudo apt-get install lirc  

On Fedora

 sudo yum install lirc  


Configure lirc

The lirc daemon is configured with the file /etc/lirc/lircd.conf.
 In the terminal, you can open this file for editing in gedit (or your preferred text editor);
 sudo gedit /etc/lirc/lircd.conf  
Append the following text your lircd.conf.
 begin remote  
  name rc118  
  bits      13  
  flags RC6|CONST_LENGTH  
  eps      30  
  aeps     100  
  header    2700  855  
  one      486  419  
  zero     486  419  
  pre_data_bits  24  
  pre_data    0x1BFF83  
  gap     107341  
  min_repeat   1  
  toggle_bit_mask 0x8000  
  rc6_mask  0x100000000  
    begin codes  
      Power          0x1BF3  
      Record          0x1BE8  
      Stop           0x1BE6  
      Pause          0x1BE7  
      Rewind          0x1BEA  
      Forward         0x1BEB  
      Previous         0x1BE4  
      Play           0x1BE9  
      Next           0x1BE5  
      Zoomout         0x1BD9  
      Zoomin          0x1BDA  
      Eject          0x1BB7  
      Select          0x1BDB  
      Menu           0x1BF2  
      Back           0x1BDC  
      Info           0x1BF0  
      Up            0x1BE1  
      Down           0x1BE0  
      Left           0x1BDF  
      Right          0x1BDE  
      OK            0x1BDD  
      Vol+           0x1BEF  
      Vol-           0x1BEE  
      Chan+          0x1BED  
      Chan-          0x1BEC  
      Mute           0x1BF1  
      PICTURES         0x1BB6  
      VIDEOS          0x1BB5  
      MUSIC          0x1BB8  
      1            0x1BFE  
      2            0x1BFD  
      3            0x1BFC  
      4            0x1BFB  
      5            0x1BFA  
      6            0x1BF9  
      7            0x1BF8  
      8            0x1BF7  
      9            0x1BF6  
      0            0x1BFF  
      Star           0x1BE2  
      Hash           0x1BE3  
      Clear          0x1BF5  
      Keyboard         0x1BA5  
      Edit           0x1BF4  
      Red           0x1BA4  
      Green          0x1BA3  
      Yellow          0x1BA2  
      Blue           0x1BA1  
    end codes  
 end remote  

On Debian...

The Debian package of lirc comes with a /etc/lirc/hardware.conf file, the Fedora install does not and just works without one. On Debian I had to also amend the hardware.conf file by amending the DRIVER & DEVICE variables to...
 DRIVER="default"  
 DEVICE="/dev/lirc0"  
This is likely to be the same for most installations but if in doubt of what your device is, look in /dev;
 ls -l /dev/lirc*  

Restart lirc

 sudo service lirc restart  

Configure XBMC

XBMC already comes with a set of key maps for remote controls via lirc in the file /usr/share/xbmc/system/Lircmap.xml. You can also have a user specific Lircmap.xml in your ~/.xbmc/userdata directory.
Here we'll put our mappings for our 'rc118' lirc remote (this name being defined in our /etc/lirc/lircd.conf file) to our user Lircmap.xml file.

In a terminal, open a new file in gedit (or your preferred text editor);
 gedit ~/.xbmc/userdata/Lircmap.xml  
Paste the following text into your new file;
 <lircmap>  
   <remote device="rc118">  
     <mypictures>PICTURES</mypictures>  
     <liveradio>RADIO</liveradio>  
     <myvideo>VIDEOS</myvideo>  
     <mymusic>MUSIC</mymusic>  
     <record>Record</record>  
     <pause>Pause</pause>  
     <stop>Stop</stop>  
     <skipminus>Previous</skipminus>  
     <play>Play</play>  
     <skipplus>Next</skipplus>  
     <reverse>Rewind</reverse>  
     <forward>Forward</forward>  
     <start>Menu</start>  
     <back>Back</back>  
     <info>Info</info>  
     <volumeplus>Vol+</volumeplus>  
     <volumeminus>Vol-</volumeminus>  
     <left>Left</left>  
     <right>Right</right>  
     <up>Up</up>  
     <down>Down</down>  
     <select>OK</select>  
     <channelplus>Chan+</channelplus>  
     <channelminus>Chan-</channelminus>  
     <mute>Mute</mute>  
     <recordedtv>Eject</recordedtv>  
     <guide>Zoomout</guide>  
     <livetv>Zoomin</livetv>  
     <menu>Select</menu>  
     <one>1</one>  
     <two>2</two>  
     <three>3</three>  
     <four>4</four>  
     <five>5</five>  
     <six>6</six>  
     <seven>7</seven>  
     <eight>8</eight>  
     <nine>9</nine>  
     <star>Star</star>  
     <zero>0</zero>  
     <hash>Hash</hash>  
     <clear>Clear</clear>  
     <teletext>Keyboard</teletext>  
     <enter>Edit</enter>  
     <red>Red</red>  
     <green>Green</green>  
     <yellow>Yellow</yellow>  
     <blue>Blue</blue>  
   </remote>  
 </lircmap>  
Save your new file.

Disable the remote's kernel driver

Now the RC118 remote is handled by lirc you have no need for the Linux kernel to handle it. To prevent XBMC from receiving input from both lirc and xinput (resulting in double key presses for those buttons that did work out of the box) you need to disable the relevant kernel module.

Unload the RC6 decoder driver with the following command;
 sudo modprobe -r ir_rc6_decoder  
To disable this driver so it's not loaded when the system is booted, blacklist it as follows;
 echo "blacklist ir_rc6_decoder" | sudo tee -a /etc/modprobe.d/ir_rc6_decoder.conf  


Now start or restart XBMC and your AIM RC118 remote works completely.

Saturday, April 20, 2013

Tidying up df's line wraps on HP-UX

When running the df command on a HP-UX system, whenever a device in the first column has a long name the line will wrap. This initially makes the command unreliable if you're writing a script that reports on filesystem free space for example.

 $ df -lkP  
 Filesystem     1024-blocks Used Available Capacity Mounted on  
 /dev/vgrs710rsrid2/lvoldata2  
            858283043 676273843 182009200  79%  /data2  
 /dev/vgrs710rsrid2/lvoldata  
            199398672 118367215 81031457  60%  /data  
 /dev/vgrs710jnl/lvoljnl  
            152256633 77300832 74955801  51%  /journals  
 /dev/vgmsa2312t3/lvolmsadata3  
            1857692665 428977413 1428715252  24%  /data3  
 /dev/vgmsa2312t4/lvolmsadata4  
            1717106748 439950342 1277156406  26%  /data6  
 /dev/vgmsa2312t5/lvolmsadata5  
            1947765811 1871078336 76687475  97%  /data5  
 /dev/vg00/lvol4    1041520  93368  948152   9%  /home  
 /dev/vg00/lvol5    10482360 8147296 2335064  78%  /opt  
 /dev/vg00/lvol6    2088120  936752 1151368  45%  /tmp  
 /dev/vg00/lvol7    20934792 16264528 4670264  78%  /usr  
 /dev/vg00/lvol9    9831597  19038 9812559   1%  /var/opt/ignite/depots  
 /dev/vg00/lvol8    10422528 1068448 9354080  11%  /var  
 /dev/vg00/lvol1    522448  279624  242824  54%  /stand  
 /dev/vg00/lvol3    1044448  515952  528496  50%  /  

This can be fixed by piping the output through our old friend awk as follows;
 $ df -lkP | awk '{  
          if ( NR == 1 ) { next }  
          if ( NF == 6 ) { print }  
          if ( NF == 5 ) { next }  
          if ( NF == 1 ) {  
                getline record;  
                $0 = $0 record  
                print $0  
                  }  
          }'  

This bit of awk firstly discards the first header line from df and then in the case where a line has just 1 text field the next line is appended to it and then printed, any lines with 5 fields are also discarded.
This then produces a consistent df output;
 $ df -lkP | awk '{  
          if ( NR == 1 ) { next }  
          if ( NF == 6 ) { print }  
          if ( NF == 5 ) { next }  
          if ( NF == 1 ) {  
                getline record;  
                $0 = $0 record  
                print $0  
                  }  
          }'  
 /dev/vgrs710rsrid2/lvoldata2           858283043 676273843 182009200  79%  /data2  
 /dev/vgrs710rsrid2/lvoldata           199398672 118367215 81031457  60%  /data  
 /dev/vgrs710jnl/lvoljnl           152256633 77300832 74955801  51%  /journals  
 /dev/vgmsa2312t3/lvolmsadata3           1857692665 428977413 1428715252  24%  /data3  
 /dev/vgmsa2312t4/lvolmsadata4           1717106748 439950342 1277156406  26%  /data6  
 /dev/vgmsa2312t5/lvolmsadata5           1947765811 1871078336 76687475  97%  /data5  
 /dev/vg00/lvol4    1041520  93368  948152   9%  /home  
 /dev/vg00/lvol5    10482360 8147296 2335064  78%  /opt  
 /dev/vg00/lvol6    2088120  936752 1151368  45%  /tmp  
 /dev/vg00/lvol7    20934792 16264528 4670264  78%  /usr  
 /dev/vg00/lvol9    9831597  19038 9812559   1%  /var/opt/ignite/depots  
 /dev/vg00/lvol8    10422528 1068504 9354024  11%  /var  
 /dev/vg00/lvol1    522448  279624  242824  54%  /stand  
 /dev/vg00/lvol3    1044448  515952  528496  50%  /  

Sunday, March 24, 2013

Play Freespace 2 natively on Fedora

Was sitting here this snowy Sunday afternoon craving for a bit of good ole space sim action. After a brief flurry of searching the web for something free, recent enough to look cool and immersive and would run under Linux or Wine I was pretty disappointed to find.. not much. (Yes there's Vendetta Online but that's only free for so long). Unfortunately the epic space sim genre is not the vibrant part of the game industry it once was.

I decided to embrace the old school and dig out my copy of Freespace 2 which is meant to run perfectly under Wine according to the Wine AppDB and I remember it very fondly, well after a straight forward Wine install it didn't work on my Fedora 18 installation currently running Wine 1.5.24.
Rather than shuffling towards the drudgery of trying to get FS2 working under Wine or the even worse experience of having to exit what I had running in the background, rebooting into Windows 7 (ugh) and trying to get it working there, I noticed during my search-fest that there's a FreeSpace Source Code Project (FCSP) that is actively developing the open source, multi-platform version of the Freespace 2 binaries called FS2Open! Sometimes life just throws you a bone.

Now it should really end there, I installed the thing, used the old disks to grab the content, had a wail of a time, went and did something else. Erm... no.
As with some open-saucy type projects, the only set of end to end instructions that seems to exist for Linux is a mighty wall of links & text. Their guide is comprehensive but many links and pages are involved and so it becomes a bit of a slog.


Therefore if you're running Fedora and want to begin playing the latest open-source, upgraded FreeSpace 2 the straight forward way then I've documented my simplified, start to finish guide for Fedora 18 for you.

What's required?

To get FS2Open going you need;

The FS2Open engine

This is the open-source Freespace 2 core engine.
Project contributor 'niffiwan' has published some pre-compiled Linux binaries for a range of distros, these are available for download HERE.
You can go ahead and download the appropriate binary for you distro but if you want the latest version of FS2Open you're best just compiling from source as covered in this walkthrough.

A launcher

Launcher software is used to configure and run FS2Open.
The FCSP project's launcher download page gives the option of 3 launcher projects. The official launcher software is called wxLauncher and appears to be the most complete.
For Linux, compilation of wxLauncher from the source code is required. The source comes with build instructions but the Linux section only covers Ubuntu. This gives you little idea of what packages you need to install on Fedora to compile the sofware.

The original game media

Your 3 original Freespace 2 CDs or ISO images.

The FS2Open media enhancements

A lot of work has been done to enhance the original game's content to bring FS2 more up to date. The extra content comes in the form of game mods packaged up in additional VP files
The official download page for the latest MediaVPs is a forum post HERE.
Rather than manually download each file in the browser we'll make things a bit more straight forward later using the command-line.

Let's go..

Firstly open a new terminal.

Install the Fedora packages you'll need

 sudo yum install SDL SDL-devel python python-markdown wxGTK wxGTK-devel openal-soft openal-soft-devel cmake gcc gcc-c++ unshield subversion libvorbis-devel automake autoconf libtheora-devel readline-devel lua-devel libpng-devel libjpeg-devel  

Create game directories under your home directory

 mkdir -p ~/Games/freespace2/temp/mvp  
 mkdir ~/Games/freespace2/temp/src  
 mkdir ~/Games/freespace2/mediavps_3612  

Get the FS2Open source code

 cd ~/Games/freespace2/temp/src  
 svn checkout svn://svn.icculus.org/fs2open/trunk/fs2_open  

Compile & install the FS2Open binaries

Note: we're not doing any optimization here, just the quick and easy get-it-going approach. The full mega-guide is HERE.
 cd fs2_open  
 ./autogen.sh  
 make  
Assuming the compilation went OK copy the binary to your freespace2 directory;
 cp code/fs2_open_* ~/Games/freespace2  


Compile & install wxLauncher

Download

Download the latest source code tarball from the wxLauncher downloads page HERE. Save the file to your Downloads directory.

Unpack

 cd ~/Downloads  
 mkdir -p wxlauncher/build  
 tar -C wxlauncher -xzf wxLauncher-*.tar.gz  

Build

 cd wxlauncher/build  
 cmake -DUSE_OPENAL=1 -DCMAKE_INSTALL_PREFIX=/usr/local ../  

You should see messages confirming a successful build which looks like this;
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yourname/Downloads/wxLauncher-0.9.1/build

Compile

 make  

Install

 sudo make install  


Get the game content.

The next step is to copy the original game content from the FreeSpace 2 CDs (or ISO images if you have them) to the freespace2 directory you created earlier.

Mount the game media

Clearly there are many ways to mount disk and iso images but here's the easy to describe, simple way of doing this. It assumes as you're running Fedora then you'll be running a Gnome 3 desktop, it is the best DE after all.

If you're using CDs, insert the first disk and open it in Gnome 3's file manager 'Files' when prompted.
Alternatively if you have ISO images of the CDs it is just as easy to mount them in Gnome 3, just double-click the ISO file in 'Files' and it will be automatically mounted and appear as a device. You could mount all 3 ISOs at once this way if you wish.

Whether you're using a CD or an ISO file, just hover your mouse cursor over the device to see it's path, this example shows the path of a mounted ISO file;

These paths will be the source of your data extractions.

Extract the data to your game directory

The tool 'unshield' you installed earlier is a tool for extracting files from Microsoft CAB files with InstallShield headers.
With the first disk/ISO mounted unpack data1.cab and put all '.vp' files in your game directory as follows (substituting /path/to/your/cdoriso for the actual mounted disk/ISO path);
 cd /path/to/your/cdoriso  
 unshield -j -d ~/Games/freespace2/temp x data1.cab  
 mv ~/Games/freespace2/temp/*vp ~/Games/freespace2  
For disk/ISO 2 the required vp files are just in the root of the disk, so mount disk/ISO 2 and copy them directly;
 cd /path/to/your/cdoriso  
 cp *vp ~/Games/freespace2  
... and lastly mount CD/ISO 3, like you did with disk 2 copy the vp files directly from it's path to the game directory;
 cd /path/to/your/cdoriso  
 cp *vp ~/Games/freespace2  


Implementing the game enhancements (MediaVPs)

Download the files

The available MediaVPs are packaged up in a number of separate ZIP files.
Download them to your ~/Games/freespace2/temp/mvp directory and unpack them. All together this is a 1.2GB download.
There are cleverer ways to process this list of downloads but the following list of commands requires less explanation here. You can just copy the list of commands and paste into your terminal to perform them in a batch.
 cd ~/Games/freespace2/temp/mvp  
 wget http://mvp.fsmods.net/3612/MediaVPs_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_Root_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_Root_Update.zip  
 wget http://mvp.fsmods.net/3612/MV_Music_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_Assets_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_Assets_Update.zip  
 wget http://mvp.fsmods.net/3612/MV_Effects_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_Effects_Update.zip  
 wget http://mvp.fsmods.net/3612/MV_Advanced_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_AnimGlows_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_RadarIcons_3612.zip  
 wget http://mvp.fsmods.net/3612/MV_CB_ANI_1.zip  
 wget http://mvp.fsmods.net/3612/MV_CB_ANI_2.zip  
A few of these file are optional but we're going full fat here.

Unzip the files

 unzip '*.zip'  

Place the VP files in their own subdirectory which you created earlier.

 mv *vp ~/Games/freespace2/mediavps_3612/  
 mv mediavps_3612/* ~/Games/freespace2/mediavps_3612  
 mv MediaVPS_3612/* ~/Games/freespace2/mediavps_3612  


Running and setting up FS2Open

Now, still in the terminal run wxlauncher;
 wxlauncher  
You'll be presented with something like this;

Nice!

Mods

Select the 'Mods' tab.
Select the MediaVps mod and select the [Activate] button.

Basic Settings

Select the 'Basic Settings' tab.
Select the browse button to set the Game Root Folder to /home/yourname/Games/freespace2.
Select the Refresh button and pick the available FS2 Open executable option.
Once you've picked the executable the video and audio settings should be picked up automatically.
If you have your joystick or gamepad plugged in, select it in the Joystick drop-down.

Advanced Settings

Select the 'Advanced Settings' tab, here's where you can experiment with the many settings available with FS2 Open.
As a starter set the Lighting Presets to 'Baseline Recommended' and the Flag Sets to 'High Memory usage features on'.

Then select/enable the following options;
Graphics section
  • Apply Lighting to Missiles
  • Enable 3D shockwaves
  • Enable Post-processing
  • Enable soft particles
  • Enable FXAA anti-aliasing
HUD section
  • Enable 3D radar
Gameplay section
  • Enable 3D warp
  • Enable flash upon warp
  • Enable 3D models for ship selection
  • Enable 3D models for weapons selection
Audio section
  • Preload mission game sounds






Finally...

There are many user-made mods available that continue the Freespace saga as well as introduce additional stories & universes including Babylon 5 and BSG. Check out the highlights panel on wxlauncher's Welcome tab, the Freespace Wiki and the project's list of user-made campaigns and total conversions list for more details on what's available.

Before you do, don't forget your joystick, hit the Play button and get stuck in...


This should at least see me through until the release of Star Citizen.

Saturday, March 16, 2013

Converting Sony's PlayTV M2TS recordings to Xvid

Recently, I had to replace my PS3 and one of my PS3's main roles for a long time has been as a DVR. The PS3 together with the PlayTV peripheral and the official BD remote does an excellent job of this providing the ability to watch, pause, rewind & record over-the-air TV with a nice HD interface, it even improves image quality due to the PS3's built-in upscaling.

The slow death of my old PS3 together with the timely introduction of Live TV support on XBMC 12 prompted me to take the PlayTV peripheral and stick it in my Linux-based media centre PC running XMBC and setup TVheadend to pull the signal from the PlayTV's tuners. The result of this is the XBMC box has now become our DVR and TV viewing platform as well as all the other media content it serves up, however there was still a lot of decent recordings left on the PS3 that I wanted to keep and having exported them from PlayTV and transferred them from the PS3, I felt that the M2TS files are a little too large to warrant leaving them in that format using all that disk space.

So for any out there who are left with a bunch of these huge M2TS files and want to make them smaller or simply transcode them to a format that is supported by more devices then this post is for you.
Firstly you will need to have ffmpeg installed on your PC together with appropriate Xvid & LAME MP3 libraries.

ffmpeg

As always ffmpeg is my goto toolkit for video convertion and a single MT2S file can be converted to a smaller file without much loss of quality with a one-liner.

Example

 ffmpeg -y -i "awesomeshow.m2ts" \  
 -vcodec libxvid \  
 -b 1200k \  
 -acodec libmp3lame \  
 -ac 2 -ar 44100 -ab 128k \  
 -s 576x460 -threads 2 -deinterlace "awesomeshow.avi"  

In this example the filename of the M2TS file that is being converted (the input file) is 'awesomeshow.m2ts' and I've given the output file the name 'awesomeshow.avi'.

Option tips

-vcodec = video codec

Here I've used the Xvid MPEG4 library to achieve a higher compression ratio than the source file's MPEG2, reducing the size of the output file, also many devices (including the PS3) support Xvid playback.

-b = video bitrate

I've specified a video stream bitrate of 1200 Kbits per second, after lots of tries this seems to be a nice compromise between quality & output file size.

-s = frame size

My PAL TV signal is processed at 576i, the resulting resolution of the original recording is 720x576. In the above example I've used the -s option to reduce the output file resolution to 576x460. This helps to further reduce the output file size.

-acodec = audio codec

MP3 is the common counterpart to the Xvid video codec, it compresses audio well and playback is supported everywhere.
I specified the output audio stream to be a 2 channel stream with a sample rate of 44KHz and a  bitrate of 128Kbps with the -ac, -ar & -ab options.

-deinterlace

As the video source is an interlaced TV signal it will look terrible when played back on a progressive display unless deinterlacing is applied on the transcode or on the player playing the convertion. Therefore I've specified to deinterlace during the conversion with the delinterlace option, this also introduces additional processing on the transcode so ffmpeg will take noticeably longer to complete.

-threads = number of conversion processes

Set this figure to match the number of processor cores on your computer, the more processors you can get to work on the conversion job the quicker it will finish.

Finally, a script...

I had a lot of recordings to convert so naturally, to convert all of them all in one go on my media centre PC which runs a popular Linux distro I wrote a little shell script.
If you want to use this script just save it to your local filesystem (your Downloads directory presumably), pop it in your /usr/bin directory & make it executable;
 cd ~/Downloads  
 chmod +x playtv2xvid  
 sudo mv playtv2xvid /usr/bin  

Then in a terminal 'cd' to the location of your *.m2ts files and run...
 playtv2xvid  

It will show you what M2TS files have been found in the current location, press enter to begin the conversions and all will be logged in a log file for you to review later.

Download the playtv2xvid script here.