Home > Linux, Texas Instruments OMAP 3 > Xibo Digital Signage on ARM (Beagleboard / Overo)

Xibo Digital Signage on ARM (Beagleboard / Overo)

Xibo (pronounced eX-E-bO) is an open source, multi-display, multi-zone, fully scheduled digital signage solution written in Python (there is also a dotnet version). This is a client /server solution that can run on Windows or Linux.

If you are not familiar with Xibo you can visit http://xibo.org.uk/ or/and read my introduction XIBO: An Open Source Digital Signage Server/Client.

Since I had not seen digital signage solution running on low cost ARM development platform such as Beagleboard, Pandaboard or Origen, I decided to give the Xibo python client a try using qemu to emulate Gumstix Overo COM (OMAP 3530). Porting Xibo to ARM could provide several benefits compared to x86 platform:

  • Lower hardware cost
  • Lower power consumption (and electricity bill)
  • Smaller form factor allowing easier integration in displays and in transportation (e.g. buses, subway trains).
  • Easier to implement new digital signage features such as touch screen support, 3G connectivity, location based advertisement (with GPS), etc…

Please note that usually the hardware cost is not very critical in digital signage as most of the cost is related to maintenance (e.g. content update).

Since I just wanted to see if Xibo could run, the initial goal was to run a simple layout with pictures and text so I disabled Berkelium the library to render webpages (more on that later). [Update: I've now cross-compiled Berkelium so that you can run the full version of Xibo on ARM]. The host computer runs Ubuntu 11.04 (Natty) and I used Xibo 1.3.1 (development release) client and server.

Here are the steps I followed:

  • Setup QEMU to emulate the Overo COM and run the ARM Internet Platform (ALIP)  image based on linaro.
  • Cross-compiled libavg for ARM and copy the binaries files in the qemu image, since this is needed by the python client. After the steps described in Cross-compile libavg for ARM are completed, copy the files as follows:

    mkdir mnt
    sudo mount -o loop,offset=$[106496*512] overo_sd_alip.img mnt
    cp libs/lib/python2.7/site-packages/libavg/* mnt/usr/lib/python2.7/site-packages/libavg/ -rf
    cd mnt/usr/lib/python2.7/dist-packages/
    mv libavg libavg-old
    ln -s ../site-packages/libavg libavg
    cd ../../../../..
    sudo umount mnt

  • Start qemu for the Overo board:

    sudo qemu-system-arm -M overo -m 256 -drive file=./overo_sd_alip.img,if=sd,cache=writeback -clock unix -serial stdio -device usb-kbd -device usb-mouse

  • Install the Xibo Python Client, by running the following script (xibo-install.sh) as root in the qemu terminal:
    #!/bin/sh
    apt-get update > /dev/null
    apt-get install wget
    apt-get install bzr
    apt-get install -y libdc1394-22 libgraphicsmagick++3 libgraphicsmagick3 bzr python-soappy python-feedparser python-serial libavcodec52 libavformat52 libswscale0 libsdl1.2debian-pulseaudio libvdpau1
    apt-get install libboost-python1.42.0
    apt-get install libboost-thread1.42.0
    apt-get install libavcodec-dev
    
    cd /opt/xibo && bzr branch lp:xibo pyclient
    
    ## renames the directory
    # mv biela pyclient
    
    # grants 777 read/write permissions to all
    chmod -R 777 /opt/xibo
    # opens configuration client by Matt Holder
    cd /opt/xibo/pyclient/client/python/ && ./configure.py
    
    echo " "
    echo "========================================================"
    echo " All done. Navigate to /opt/xibo/pyclient/client/python"
    echo " to make changes to site.cfg "
    echo " For more info on the Python client, visit: "
    echo " http://wiki.xibo.org.uk/wiki/Install_Guide_Python_Client"
    echo "========================================================"
    echo " "
  • Alternatively, instead of running ./configure.py, you could configure the Python Client manually:

    cd /opt/xibo/pyclient/client/python
    cp site.cfg.default site.cfg
    vi site.cfg

    And change xmdsUrl to match your server IP, xmdsKey to a key of your choice (will be used during server installation below) , set requireXmds=true and change width and height to set the window resolution.

  • Modify the source code of the Python client to disable the BrowserNode plugin.Edit XiboClient.py in /opt/xibo/pyclient/client/python and comment out the following line:

    self.player.loadPlugin(“libbrowsernode”)

  • Run Xibo Python Client:

    sudo ./run.sh

After a while you should be able to see the Xibo splash screen.

Qemu Overo running ALIP image and Xibo Oepn Source Digital Signage

Xibo Console and Splash Screen in Qemu

  • Install and Configure the server on Linux and/or Windows.

You can do this part at any stage during installation, e.g. while your computer builds libavg.

If you want to install the server on Windows XP, you can follow the instructions I provided in XIBO: An Open Source Digital Signage Server/Client (for server installation). To install xibo in Linux (e.g. on the host where the emulator is running), refer to http://wiki.xibo.org.uk/wiki/Install_Guide_Xibo_Server. After that you’ll need to create a layout, add media files and schedule the layout for the client. You can learn how to do that in Xibo Open Source Digital Signage Tutorial / Demo. Remember to license the client in Xibo dashboard.

I only tried a layout with 2 pictures (no videos due to performance issues) and a text zone in the bottom. The 2 pictures zone could show perfectly, but the text zone could not. The reason is that the text is converted to an html file (accessible in /opt/xibo/pyclient/client/python/data) . So even for text display, the Berkelium library is needed contrary to what I expected initially. So finally, I converted the text zone into a picture zone in order to achieve the result below.

Xibo Python Client for ARM on Beagleboard

Xibo Client Running in Qemu for OMAP 3 with 3 Picture Zones

Xibo Python Client can run successfully in an ARM platform running Linux. Further work would be needed to achieve full functionality:

  • Cross-compiling Berkelium.
  • Cross-compiling libbrowsernode.
  • Try Xibo Client on real hardware.
  • Performance Optimization for the target platform (e.g. Hardware Video decoding).

 

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

  1. October 7th, 2011 at 01:09 | #1

    Hello, I am completely on board with you on this project. I have been tasked with creating a cheap solution for digital signage. I am highly anticipating the release of the RaspberryPi ARM boards http://www.raspberrypi.org . The end goal would to be like you said and with combination of XIBO and RaspberryPI create an extremely cost effective solution for digital signage. I currently have a BeagleBoard to test configurations with, but my skill sets in the programming areas may not be advanced enough to continue to cross compile the remaining libraries. Do you know of any projects to convert: libavg, Berkelium, and libbrowsenode to the ARM architecture? I am going to make every attempt I can to complete this project. If you can provide any further details, I would greatly appreciate it. On a side note I was quoted almost $60k for some digital signage (cisco digital media manager) for up to 10 TVs. A solution to this project would be a god send to smaller companies and the educational environment. As we typically don’t have the budgets required for enterprise solutions. I greatly appreciate the work that you’ve already done. Can we continue to move forward to finish out the rest of the Python Client for ARM?

    Best Regards,
    Evan Duncan

  2. Gianluca
    October 7th, 2011 at 21:24 | #3

    Hi ,
    thanks a lot for your usefull article.
    I had installed xibo as python client on ubuntu desktop 11.04, and it works great !
    But, how can insert the command on ubuntu to automatic launch the xibo client every time the system startup ?

    thanks in advance.
    Gianluca

  3. October 19th, 2011 at 21:06 | #5

    @cnxsoft
    Good Morning Gianluca,

    I have been slowly but surely getting the beagleboard working with xibo. I’m having trouble with building the Mesa libraries though.
    When I run:

    CFLAGS=”-I/usr/include”
    X11_LIBS=”-L/home/ubuntu/edev/beagleboard/libs/lib/arm-linux-gnueabi -lX11″
    X11_INCLUDES=”-I/usr/include”
    X11_CFLAGS=”-I/usr/include”
    ./configure –target=arm-linux-gnueabi –host=arm-linux-gnueabi –prefix=/home/ubu$
    #make

    I get the following errors:
    ./build.sh: 3: -lX11 : not found
    configure: error: unrecognized option: ‘–target=arm-linux-gnueabi’

    I copied the xorg libraries and X11 folder from /usr/lib to ~/edev/beagleboard/libs/lib/arm-linux-gnueabi.
    I went to ./configure –help to look for switches to figure it out myself but I couldn’t find -target. Plus its saying -lX11 not found. Any suggestions?
    -Evan Duncan

  4. October 19th, 2011 at 22:00 | #6

    @Evan Duncan
    Hi Evan,

    Did you follow the instructions at http://www.cnx-software.com/2011/10/03/cross-compiling-mesa-3d-graphics-library-for-arm/ ?

    I think there is also a problem with WordPress, it will reformat the command (I’ll have a look at this): It should be –target and –host (not -target, -host)

    Do you have libX11.so in /home/ubuntu/edev/beagleboard/libs/lib/arm-linux-gnueabi ?

    On Beagleboard, I don’t think you really need to cross-compile Mesa since it should already part of the rootfs (if you use ALIP).

    PS: I have also tried to cross-compile Berkelium for ARM, but still have some issues:
    http://www.cnx-software.com/2011/10/15/cross-compiling-berkelium-and-chromium-os-for-arm/

    Jean-Luc

  5. October 19th, 2011 at 22:04 | #7

    @Evan Duncan
    on a side note, I have also started to play with Raspberry Pi via an Emulator: http://www.cnx-software.com/2011/10/18/raspberry-pi-emulator-in-ubuntu-with-qemu/

    I use a different toolchain for the Raspberry Pi (Sourcery G++ Lite IA32 GNU/Linux), although linaro gcc could probably still be used for that purpose. But since Linaro focuses their work on Cortex A8/A9 processor, I’m not so sure about support for ARM11 (armv6).

  6. October 20th, 2011 at 05:21 | #8

    @cnxsoft
    Jean-Luc,

    I extremely appreciate your efforts. I have had a day of compiling errors I’ve been trying to sort through on the beagleboard. I downloaded the Raspberry PI VirtualBox VM from the official RaspberryPI Forum, but I’m not quite sure how to use ScratchBox2 yet. I like working on the beagleboard because I know its

    If you would email me [email protected] I would like to send you a config.log from a Mesa build error that I got on the beagleboard. You might be able to look at it and figure it out very quickly.

    Do you think that it will be possible to run Xibo on the RaspberryPI or do you think it will be very limited due to the ARMv6 Architecture? Again, all your work is appreciated. I’ve learned a great deal through this project.
    -Evan Duncan

  7. Max
    October 26th, 2011 at 17:01 | #9

    Hello,

    Great job getting Xibo to work on ARM. However, I am wondering if it is possible to get it working on Android (with ARMv7) instead of ALIP as in this article? Do you think it is possible to wrap up your ARM versions of libavg and Berkelium using NDK and run the client in SL4A (python)? It sounds like dependency hell to me though. I am new to Android so I would really appreciate your advice, any advice.

    Cheers,
    Max

    • October 26th, 2011 at 17:45 | #10

      Hi Max,

      Actually I have not fully finished porting Xibo on ARM as I still have issues with Berkelium.

      Regarding your question about getting it in Android, I don’t know enough to give a proper answer. Android support Python (via SL4A), C/C++ programming via the NDK and Berkelium makes use of the Chromium browser, but Linux uses X11 for display management and Android another display manager. I don’t think that’s so easy or many other Linux applications would have been ported to Android that way. If you use the NDK the libraries would also need to be recompiled for different hardware platforms, so you’d lose the benefit of having cross-platform software (except for the Python part).

      To better understand the challenges, you can check the presentation slides below explaining possible method and issues to port Linux app to Android.
      http://www.cnx-software.com/2011/10/20/leveraging-androids-linux-heritage-at-android-open-2011/

  8. Max
    October 31st, 2011 at 09:03 | #11

    @cnxsoft
    Thank you, sir.

    I totally agree that X11 to SurfaceFlinger conversion sounds daunting. There is also the OpenGL to OpenGL ES issue too. Guess the idea of porting libavg to Android isn’t a good idea after all. Coding up a player from scratch might be a lesser challenge, maybe.

  9. Octavio
    July 5th, 2012 at 10:44 | #13

    Hi all, I am trying to use a beagleboard to run xibo client, I get the HW today , is running Angstrom. My question is Do I need to compile the libraries that you mention here? I am planning to install ICS what do you recommend? I need to make a demo in ten days… do you recommend that I should try with another option?

  10. July 5th, 2012 at 10:53 | #14

    @ Octavio
    If you have to play video, find another solution.
    If you’re OK with displaying pictures, text and possibly webpages (without java and flash), then you could try out Xibo.
    You’d have to build all libs above and some more: http://www.cnx-software.com/2011/11/04/xibo-digital-signage-on-arm-full-version/

  11. Octavio
    July 5th, 2012 at 13:41 | #15

    thanks a lot, I will try with other option for the demo, after that I will continue trying to run xibo in beagleboard. I will tell you my advances.

  12. Taylor
    November 30th, 2012 at 00:24 | #16

    How did you get the flash-plugin nonfree? Or did you just omit this from the sh file?

  13. November 30th, 2012 at 09:55 | #17

    @Taylor
    I can’t really remember, I probably just omitted this part since flash does not work on ARM Linux.

  14. Albert
    March 15th, 2013 at 17:57 | #18

    i cross-compile the libavg-1.7.1 for the Ebv beagle Board
    i use arm-none-linux-gnueabi-
    and when i go to configure :
    CFLAGS=”-I/usr/arm-linux-gnueabi/include/gtk-2.0 -I/usr/arm-linux-gnueabi/include/glib-2.0″ CXXFLAGS=”-I/usr/arm-linux-gnueabi/include/gtk-2.0 -I/usr/arm-linux-gnueabi/include/glib-2.0/ -I/usr/arm-linux-gnueabi/lib/glib-2.0/include/ -I/usr/arm-linux-gnueabi/include/pango-1.0 -I/usr/arm-linux-gnueabi/include/cairo/ -I/usr/arm-linux-gnueabi/include/librsvg-2″ LDFLAGS=”-lgdk_pixbuf-2.0 -lavcodec -lavutil -lavformat -lswscale -lSDL -lpango-1.0 -lpangoft2-1.0 -lrsvg-2″ ./configure –target=arm-linux-gnueabi –host=arm –with-sdl-prefix=/usr/arm-linux-gnueabi –prefix=/home/albert/CodeSourcery/Sourcery_G++_Lite/lib

    i get this error:

    configure: WARNING: if you wanted to set the –build type, don’t use –host.
    If a cross compiler is detected then cross compile mode will be used
    checking build system type… i686-pc-linux-gnu
    checking host system type… arm-none-linux-gnueabi
    checking target system type… arm-unknown-linux-gnueabi
    checking for arm-none-linux-gnueabi-gcc… arm-none-linux-gnueabi-gcc
    checking whether the C compiler works… no
    configure: error: in `/home/albert/Bureau/libavg-1.7.1′:
    configure: error: C compiler cannot create executables
    See `config.log’ for more details

  15. extend
    May 23rd, 2013 at 16:56 | #19

    Hello,

    i have a probleme with network connection in qemu hen i run beagle_sd_alip_x11.img http://www.cnx-software.com/2011/09/26/beagleboard-emulator-in-ubuntu-with-qemu/

  16. May 23rd, 2013 at 17:22 | #20

    @extend
    AFAICR, it’s normal, there’s no network in Qemu for Beagleboard.

  17. extend
    May 23rd, 2013 at 17:28 | #21

    @cnxsoft

    there is no solution for this probleme ?
    haw i can run a emulation of beagle board in qemu with network work ?

  18. May 23rd, 2013 at 17:35 | #22

    @extend
    The solutions is to use to Overo image. It’s also an OMAP3 board.

  19. extend
    May 23rd, 2013 at 17:37 | #23

    @cnxsoft

    where i found the overo_sd_alip.img or haw i can regenrate this image ?

    thank you

  20. May 23rd, 2013 at 17:45 | #24

    @extend
    It’s in the instructions in this post…

  21. August 26th, 2013 at 17:37 | #25

    hi!
    can u pleas help me!
    i”m currently launching my digital signage with .3 adverts and it’s working perfectly fine, but the problem i have is that i can’t get out of the advertisment even if im pressing keys on my keyboard,the only thing i have 2 do is to switch off my Pc.
    can u help me by showing me how to get out without switching off my PC?
    thank you

  22. August 26th, 2013 at 17:43 | #26

    @Grace
    Try Alt+F4 to exit the application.

  23. January 27th, 2014 at 17:56 | #27

    where i download overo_sd_alip.img?

  24. January 27th, 2014 at 18:05 | #28

    @extend
    you find a solution?

  25. January 27th, 2014 at 18:09 | #29

    @Keyur
    OK, I understand the confusion now.. The instructions are @ http://www.cnx-software.com/2011/09/26/beagleboard-emulator-in-ubuntu-with-qemu/ . I just use another file name.

    I don’t recommend using Xibo Linux on ARM however, unless you just want to display picture and text (or simple HTML files).

  26. February 3rd, 2014 at 16:22 | #30

    I run xibo-install.sh file in beagleboard-xm but some script is not running.
    Is it xibo run on beagleboard-xm actually? not in qemu emulator.
    Give me a reply please.
    Thank you.

  27. February 4th, 2014 at 10:05 | #31

    @Keyur
    I don’t have Beagleboard-XM, but I don’t see why it should not run on the actual hardware, although it’s unlikely it would be very smooth, as there’s no GPU acceleration. For displaying text and pictures, it should be just fine.

  28. February 8th, 2014 at 17:19 | #32

    how to run internet in qemu emulator for beagle board image.
    i tried so much but that is not done.
    please help me. what should i do?
    thanks

  29. m][sko
    February 8th, 2014 at 21:41 | #33

    @keyur
    google for qemu + nat or bridged networking

  1. No trackbacks yet.