[USB-ETH] Connect GameShell to Linux PC!

network
usb
ssh
linux
ethernet

#1

I try out a lot of stuff on the GameShell, so I flash the image over and over again.

Setting up the Wi-Fi every time on the GameShell is a pain.
So, I decided to ELIMINATE WI-FI ALTOGETHER! :smiley:

This tutorial is about fully utilizing your GNU/Linux PC, i.e.:

  • USB: List your GameShell as a USB device on your GNU/Linux PC!
  • SSH: Connect to your GameShell from your GNU/Linux PC!
  • Internet: Provide internet access to your GameShell from your GNU/Linux PC!
  • Wired: Never need Wi-Fi ever!

Here is what I did step by step:

USB card:

  1. [Optional] Flash a clean image on your usb_device (e.g. /dev/sdX).
sudo dd bs=4M if=clockworkos_v0.1.img of=${usb_device} status=progress oflag=sync
  1. Replace the file uImage on the boot partition.

  2. Find out the ip_of_your_router connected to the internet.

  3. On your CLOCKWORKPI partition, append to /etc/network/interfaces (using sudo):

allow-hotplug usb0
auto usb0
iface usb0 inet static
address 10.0.0.2
netmask 255.255.255.0
gateway 10.0.0.1
dns-nameservers ${ip_of_your_router}

This will add the GameShell to a new 10.x.x.x network with a static IP once it is connected!

  1. On your CLOCKWORKPI partition, replace line 330 of /home/cpi/apps/launcher/Menu/GameShell/10_Settings/Update/__init__.py:
             if is_wifi_connected_now():

by:

            if True:

This will enable you to use β€˜Update’ from the GameShell menu using USB later on!


GNU/Linux PC:

  1. Now turn on your GameShell (with USB card in it) and hook it to your PC.

  2. Check if the GameShell shows up as a USB device:

$ lsusb
Bus 001 Device 007: ID 0525:a4a2 Netchip Technology, Inc. Linux-USB Ethernet/RNDIS Gadget
  1. Find the internet_interface and gameshell_interface (e.g. eth0 and enps3s0):
$ ip address
1: lo: ...
2: eth0: ...
3: enp03s0: ...
  1. Create new network rules using your internet_interface and gameshell_interface:
sudo iptables -t nat -A POSTROUTING -o ${internet_interface} -j MASQUERADE
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i ${gameshell_interface} -o ${internet_interface} -j ACCEPT
  1. Assign a static IP address to your gameshell_interface. The ip 10.0.0.1 should match gateway of step 4!
sudo ip link set up dev ${gameshell_interface}
sudo ip addr add 10.0.0.1/24 dev ${gameshell_interface}
  1. Enable internet forwarding:
sudo sysctl net.ipv4.ip_forward=1
  1. Login! The ip 10.0.0.2 should match address of step 4!
ssh cpi@10.0.0.2
  1. Test if your GameShell has internet:
ping clockworkpi.com

Without ever turning Wi-Fi on you should have full access to your GameShell including internet!


Notes:

  • Tested on Ubuntu and Arch.
  • step 9 and 11 will reset after reboot.
  • step 10 will reset after unplugging.
  • Make sure /etc/resolv.conf on the GS has ip_of_your_router for DNS.

Search online how to make those steps permanent (or make a script).

Good luck! :slight_smile:


Connect directly to GameShell (without router)