I love coding and traveling. Naturally, I wanted to explore how to integrate code deeper into my travel experience, be it in city or around the world.
Thanks to the recent advancements on the GearVR front, this is now possible with a bit of nerdery.
- Ultra Portable (wireless, 2-4 battery life)
- Support for optional Wifi and offline transition without lag (Planes, Trains and Automobiles)
- Low Latency (or at least consistent latency to avoid the ‘sickness’)
- Minimal ergonomics when traveling (crammed in a cab or plane seat)
- Impress the sh*t out of the general public, making them feel out-of-touch and scared of the cognitively super-evoled millennial techno-nerds
- GearVR (Innovator Edition)
- GearVR compatible phone (Galaxy S6)
- Laptop with AP Capable wireless Adapter (macbook Air)
- USB Wifi adapter (edimax)
- Bluetooth Keyboard (Apple Magic Keyboard)
Tunes (for inspirado):
Use the USB Wifi adapter to host a Wifi Hotspot with Virtual DNS
We want to host a dedicated Wifi connection to establish a channel of communication between the GearVR and laptop.
This will assure low/consistent latency when streaming the desktop Environment into the GearVR with VNC the protocol.
Using the create_ap tool, create a HotSpot with internet sharing with cascading Wifi interfaces:
sudo create_ap wlp0s20u1 wlp2s0b1 "vr_wifi_hotspot" "my_password" &
This will allow the laptop to maintain a dedicated native connection to standard Wifi networks and the connection will be shared with our new subnetwork.
Additionally, it allows the subnetwork to work in isolation, so we can still jam offline (see goals)
ifconfigto get the IP associated with your laptop on the new software subnetwork:
wlp0s20u1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.12.1 netmask 255.255.255.0 broadcast 192.168.12.255 inet6 fe80::76da:38ff:fe59:d034 prefixlen 64 scopeid 0x20<link> ether 74:da:38:59:d0:34 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33 bytes 6962 (6.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp2s0b1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.236.188.250 netmask 255.224.0.0 broadcast 10.255.255.255 inet6 fe80::9694:26ff:fe04:de6e prefixlen 64 scopeid 0x20<link> ether 94:94:26:04:de:6e txqueuelen 1000 (Ethernet) RX packets 57433 bytes 55012835 (52.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 52602 bytes 9910754 (9.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Enable VNC streaming from laptop display
Broadcast VNC on the primary X display for consumption on subnet by the GearVR
x0vncserver -display :0 -passwordfile ~/.vnc/passwd
Recommended to provide a VNC password but this could be argued as unnecessary if you protect the AP HotSpot well.
Pair Bluetooth Devices
For sure, you will want to pair a bluetooth keyboard since VR Keyboard layouts stink.
bluetoothCtlutility works well for this in Arch; use what makes sense for this.
Optionally pair a bluetooth mouse, but I encourage you to use the directive-focus pointer provided in VNC Remote Desktop Client that works well with GearVR’s headset touch sensor.
Disable Laptop Lid Shut Suspend
After we have our desktop broadcasting over a local HotSpot, we want to tuck the laptop out-of-site and keep it rolling.
This can be achieved by altering the login.d settings in Arch. Just check your OS power management settings.
Additionally, I always set an idle time to avoid endless laptop uptime after ceasing GearVR engagement.
# /etc/systemd/logind HandleLidSwitch=ignore IdleAction=suspend IdleActionSec=5min
Hide laptop in thin nerd-bag
Wifi range is means you can drop your laptop in a bag and tuck under a seat.
I have even had the actual laptop in the trunk of an uber and still had really wonderfully low VNC latency.
Warning: increased latency if using VR in/near nuclear reactors
Disable the GearVR Application Service
GearVR has a default sevice running that allows activation/suspend of the device based on the proximity sensor in the visor.
Install Samsung Package Disabler Pro and disable service
Gear VR Service (com.samsung.android.hmt.vrsvc)
This will allow you to run the stereoscopic apps (Cardboard included) without the GearVR OS kickin’
Connect to the Virtual HotSpot (AP) hosted from laptop
Use the standard Wifi interface on the Galaxy to connect to your laptop hosted Virtual HotSpot.
This will assign a software managed subnet address that will be in the same range as your inner-network laptop address.
From this connection, we have a dedicated safe channel with consistent through-put between the GearVR and laptop.
Setup the VNC client
Install the VNC Remote Desktop Client and configure the folowing in settings:
Screen to lens distance=
Vertical distance to lense center=
Enable video pass-through
I recommend enabling Camera preview so you can feed your ego by watching the crowd respond to your VR headset’s glean.
Select size of the Camera preview=
Opt for VR managed cursor
If you decided to pair your own mouse, skip this.
Otherwise, VNC Viewer adheres to the common UX of directed-focus selection. That is, you look at something you want to engage with and use the tap sensor to select.
Enable local cursor=
The Caveats here are lack of Drag-selection and right-click. Both possible with keyboard configurations in X.
Connect to Laptop VNC Server
Add the laptop VNC server into the VNC Viewer app by using the virtual HotSpot Subnet address to the laptop. Remember, we don’t want this communication to go over external routers since we can’t assure consistent latency.
You can optionally provide the VNC password during this setup.
This effectively creates a low-latency, 100% portable Virtual Desktop that can accelerate to public Wifi networks as you travel.
IMO, this is even better than a tethered Rift DK2 experience because it is wireless.