Raspberry Pi Direct Network Connection
Raspberry Pi Direct Network Connection
Before we power up our Raspberry Pi, we can have a look at the network settings
of the computer we are planning on
connecting to and determine if the address is automatically allocated or fixed.
WINDOWS INSTRUCTIONS:
From the Start Menu, run the Control Panel .
(Windows 7/Vista) Open Network and Sharing Center
ngs on the left side.
(Windows XP) Open
Network Connections
Find the item which relates to your Wired network adaptor (by default this i
s usually called Local Area
Connection ).
[Image Here]
Right-click on it and open Properties .
[Image Here]
Select the item which is called Internet Protocol (TCP/IP) or
sion 4 (TCP/IPv4) if there
are two (the other is Version 6), and open the Properties .
[Image Here]
set to
For network settings where the IP address is obtained automatically, use an addr
ess in the
range 169.254.X.X (169.254.0.0
169.254.255.255):
sudo ifconfig eth0 169.254.0.2
For network settings where the IP address is fixed, use an address which matches
the laptop/computers address
except the last number.
sudo ifconfig eth0 192.168.0.2
We can check this has worked by rechecking the IP address:
hostname -I
You will see we now have the IP address set.
We should now be able to ping
the laptop.
Find the laptop address (if it wasn t a fixed address) by returning to the lis
t of Network Adaptors in windows
and double clicking on the icon to see it s Status (don t worry about the warning of
mited or no connection ).
Then select the Support
li
tab and then Details . You should see the laptop s IP address.
ping 169.254.0.1
We should get lots of responses (the laptop is responding the Raspberry Pi throu
gh the network cable)! Ctrl+C to
stop that. (If you didn t then double check your connections and the IP addresses
you are using).
As mentioned before, the new IP address will be lost when we reboot, so we need
to ensure it is set every time we
boot (or at least every time we want it to be when we boot).
To do that we can edit the cmdline.txt
of the SD Card.
You can now reboot the Raspberry Pi (sudo reboot), and next time the IP addr
ess will be automatically set.
To change between configurations, simply use the following commands (just re
member to
edit /boot/cmdline.direct if you need to change the IP address in future).
sudo cp /boot/cmdline.normal /boot/cmdline.txt
sudo cp /boot/cmdline.direct /boot/cmdline.txt
SUMMARY
Now you should be able to do most of the things you would normally do when conne
cted to a network. It is even
possible to use this direct network link to share your laptop/computer s internet
connection (if it is connected
via Wifi for example), although I ve not needed to do this yet.
One VERY useful thing to do is to set up Putty
terminal and graphical
programs directly from your laptop/computer.
and
Xming
[Image Here]
See the main Guide to Remote Connections for links for how to set-up VNC and share
d folders, and X-11 on other
computers.
STEP 3 (recommended)
I am assuming you are using the latest version of Raspbian which has SSH and X11
Forwarding enabled by default (if
not see the bottom of this post to enable them if things don t work).
1. Install and run a X-Windows server on your computer
Download and run http://sourceforge.net/projects/xming/ from the Xming site.
Follow the installation, including installing Putty
ou can also download Putty
separately from http://www.putty.org/
[Image Here]
3. Enter the Raspberry Pi s IP Address
[Image Here]
Enter the IP Address of the Raspberry Pi in the Session settings above (you may
also find that you can use the
Raspberry Pi s hostname here instead (default: raspberrypi)).
Save the setting using a suitable name (RaspberryPiDirect) and press open to conne
ct to your Raspberry Pi. You
will likely get a warning pop-up stating you haven t connected to the computer bef
ore (allows you to check you have
everything right before continuing).
All being well, you should be greeted with a prompt for your username and passwo
rd (remember the defaults are pi
and raspberry).
4. Using X11 and Xming
Ensure you have Xming running, by starting the Xming program from your computers
start menu and then in the
terminal window, type a program which normally runs within the Raspberry Pi desk
top (such as leafpad or scratch ).
Wait a little while and the program should appear on your computers desktop (if
you get an error you have probably
forgotten to start Xming , so run it and try again).
If you want to run an X program, but still be able to use the same terminal
console for other stuff, you can
run the command in the background with &:
i.e. leafpad &
Just remember that the more programs you run, the slower everything will get. Y
ou can switch to the background
program by typing fg , check for background jobs with bg .
You can even run a full desktop session through X-11, although it isn t partic
ularly user-friendly and VNC will
produce better results. To do this you have to use lxsession instead of startx .
If you get the following error (or similar) when running PyGame or Tkinter s
cripts:
_tkinter.TclError: couldn't connect to display "localhost:10.0"
Use the fix below:
cd ~
sudo cp .Xauthority ~root/
More details and links are in the main Guide to Remote Connections.
Additional Information / Troubleshooting
To switch on (or off) SSH you can access raspi config (just type
onfig from the terminal) and
sudo raspi-c
select SSH in the menu (it seems like SSH is already enabled by default for some
distros).
[Image Here]
Enable/Disable SSH via Raspi-config
Ensure X-11 forwarding is enabled on the Raspberry Pi (again, a lot of distr
os now have this enabled by default).
Use nano with the following command:
sudo nano /etc/ssh/sshd_config
Look for a line in the /etc/ssh/sshd_config file which controls X11Forwarding an
d ensure it says (with no # before it):
X11Forwarding yes
Save if required (ctrl+x,Y, enter), and reboot:
sudo reboot
Using cmdline.txt for Other Network Settings
The ip= command-line option allows us to specify the network settings when the ke
rnel is loaded (the core of the
linux system), it s full options are in the following format (allows us to set eve
ry aspect of the network if
required):
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
More details of what each part means and other kernel options is detailed in sec
tion 2 of this kernel documentation.
Easy Changing with a Simple Script:
The following script will prompt to allow you to change your settings (just type
./switchip.sh to run).
To create the file, you can use nano:
nano switchip.sh
Just press ctrl+x and y, to save and exit when you are done.
switchip.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
#Function to swap to Direct IP Address
direct () { sudo cp /boot/cmdline.direct /boot/cmdline.txt;}
#Function to swap to Normal Automatic IP Address
normal () { sudo cp /boot/cmdline.normal /boot/cmdline.txt;}
# Menu using case-esac
echo "Select IP Address? Use Direct or Auto or Keep (d/a/-)?"
read answer
case $answer in
d|D) echo Use Direct IP;direct;;
a|A) echo Use Auto IP;normal;;
*) echo Keep - No Change;;
esac
echo cmdline.txt
echo ____________
cat /boot/cmdline.txt
You could even extend this to allow you to setup fixed IP addresses for differen
t networks, so you can always be
sure you can find your IP and connect correctly.
WHAT IS an IP Address / Hostnames / Pinging / Subnets?
An IP Address is like your phone number or post code, it simply allows other com
puters to find that particular
computer in the network and ensure any messages it sends goes to that one in par
ticular.
Often, IP Address s can be replaced with hostname s so that we can ask for a specifi
c computer without knowing
all the numbers (like the contacts list on your phone, the computer looks up the
name and uses the number for
you). For instance, http://www.google.com, is a hostname, where it s IP address i
s 173.194.45.49 (probably
depending on where you are). We can ping the address using the following command,
which simply sends some
short messages to see if there is another computer on the other side to respond
to them.
ping www.google.com
or:
ping 173.194.45.49
Subnets:
Networks use subnets to help handle the fact that there could be a HUGE number o
f computers on a network (like
the internet) and it would be impossible for a computer to listen to and respond
to any computer in the address
range 0.0.0.0 to 255.255.255.255.
To handle this, networks will use a subnet mask, this ensures that a computer on
ly needs to respond to
computers with are within the same SUBSET, which is defined by the SUBNET MASK s
etting.
The mask is a series of flags which defines which range of addresses the compute
r will respond to (by
filtering out any which are not within the allowed range):
255.255.255.0
Means it will respond to computers which have IP addressing matching at least th
e 3 first numbers. So a
computer with an address of 192.168.1.90 and subnet mask of 255.255.255.0 will o
nly talk to other computers
with addresses in the range 192.168.1.0-192.168.1.255 (except 90 of course!). L
arge networks often use SUBNETs
to split up larger networks into sections so that they run more efficiently.
Note: You will not be able to set the SUBNET MASK to wider than 255.0.0.0. The
Raspberry Pi defaults to a
subnet mask of 255.255.0.0, which is perfect for most situations.
TROUBLE-SHOOTING:
Steps to check:
1. Check the IP address which get set on both machines (both should be in range
169.254.x.x).
On RPI use one of the following commands:
hostname -I
ifconfig
On PC use the following (or look it up from the Network & Sharing Center and loo
k at the adaptor properties):
ipconfig
If this fails, check the cmdline.txt file is right/cable connected etc. You
can use the following to force
the IP address on the RPI (for testing the rest
but this won t be set next time yo
u reboot):
sudo ifconfig eth0 169.254.0.2
Check you can ping each of the addresses from the other computer (where 169.
254.0.xxx should match the
computer you want to talk to). Test both directions.
ping 169.254.0.xxx
If this fails, check PC s firewall and disable wifi (sometimes the ping comman
d will try using the PC s
wifi instead)
Check you can connect via SSH (using putty)
- This should work if you can already ping the other machine (it is unlikely to
work if you can t ping it).