Build a simple kitchen terminal out of an old laptop screen and Raspberry Pi

On some occasion, it is practical to have a terminal in the kitchen, mainly to check on recipes. While a phone screen is not that great, a tablet would do. I do not have any tablet and I am not that fond of systems readily available on tablets. But I do have a few old laptops around plus a Raspberry Pi B+.

Hardware

The following RasPi.TV‘s video explains it all:

Quite straightforward, you unmount and identify your screen. So for my Dell Latitude C640, I got a Samsung LTN141X8-L02 14,1″ screen for which I easily found a controller board kit on ebay for 21,5 €.IMG_20170122_115114.jpg

Here’s the back of the said screen, with the original inverter board still attached. The kit will include another one.

Once acquired, there is not much to think about, everything just have to be plugged where it belongs according to the seller docs:

Q01415750-5.jpg

Obviously, you need to buy also a HDMI cable and a power adapter power adapter (12V, 4A).

IMG_20170301_183541.jpg

Obviously, as it is no tablet, it requires peripherals. I opted for a slim USB wireless keyboard with trackpad and some USB powered stereo speaker. These devices will be powered by the Raspberry Pi (a phone charger can be plugged to the keyboard to recharge it).

Finally, the charger and the Raspberry are plugged onto a power socket with 5V USB. It will be used to put on/off the whole.

Afterwards, I put the screen within a cheap photo frame and fixed the rest on some board.

That frame looks too fragile, though, I would recommend to build a proper one instead.

Software

1/ Raspbian desktop

I first tried some default Raspbian. Epiphany web browser is as bad as you cannot even set a default webpage without editing the .desktop files. And once it is done, it crashes on mediawiki standard page layout. Raspbian also fails to properly open videos (OMX sprout error messages, even with lot of memory attributed). Not convincing.

2/ Kodi media player

Afterwards, I went for LibreElec along with Kodi. Surprisingly, it loads movies with no problem, the interface is quite neat in general and the control with a distant web browser (port 8080 by default) is a plus. As media player, it would be nice.

IMG_20170317_145135.jpg

But it is not perfect: Kodi does not provide any proper web browser, even lacking features. They only provide some cheezy sort of said text web browser. Sort of because it is no lynx/links/elinks, it is just a strange graphical interface with low HTML layout capabilities – but, kudos, it does not crash on mediawiki, yay! Nonetheless, that is quite a blocker issue for me. Even a media player, in my opinion, should have integrated web browser. It is not a challenge to reuse gecko/khtml, whatever, to make so.

IMG_20170317_145231.jpg

3/ (tiger) VNC on top of Raspbian

So I went back on Raspbian. I found out that netsurf works fine to browse mediawiki. So just that satisfies the first requirement.

Instead of expecting to be able to finely setup Raspbian for video website, etc, I decided it might just be smarter to really think of this as terminal and so, to show some window from another computer session.

On an Devuan desktop, it is just enough to get tigervnc-scraping-server, generate a host file (for IP based control):

mkdir .vnc
echo "+IP_OF_YOUR_RASPBIAN" > .vnc/hosts

then to start it whenever you want to share your screen:

x0vncserver -HostsFile=$HOME/.vnc/hosts -SecurityTypes=None

Windows version is configured in a similar fashion.

Raspbian provides a VNC viewer graphical interface that will allow you to connect and you’ll immediately notice that TigerVNC is damned efficient and play with no problem youtube video, etc.

Ok, but VNC, while much more convenient than RDP to setup, does not care to sound forwarding.

I give some tries to PulseAudio RTP capabilities: it fails with errors like [alsa-sink-bcm2835 ALSA] module-rtp-recv.c: Sample rates too different, not adjusting (44100 vs. 90522) and when I tried to document myself about it, I found that this PulseAudio feature was bugged, flooding the network with UDP packets, a bug found in 2009 and still existing in 2017. Gosh, a feature bugged since near to a decade: back to why I try to keep away from systemd and anything made by the same crowd.

I ended up streaming audio with vlc,

cvlc -vvv pulse://`pactl list | grep "Monitor Source" | cut --delimiter ":" -f 2 | tr -d [:blank:]` --sout "#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:9999/pc.mp3}" &

simply played on the Raspbian with:

mpg123 http://hostname:9999/pc.mp3

I has been summarized in a script to be run on the distant host side. I considered stream both audio and video with vlc but it  is convenient to be able to move around with VNC. This will require further testing.

Lightest terminal: urxvt in daemon/client mode?

Thinkpad 600EI still use an old IBM Thinkpad 600E that I bought second hand a decade ago.

It still works. Well, the battery is dead, I added RAM as much as the motherboard can handle (2x 128 MB DIMM modules + 50 MB onboard module – something like that) and I changed, several years ago, the hard-drive, replacing the stock one with a more recent rescued from a short-lived Acer Aspire that belonged to my brother.

It still works. Sure, it is subject to bugs that will probably never get fixed, but none that you can’t work around.

It still works. But… But it is not a very fast computer however. It is not really that it runs slower than in the past. It is not really that we get used to faster computer. The fact is that software developers have not much reasons to write code light enough to run smoothly on this old piece of junk. So they don’t, most of them.

You end up running obsolete software or be very glad to find pieces of software like Midori (lightweight webbrowser based on WebKit).

Yes, yes, I will get to the point.

The point is whatever you can get can make a difference. I tried to run dash instead of bash. Bleua. That’s fine for scripts. But I cannot live with no completion at all. So I stayed with the Bourne Again Shell. But I had to cut of most of completions (how now, the endless scripts in /etc/bash_completion.d) to avoid waiting hours to get a shell to start.

So here comes urxvt. urxvt is fast. Like aterm. But it supports UTF-8. And it matters.
But the really nice thing is that urvxt includes a daemon/client mode. You just have to start the daemon at the begin of the X session, for instand in having the following in ~/.xsession :

#!/bin/dash
# terminal daemon
urxvtd -q -f -o
# desktop
export BROWSER=midori
wmaker

Then, everytime you need a terminal, call uxrvtc instead of urxvt.

You might also want to add in ~/.Xdefaults something like:

Rxvt*background: gray23
Rxvt*foreground: white
Rxvt*troughColor: gray33
Rxvt*scrollColor: gray13
Rxvt*scrollstyle: plain

Rxvt*visualBell: true
Rxvt*saveLines: 2000
Rxvt*urlLauncher: midori
Rxvt*scrollTtyOutput: false
Rxvt*scrollWithBuffer: true

Rxvt*color12: SkyBlue2

There are no real-life drawbacks that I encountered so far.

March 9, 2010 Update: After reading interesting test about terms perfs (in french) which shows how slow xterm is, how fast konsole is, but how fast and with less memory usage urxvt is, I even started using urxvt on my usual workstation that runs KDE with the following .Xdefaults (here, we use transparency and font anti-aliasing, as the hardware can obviously handle it)

urxvt*visualBell: true
urxvt*saveLines: 12000
urxvt*urlLauncher: konqueror
urxvt*scrollTtyOutput: false
urxvt*scrollWithBuffer: true

urxvt*depth: 32
urxvt*background: rgba:0000/0000/0000/dddd
urxvt*borderColor: rgba:0000/0000/0000/dddd
urxvt*foreground: white

urxvt*troughColor: gray33
urxvt*scrollColor: rgba:0000/0000/0000/0fff
urxvt*scrollstyle: plain
urxvt*scrollBar_right: true

urxvt*font: xft:Bitstream Vera Sans Mono:style=Regular:pixelsize=13:antialias=true
urxvt*color12: SkyBlue2

I even added the following as /etc/X11/Xsession.d/74urxvtd_start


# In order to activate urxvt daemon at X session launch
# simply place use-urxvtd into your /etc/X11/Xsession.options file

URXVTD=/usr/bin/urxvtd
URXVTD_OPTIONS="-q -f -o"

if grep -qs ^use-urxvtd "$OPTIONFILE"; then
if [ -x "$URXVTD" ]; then
$URXVTD $URXVTD_OPTIONS
fi
fi

and added the string use-urxvtd in /etc/X11/Xsession.options but that’s a bit overkill as debian already provides urxvtcd that fires up urxvtc while making sure urxwtd is running.