Logitech Harmony Universal Remote Linux Software Support

On a friend’s recommendation, I purchased a Logitech Harmony universal remote. Some quick searching online suggested that the unofficial community Linux support for this device was decent.

It took a bit of extra futzing around to get it working under Linux (Fedora 14 in my case), but I got there in the end. Amazingly it supports all my devices (TV, PVR, DVD, RX) despite some of them being ancient and obscure, for example a cheap and cheerful Telefunken DVD player.

Logitech has a web site for configuring and downloading the settings needed to control up to five of your AV devices with the Harmony remote. Unfortunately, the current configuration site balks with an ‘unsupported operating system’ / missing plugin error when visited from a browser running on Linux. Time to head off the beaten track…

The ‘congruity’ package provides a graphical setup for the Logitech Harmony. The process still involves configuring the device from a Logitech website, but at an alternative URL, and some preparation is required:

  1. Install the ‘congruity’ package. In Fedora: sudo yum install congruity
  2. Configure the web browser to ask what to do with download links. In Firefox: Edit->Preferences->General->Downloads->Always ask me where to save files

Now go through the following process:

  1. Plug in the remote via the provided USB cable.
  2. Visit the URL mentioned above.
  3. Create an account (why do I need to provide my name to program a remote control?)
  4. Skip/ignore the “you need to update your software” steps, and eventually a download prompt appears.
  5. Choosing ‘open’ rather than ‘save’ impressively results in the Congruity graphical setup up launching.
  6. Step through the setup boxes as prompted.

However, in my case the remote control detection phrase failed. This was overcome by updating the concordance package from 0.21 to 0.23 and trying again. See further below for the sordid details.

I was then able to select my four devices and program the Harmony remote control unit.

I encountered some teething issues when attempting some tasks with the remote, e.g. the wrong AV input was selected on the TV or the DVD player wouldn’t switch off, but I pressed the ‘help’ button on the remote and it tried some things and made it work!

The only thing I couldn’t get to work was changing the band (AM/FM) on the radio tuner of the AV receiver (Yamaha RX-V361).

Now, provided the devices are in standby mode, it is a one touch action to have everything setup to watch TV, then another to watch a DVD and so on. This saves a lot of fiddling and lengthy explanations to visitors of how correctly set all the various remotes to watch TV, not to mention removing some clutter.

It’s a shame that the Linux configuration is not smoother. Perhaps it could work better by separating out the concordance device identification data, and provide a mechanism for updating that alone, without having to recompile or rebuild the whole package.

It’s also a bit unsettling that future reprogramming of the remote is dependent on Logitech’s website being operational. It feels all too inevitable that bit-rot will set in once Logitech’s priorities shift onto newer products.

Nevertheless, it’s working just well enough for now.

Sordid details:

In different attempts the following errors occurred during the detection phase within the Congruity graphical app:

LibConcordException: libconcord function 'init_concord' failed with error code 11 ('Error connecting or finding the remote')


LibConcordException: libconcord function 'get_identity' failed with error code 1 ('Unknown error')

Now for the investigative diagnostics:

Running the ‘concordance’ command line app to display detected info also failed to find the device in my case: sudo concordance -i

Concordance 0.21
Copyright 2007 Kevin Timmerman and Phil Dibowitz
This software is distributed under the GPLv3.

ERROR: failed to requesting identity
Requesting Identity: Failed with error 1

Digging a bit deeper reveals the relevant USB device ID information, and shows that at some level the operating system is aware of the device:

lsusb | grep -i logitech

Bus 005 Device 006: ID 046d:c122 Logitech, Inc. Harmony 700 Remote


[ 8041.000104] usb 5-1: new full speed USB device using uhci_hcd and address 6
[ 8042.176170] usb 5-1: New USB device found, idVendor=046d, idProduct=c122
[ 8042.176181] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8042.176189] usb 5-1: Product: Harmony Remote 0-0.2.0
[ 8042.176195] usb 5-1: Manufacturer: Harmony Remote 0-0.2.0

Interestingly, while my particular unit was marketed as a “Logitech Harmony 600 Five-In-One Universal Remote”, lsusb reports it as a Logitech Harmony 700 Remote.

Some web searching turned up a useful thread on troubleshooting Harmony software setup with Congruity and Concordance:

i had the same problem.
I bought a Harmony 650, and concordance (0.21) doesnt detect it.
Easy solution: install concordance 0.23″

Now, I tend to prefer the clean solution to the easy one. In Fedora that involves building and upgrading relevant RPM packages (as opposed to downloading the tarball and doing a make install as root, which doesn’t have the traceability that RPM packaging gives).

Here is an outline of the steps:

  1. Remove the existing packages to avoid conflicts later on: sudo yum remove congruity
  2. Install build dependencies: sudo yum install libusb-devel python-devel
  3. Download standard Fedora source packages for libconcord and concordance in order to get the .spec files: yumdownloader --source --disablerepo=ifedora --enablerepo=fedora libconcord concordance
  4. Download the concordance-0.23.tar.bz source tarball in a web browser.
  5. Edit libconcord.spec and comment out the patch lines, and replace references to version 0.21 with 0.23:
    #Patch0: libconcord-0.21-mime-type-def.patch
    #%patch0 -p1
    # Comment out mime file

    The patch lines need to be removed to avoid errors during the rpmbuild phase like the following:

    Reversed (or previously applied) patch detected!  Assume -R? [n] n
    RPM build errors:
        File not found: /home/makerpm/rpmbuild/BUILDROOT/libconcord-0.23-1.fc14.x86_64/usr/share/mime/packages/libconcord.xml
  6. Change to “makerpm” user su - makerpm and copy the spec files in the SPECS directory and the tarball into the SOURCES directory.
  7. Build the libconcord rpm package: rpmbuild -ba libconcord.spec
  8. Install the generated rpm: sudo yum localinstall --nogpgcheck /home/makerpm/rpmbuild/RPMS/x86_64/libconcord-python-0.23-1.fc14.x86_64.rpm
    If this is not done at this point then the latter rpm building will fail with something like:

    error: Failed build dependencies:
    	libconcord-devel >= 0.23 is needed by concordance-0.23-1.fc14.x86_64
  9. Edit concordance.spec and change all occurrences of the version 0.21 to 0.23
  10. Build the concordance rpm package: rpmbuild -ba SPECS/concordance.spec
  11. Install the resultant packages: yum localinstall --nogpgcheck /home/makerpm/rpmbuild/RPMS/x86_64/libconcord-python-0.23-1.fc14.x86_64.rpm
    yum localinstall --nogpgcheck /home/makerpm/rpmbuild/RPMS/x86_64/concordance-0.23-1.fc14.x86_64.rpm
  12. Install congruity again, now that the backend has been upgraded: sudo yum install congruity

Note that I’ve missed some steps above, e.g. some variant of rpmbuild --rebuild xyz.srpm which is left as an exercise for the reader.

Now the concordance tool will be cleanly installed and should show up the device:

[root@orange etc]# concordance -i
Concordance 0.23
Copyright 2007 Kevin Timmerman and Phil Dibowitz
This software is distributed under the GPLv3.

Requesting Identity: 100%                 done
  Model: Logitech Harmony 700 (Molson)
  Firmware Version: 0.2
  Hardware Version: 1.1
  Config Flash Used: 12% (473 of 3904 KiB)

The Ubuntu forum thread also mentioned the following which may be required in some cases:
echo 'SYSFS{idVendor}=="046d", SYSFS{idProduct}=="c122", MODE="666"' |tee /etc/udev/rules.d/custom-concordance.rules
Also tried changing SYSFS to ATTR, based on warnings in /var/log/messages

At this point, the web configuration steps outlined earlier in the post should work, with congruity successfully detecting the Harmony remote, allowing subsequent software setup.

Filed under: AV,fedora,linux,remote controls — admin @ 23:16


NTSC to PAL DVD conversion in Linux

I needed to convert a home-made video (well slide-show with soundtrack really) that was sent over from the USA. Attempting to play this on a PAL-only TV results in unwatchable flickering monochrome output. Based on some instructions for DVD format conversion I was able to convert the NTSC disc to PAL using the steps listed below. This was on a Fedora 10 system with the rpmfusion repos installed.

# Note: about 1.3GB of workspace was required to generate 170MB output, in this case a short slide show with sound track.

yum install vobcopy mjpegtools dvdauthor
mkdir video_work
cd video_work
vobcopy -l
mkfifo stream.yuv
mplayer -ao null -noframedrop -vo yuv4mpeg VIDEONAME.vob &
cat stream.yuv|yuvfps -r25:1|yuvscaler -n p -O DVD |mpeg2enc -n p -f 8 -F 3 -o out.m2v
mplayer -ao pcm -vo null -vc dummy VIDEONAME.vob
# Note: 224000 bits per second (224kbits/sec)
ffmpeg -ab 224000 -ac 2 -ar 48000 -i audiodump.wav audiodump.ac3
mplex -f 8 -o ready-to-master.mpg out.m2v audiodump.ac3
mkdir dvdauthor_out
cat << EOF > dvdauthor.xml
<dvdauthor dest="/data_dir/video_work/dvdauthor_out">
<video />
<vob file="ready-to-master.mpg" />
dvdauthor -x dvdauthor.xml
growisofs -Z /dev/dvd -dvd-video dvdauthor_out
Filed under: AV,fedora,linux — twegener @ 16:23


LightScribe – meh

One of tonight’s tasks was to burn a freshly downloaded Fedora 10 DVD ISO image. My dad gave me some blank LightScribe DVDs a while back, so I thought I’d give them a try, not having done so before.

After a quick look around it appears the only LightScribe labelling software available for Linux is proprietary. LaCie provide the software in RPM packages which is nice if you are a Fedora user like me. (Apparently they have tested it with the other major distros, which is nice to see.) It installed fine under Fedora 10 beta, which was a nice surprise given that it was apparently written for Fedora 5. It didn’t install a menu entry, but firing up the “LaCie Lightscribe Labeller”, ’4L-gui’, provided a reasonably nice experience.

I grabbed some DVD media artwork from the Fedora art team. There were two labels in each image file, so I had to pick one and chop it in half with the GIMP. I then cropped it to remove the alignment patterns, and then did an autocrop to crop to the edge of the DVD label. Then it was a simple matter of importing it in the 4L-gui and selecting ‘fit image height to disc’.

Writing the disc label took a bewilderingly long 15 minutes. I suppose it is effectively doing the same thing as burning a CD, but it’s a big wait for little reward. The inscribed label is a hazy monochrome image that is below the surface of the disc.

In future I think I’ll just use a pen. Nevertheless, it’s interesting to the see the improvement in the quality of Linux software provided by a hardware vendor. It would be even better if they would free the code. This would enable distros to incorporate the software into the main repos, making the experience a bit more streamlined and integrated.

Filed under: fedora,linux — twegener @ 20:28


Sorting package version strings

Interesting less trivial than expected problem (solved): sorting package version numbers:

import re
import rpm

def get_package_version(name):
    """Return version string of installed package."""

    # note: ts can take an argument that is the root of the installation
    #       typically with a var/lib/rpm directory underneath it.
    transaction_set = rpm.ts()

    versions = [header['provideversion'][0]
                for header in transaction_set.dbMatch('name', name)]
    return versions

def version2sortable(version):

    parts = re.split(r'(\d+)', version)
    fields = []
    for part in parts:
            part = int(part)
        except ValueError:
    return tuple(fields)

def cmp_versions(a, b):

    return cmp(version2sortable(a), version2sortable(b))

if __name__ == '__main__':
    print get_package_version('kernel')


['', '', '', '', '']

Note: WordPress is screwing up the markup on the code blocks above. If you have any tips on how to fix this please drop me a line.
Update: Using pre/blockquote hack for now and will try out a code highlighter plug-in when I get the chance. Thanks Tim and Lindsay! :-)

Filed under: fedora,Python — twegener @ 22:04


Updating to Fedora 8

A few weekends ago I updated my system from Fedora 6 to Fedora 8. I did a fresh install, as opposed to doing an upgrade. Here are a few of the problems I encountered, along with solutions:

Wireless networking wasn’t working

Fedora 8 detected my Atheros-based wifi card, since it now includes the new freedomware ath5k driver. However I couldn’t get it to associate with my access point. The workaround was to install the proprietary madwifi package from livna: On a machine with Internet access, go to livna.org and download madwifi and the kmod-madwifi package corresponding to the installed kernel (do uname -r to find out). Then do:
su -
rpm -ihv madwiki kmod-wifi
modprobe -r ath5k
modprobe ath_pci

Go to Administration->Services and start/turn on NetworkManager and NetworkManagerDispatcher services. The NetworkManager applet should appear in the system tray. Click on this to configure a wireless connection.

1280×1024 resolution was not available

This resolution was working on my Fedora 6 setup, with an nVidia gforce2 MX 440 and Viewsonic E771 monitor.
To fix, add the following line to /etc/X11/xorg.conf in the “Display”/”Screen” section:
Modes "1280x1024" "1280x1024" "1280x960" "1280x960" "1280x800" "1280x800" "1152x864" "1152x864" "1152x768" "1152x768" "1024x768" "1024x768" "800x600" "800x600" "640x480" "640x480"

Setting up the livna repository

The livna.org repository is a separate repo containing packages that aren’t included in the main Fedora repo for various legal, technical and ethical reasons. I need it for the madwifi driver and the gspca webcam driver among other things. Set it up like so:
su -
rpm -ihv http://rpm.livna.org/livna-release-8.rpm

Installing the webcam driver

The driver for my Logitech Quickcam IM webcam is freedomware, however apparently it does yucky things like JPEG decoding inside the kernel, so is not included in the mainline kernel. It can be installed from livna like so:
su -
yum install gspca
modprobe gspca

Alternatively, you can install it from the GUI by going to System->Add/Remove Software and searching for gspca.
You can test that the webcam is working by running Ekiga (strangely filed under Internet->IP Telephony blah blah) and setting up video.

Using a home directory on a separate partition

I have my home directory stored on a separate ‘data’ partition. I was not able to log in when I configured my account to use this as my home directory. To fix this, I had to change the SELinux context on the root directory of the file-system on the data partition like so:
chcon system_u:object_r:home_root_t:s0 /data

Fixing broken icons in Evolution

It appears that the necessary dependency isn’t installed by default for a KDE install. Fix the icons like so:
su -c 'yum install nodoka-theme-gnome'

Installing Adobe Flash Player

To install the proprietary Adobe Flash player do:
su -
rpm -ihv http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
yum install flash-plugin

Note that a freedomware flash player, gnash, is in the works, but it only supports a subset of Flash v7 functionality.

Other issues

I’ve had problems with sound not being available upon booting from time to time. This seems to be due to the coexistence of the webcam’s internal microphone sound device, and my main soundcard sound device. I also get ‘artsd’ crash messages upon logging into KDE from time to time.

I hope to cover my impressions of the various Fedora 8 components in subquent posts, but we’ll see how we go.

Filed under: fedora — twegener @ 22:27
Powered by WordPress