Intro
The Raspberry Pi computer is an awesome idea. Its performance is surprisingly good as well, as I will show below. Available packages? Not so impressive. I share some old X-windows tricks which will allow you to bring up the GUI without ever using the HDMI port.
The details
My Methodology
I was too lazy to set up an HDMI console plus keyboard and mouse. I’m more a server guy anyways so I’m more interested in what I can accomplish from a command prompt. And this also makes getting started that much easier. I had burned the Raspbian Wheezy image to a super-fast SD card (more on that below) the day that my Pi came in the mail. I attached power and ethernet, booted it up, guessed the IP it acquired by running some PINGs, did an ssh using the pi/raspberry user and Bingo! I was in. It couldn’t be easier. How I tested GUI applications without a console is explained further down below.
First Impressions
It feels fast.
Packages
Not much seems to be there by default – no apache, not many X utilities. There is a lame X browser called x-www-browser. I thought this is Debian, right? So we can just start downloading Debian packages, like Firefox. Wrong! It doesn’t work that way. There’s no Firefox, Safari, Chrome or Opera! It does come pre-loaded with curl, however, ha, ha.
No, the Raspbian FAQ explains why this is. It’s rather complicated. I guess the compiler works though I haven’t tested it yet. So I suppose you could compile packages from their source code.
The x-terminal-emulator is pretty decent, however.
If it comes with a web server, I didn’t notice. So I quickly checked for the availability of apache. It’s available. Then installed it:
> sudo apt-get install apache2
That worked out well. It installed it and the packages it depended on and even launched it, and it all felt fairly peppy. See the suggested fix further down if this gives you errors. The default HTML DOCROOT is /var/www. I accessed it locally:
> curl localhost
And a welcome message displayed. A good start.
Where’s the rest of my 16 GB SD card gone to?
Original disk layout:
pi@raspberrypi:~$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1804128 1492908 219572 88% /
/dev/root 1804128 1492908 219572 88% /
devtmpfs 224436 0 224436 0% /dev
tmpfs 44900 204 44696 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89780 0 89780 0% /run/shm
/dev/mmcblk0p1 57288 16872 40416 30% /boot |
pi@raspberrypi:~$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1804128 1492908 219572 88% /
/dev/root 1804128 1492908 219572 88% /
devtmpfs 224436 0 224436 0% /dev
tmpfs 44900 204 44696 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89780 0 89780 0% /run/shm
/dev/mmcblk0p1 57288 16872 40416 30% /boot
Layout after raspi-config:
pi@raspberrypi:~$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 15251960 1494852 12982544 11% /
/dev/root 15251960 1494852 12982544 11% /
devtmpfs 224436 0 224436 0% /dev
tmpfs 44900 196 44704 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89780 0 89780 0% /run/shm
/dev/mmcblk0p1 57288 16872 40416 30% /boot |
pi@raspberrypi:~$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 15251960 1494852 12982544 11% /
/dev/root 15251960 1494852 12982544 11% /
devtmpfs 224436 0 224436 0% /dev
tmpfs 44900 196 44704 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89780 0 89780 0% /run/shm
/dev/mmcblk0p1 57288 16872 40416 30% /boot
Whew! That was easy. All 16 GB accounted for and actively used.
Was it worth it to buy that UHS SD card?
I didn’t want a sluggish server, so I paid a couple bucks more and bought a 16 GB SD UHS (ultra high speed) card for my “disk,” not knowing whether or not the Pi had the muscle to put it to work.
A quick aside about SD cards
I did a quickie self-education on this topic. Most SD cards are rated by class, so a class 4 SD card can do 4 MB/sec I/O, and a class 10 card can do at least 10 MB/sec. Faster still are the UHS SD cards. My Sandisk, which only cost about $19, is rated for 45 MB/sec I/O. A great write-up on this topic specifically for Raspberry Pi is: Raspberry Pi SD Card Speed Test – Raspberry Pi
diskSpec.pl benchmark (higher numbers are better)
1333 file creation/destruction operations per second – Raspberry Pi with UHS SD card
6666 file creation/destruction operations per second – EBS volume on small image running CentOS in Amazon cloud
26000 file creation/destruction operations per second – high-end HP server (G7 DL380) running SLES 11
I think I provided the source for this simple Perl program I wrote, diskSpec.pl. It creates a file, writes a random number into it, then deletes it – that all counts as one operation. Here it is:
#!/usr/bin/perl
# DrJ, 1/2000
# Test disk I/O
$DIR = $ARGV[0];
chdir($DIR);
$t0 = time();
while(1) {
$ran = rand();
open(FILE,">$ran") || die "Cannot open file $ran in directory $DIR!!\n";
print FILE $ran;
close(FILE);
unlink($ran);
$cnt++;
if ($cnt % 20000 == 0) {
$rate = $cnt / (time() - $t0) ;
print "File creation/desctruction rate: $rate\n";
}
} |
#!/usr/bin/perl
# DrJ, 1/2000
# Test disk I/O
$DIR = $ARGV[0];
chdir($DIR);
$t0 = time();
while(1) {
$ran = rand();
open(FILE,">$ran") || die "Cannot open file $ran in directory $DIR!!\n";
print FILE $ran;
close(FILE);
unlink($ran);
$cnt++;
if ($cnt % 20000 == 0) {
$rate = $cnt / (time() - $t0) ;
print "File creation/desctruction rate: $rate\n";
}
}
DrJ 2017 Note: The notes below are historical and does not seem to work at all for the Raspberry Pi 3 loaded with NOOBS. In NOOBS you select your OS to install. You can’t ssh to it. I know. I just tried! Even after you install Raspbian Wheezy, you still can’t access it via ssh until you enable the ssh daemon with raspi-condfig.
How to get the GUI working without a console
I have this feeling that many people trying out the Pi won’t have the faintest idea how X windows works, unlike us Unix old-timers. It’s fun to put 20-year-old lessons to work on something new. Like I said I’m lazy and didn’t feel the need to set up an actual console to the thing. I used some old X features to allow me to launch specific X-windows applications that are pre-loaded on the device, and display them on my PC. How?
On a Windows PC you install Cygwin. Then launch the XWin Server. You ssh to your pi. How do you know its IP the first time? Guess! It picks it up via DHCP, so start PINGing around the range where your other devices are numbered. My PC is 192.168.5.12/24, my pi was 192.168.5.16. Maybe you have a bunch of devices responding to PING and are unsure which is which? Your MAC table is your friend. Here’s mine:
C:\Documents and Settings>arp -a
Interface: 192.168.5.12 --- 0x2
Internet Address Physical Address Type
192.168.5.1 00-14-f6-e0-c0-4c dynamic
192.168.5.16 b8-27-eb-dd-21-02 dynamic
192.168.5.99 00-90-a9-bb-3d-76 dynamic |
C:\Documents and Settings>arp -a
Interface: 192.168.5.12 --- 0x2
Internet Address Physical Address Type
192.168.5.1 00-14-f6-e0-c0-4c dynamic
192.168.5.16 b8-27-eb-dd-21-02 dynamic
192.168.5.99 00-90-a9-bb-3d-76 dynamic
arp displays the MAC table with the IP-to-physical (MAC) address correspondence. So most Pi’s will have a MAC address whose beginning is similar to b8-27-eb. A quick aside. Does the MAC address follow the board (SOC) or the SD Card? The board – I tested this with a friend’s SD Card.
You login with the pi/raspberry.
Then set your DISPLAY environment variable:
> export DISPLAY=192.168.5.12:0
Most of your X applications begin with the letter “x,” so enter
> x<tab><tab>
to see a display of available programs like this:
xapian-config xdg-screensaver xkbevd xpdf.real xxd
xarchiver xdg-settings xkbprint xprop xz
xargs xdpyinfo xkbvleds x-session-manager xzcat
xauth xdriinfo xkbwatch xsubpp xzcmp
xdg-desktop-icon xev xkill xtables-multi xzdiff
xdg-desktop-menu xfd xlsatoms x-terminal-emulator xzegrep
xdg-email xfontsel xlsclients xvinfo xzfgrep
xdg-icon-resource xinit xlsfonts x-window-manager xzgrep
xdg-mime xkbbell xmessage xwininfo xzless
xdg-open xkbcomp xpdf x-www-browser xzmore |
xapian-config xdg-screensaver xkbevd xpdf.real xxd
xarchiver xdg-settings xkbprint xprop xz
xargs xdpyinfo xkbvleds x-session-manager xzcat
xauth xdriinfo xkbwatch xsubpp xzcmp
xdg-desktop-icon xev xkill xtables-multi xzdiff
xdg-desktop-menu xfd xlsatoms x-terminal-emulator xzegrep
xdg-email xfontsel xlsclients xvinfo xzfgrep
xdg-icon-resource xinit xlsfonts x-window-manager xzgrep
xdg-mime xkbbell xmessage xwininfo xzless
xdg-open xkbcomp xpdf x-www-browser xzmore
Actually I don’t know how many of these are X. But at least a few are.
Start an xterm in Cygwin. In the xterm window, give permission to the Pi to use it as its Xserver:
> xhost +
Now in the Pi shell (ha, ha), type:
> x-terminal-emulator
and you should see the colorful terminal emulator on your PC in a few seconds. this is a true GUI application. You similarly launch the x-www-browser. Don’t forget to background your X-windows in the Pi shell:
<Ctrl-Z>
> bg
so you can use the one window to launch multiple X windows.
Another example the book Programming the Raspberry Pi has is the Python interactive development environment. I reasoned from the screen shots that idles3 would also be an X application – hey, they don’t have to start with the letter x – and indeed it is!
Want the whole ball of wax, a complete console? I just figured this one out by taking an educated guess:
> x-session-manager
and you will see the complete GUI on your PC! Cool, huh?
Want to get rid of the last thing you backgrounded, like, say, that x-session-mnager which has taken over your PC?! Type
> fg
<Ctrl-C>
and it will be killed.
How to get the GUI working without a console, Method 2
The above steps look a little daunting? Even I don’t want to install cygwin on my new PC. There is an alternative which can suffice for light usage.
On the Pi install a vnc server:
$ sudo apt-get install tightvncserver
Launch it:
$ vncserver
The first time only it will ask you to set up a password. Might as well make it raspberry like everything else we do on the Pi.
Then install a VNC client on your PC (Or Macbook). I use RealVNC.
Launch your VNC client and connect to your Pi’s IP address (which you need to know) + the display number, like this:
192.168.0.100:1
For a Pi at IP 192.168.0.100 in which the vncserver started display 1. Normally it will be display 1, but I guess it might be display 0.
Don’t launch vncserver more than once! You don’t want a bunch of those running and dragging on performance.
Anyways, that’s it! You should see the Pi’s GUI on your PC, but it might seem a wee bit small.
Setting a static IP
If you’re going to use the Pi more as a server like I am, I think it’s a good idea to give it a static IP. What I did is to edit /etc/network/interfaces. Mine now looks like this:
Nagios can be installed! That's pretty cool - it's a sophisticated network monitoring utility.
Get a decent browser
The web browsers that come with the Pi are horrible. Midori? Seriously? I found you can get Firefox, but the downside is that it’s sloooww. But at least it works. The secret is that it’s not called Firefox. Instead:
$ sudo apt-get install iceweasel
Yes, it’s iceweasel, not Firefox, in Debian Linux. Go figure.
My cool transparent case
I recommend to get a case. I got the one with the best reviews. It’s kind of expensive, about $20, but worth it. It’s practically a work-of-art. Clear, the PC board fits snugly. I put it in my pocket and showed it around to my friends, feeling it was well protected, and yet also a sight to behold the first time. I even has a thoughtful light guide so the LEDs look beautiful as their light follows the rectangular opening to open air. I never had this much fun in show-and-tell! I just pulled the Pi wrapped in its case from my shirt pocket and amazed those around me. So go ahead and splurge. Anyways some of the cheaper cases look just that. Here is what I bought:
Helping a friend out with his Pi
So I dutifully take my friend’s Pi home and offer to install a web server. What did I do wrong? Well, duh, I could have just taken his SD Card home and plugged it into my Pi case! That concept takes some getting used to! We all have the same hardware. Our SD cards – our disk – are what make one Pi different from another.
So I followed my own blog post to recall some things. This Pi also had a MAC address beginning with the same six characters.
The apache2 installation did not work out, however. What to do? Well, I eventually read the darn output from running it. It suggests to try this:
> sudo apt-get update
So I ran that, figuring it could do no harm. Then I re-ran
> sudo apt-get install apache2
and this time the install actually worked!
Reading a flash drive
I was curious to see if you could stick a flash drive in the thing and just read it. I didn’t think so since I thought it would be formatted for NTFS. But if you have the GUI running and bring up a file manager, I’ll be darned if it doesn’t just work. I noticed the drive is mounted as /media/Cruzer (my flash drive has the brand name Cruzer).
If you don’t launch the file manager, I think you can still work with it as follows:
$ sudo mkdir /media/Cruzer; sudo mount /dev/sda1 /media/Cruzer
Then when you’re all done and before you remove it:
$ sudo umount /media/Cruzer
So that’s pretty cool. You can create tar archives on the flash drive, plug it into someone else’s Pi and untar it, etc, just like on Windows.
Conclusion
Raspberry Pi is respectable as a computer. It will be a lot of fun to explore for the hobbyist.
References
Raspberry Pi SD Card Speed Test – Raspberry Pi – a great discussion of the various speeds of Micro SD cards and how to measure yours
Go here for my next project – using your Raspberry Pi to monitor your home’s power or Internet connection.
Interested in networking? A lot of useful tips can be found in this posting describing how to turn your Pi into a router.
Realvnc.com distributes realVNC viewers for various platforms.
How about a Raspberry Pi-driven digital photo frame? I describe an approach in this article.
Brief Nagios for Raspberry Pi writeup.