Software in context


How to Build a Remote-Controlled Wall Display

28th June 2015

Lately I've appreciated the idea of having instant access to useful information all in a single place. I'm always sporadically checking a variety of devices for things like weather, calendars, breaking news, stock prices, website analytics, and task lists. So as part of a recent smart-home kick, I put together a wall display in my home office that shows everything I want to see at a glance. I figured I spend a lot of time in there, so I may as well consolidate all that frequently accessed information into one field of view. Plus, a wall display is generally just a cool thing to have, especially when it's motion activated and remote-controllable.

The Matrix operator running a wall of displays

For my particular setup, I used the following materials:

  1. VESA compatible thin LED monitor
  2. VESA wall mount
  3. Dedicated server running Ubuntu desktop
  4. DisplayPort to Mini DisplayPort cable
  5. VNC client/server software
  6. WiFi + VPN
  7. Motion sensor and smart switch
  8. Tools: stud finder, power drill, phillips screw driver

A minimal setup is definitely achievable without numbers 5-7.

1. Install the Monitor

I chose this 27" ASUS LED monitor becuase of its light weight and decent price point, matching it up with this well-reviewed VESA wall mount. It's recommended to install the wall mount into a wooden stud because of the heavier load. I used a stud finder and drilled the appropriate holes for the mount. This particular wall mount mechanism allows the VESA brace to be separately screwed onto the monitor, and then slidden into place on the mount, making this a much easier single-handed task.

2. Prepare the Server

This setup requires a dedicated server to run the program that displays stuff. Fortunately I have a couple of NUCs sitting nearby doing other things. I connected the monitor to the server using a DisplayPort cable.

Up to this point I hadn't used this server for anything graphical; I'd been content with Ubuntu Server 14.04. Adding a graphical component to Ubuntu is straightforward:

$ apt-get install ubuntu-desktop

Further instruction here.

3. Configure the Display

At this point, given a keyboard and mouse, I could log into a graphical session and set up the display to show all my information. I can get basically everything I want to look at via a web browser, so I used this Tab Carousel Chrome extension, which will automatically rotate through your Chrome tabs at a configurable rate, periodically refreshing pages. I ended up installing Chrome for Ubuntu; the built-in Chromium gave me some issues with the extension. These are the tabs I started with:

  1. Google Analytics graphs
  2. Daily Asana tasks
  3. Google News
  4. TechCrunch
  5. Drone build statuses
  6. Google Calendar
  7. Google Finance graphs

So far I've been happy with a 30 second interval between tabs. Now, just start the carousel, pop Chrome into full-screen mode, unplug the peripherals, and you've got a fully functional wall display!

4. Configure Remote Access

The setup is now functional, but it's cumbersome to have to plug a keyboard and mouse into the server every time you want to make a change to the display. Wouldn't it be nice to be able to make changes to the graphical session remotely? After some investigation, I found that this is possible using VNC—a software system to remotely control a computer by transmitting keyboard and mouse events over the wire.

VNC uses a client/server architecture, so it was a matter of finding a server for Ubuntu (where the display's Chrome instance runs from) and a client for my laptop's OSX. Turns out I didn't need to install any additional software.

4.1 Start desktop sharing on Ubuntu

As part of the ubuntu-desktop upgrade, a program called Dektop Sharing was installed on the server. This program appears to leverage Vino, a VNC server. Vino can also be manually installed. I opened Desktop Sharing and used the following configuration to start a VNC server:

Desktop Sharing configuration

4.2 Connect via Screen Sharing from OSX

Although there are VNC clients for most platforms, I was most interested in configuring my display from a Macbook Pro. I discovered that OSX (at least Yosemite) has a built-in program called Screen Sharing, which suports VNC:

Screen Sharing on OSX

To connect, I simply entered the hostname of the display server on my private network, was then prompted for the password I had set up in the previous step.

Initially I was getting the following error:

The software on the remote computer appears to be incompatible with this version of Screen Sharing.

This problem appears to be specific to Ubuntu + Screen Sharing, but I quickly found a perfect solution here, which involved some additional configuration on the server-side. Once I made the changes, I was able to connect from my laptop just fine:

Live Screen Sharing from OSX to Ubuntu

Above, I'm remoted into a graphical session on Ubuntu—from OSX—and configuring the Chrome tab carousel. Now I can customize my wall display from the comfort of my couch, or anywhere in the world once I VPN into the house.

5. Set up Motion Activation

Now that I can remotely control what shows up on the monitor, the setup is almost hands free. I don't want to leave the monitor powered on all the time, even though I purchased a more energy efficient one. I'll have to push the power button when I walk into the office, and again when I'm done. Or, I can set up motion activation to automate that process for me.

I've made some recent smart home upgrades, including a Nest and an August lock. So I was aware of the Belkin WeMo products, which include switches, motion detectors, and cameras in the smart home segment.

I was able to find a WeMo smart switch and motion dectector bundle on Amazon. I installed in the motion detector in a place where it could detect a wide array of motion in my office, and plugged the monitor through the switch. These devices were easily recognized through WiFi in the WeMo app:

Recognized devices in the WeMo app

In addition to being able to control the devices from the app, you can configure rules for them to interact:

Rules in the WeMo app

I set up the motion detector to power on the display, and power it off after 5 minutes of no motion. This way the setup conserves energy without me having to ever touch it.

Possible Improvements

It's been fun trying to find ways to stuff more things into a Chrome tab. One challenge I'm still working on is terminal-based information. For starters, I'm interested in the output of htop for my two home servers, just to get a quick glance at CPU, RAM, and swap usage for these machines. It was easy enough to find a terminal emulator Chrome extension called Secure Shell. This extension allowed me to simply SSH into the server and start htop.

GNU Screen and htop

To avoid having a tab for each server, I was even able to use GNU screen to split the session into multiple panes, and remote into the other box. This StackExchange answer provided a useful summary of commands for doing so.

The problem is that Tab Carousel's auto-refresh logs you out of the SSH session. Unfortunately you can't disable refresh on a per-tab basis, although there is a feature request for this on GitHub. Anyway, I'm interested in other peoples' approaches to wall display setups. Any suggestions are appreciated!

Caleb Sotelo

Caleb Sotelo

I'm a Software Engineer and Director of OpenX Labs. I try to write about software in a way that helps people truly understand it. Follow me @calebds.

View Comments