Build Guide

Step-by-step assembly from unboxing to first SSH session. This guide assumes you've read the other sections and have all components ready.

Build Checklist

Before starting, verify you have everything:

components_checklist.txt
# HARDWARE
[ ] Sony Xperia 10 V (XQ-DC54)
[ ] Compact mechanical keyboard (60% or similar)
[ ] USB-C hub or OTG adapter
[ ] USB-C cable (for keyboard, if wired)
[ ] Screen protector (recommended)

# CHASSIS (choose one)
[ ] 3D printed parts + hardware
    [ ] Printed shells (phone mount, keyboard tray)
    [ ] M3 screws and heat-set inserts
    [ ] Magnets (if using magnetic closure)
    
[ ] CNC wood parts + hardware
    [ ] Machined wood shells
    [ ] Laptop hinges (×2)
    [ ] Neodymium magnets (8×)
    [ ] M3/M4 screws for hinges
    [ ] Wood finish (oil/lacquer)

# SOFTWARE/ACCOUNTS
[ ] Jolla account
[ ] Sailfish X licence purchased
[ ] Sailfish OS image downloaded
[ ] Sony AOSP binaries downloaded
[ ] Bootloader unlock code from Sony
[ ] Anthropic account (for Claude Code)
[ ] Bastion server ready (see bastion.html)
[ ] Tailscale account (optional but recommended)

# TOOLS
[ ] Computer for flashing (Windows/Mac/Linux)
[ ] USB-C data cable (phone to computer)
[ ] Screwdrivers (for chassis assembly)
[ ] Soldering iron (for heat-set inserts, if 3D printed)

Phase 1: Phone Preparation

1

Initial Android Setup

Unbox the Xperia 10 V and complete basic Android setup. Insert your SIM card and verify:

  • Phone calls work (make a test call)
  • Mobile data works
  • WiFi connects properly
  • Android version is 13 or 14 (Settings → About Phone)

If Android is older, update via Settings → System → Software update before proceeding.

2

Note Down IMEI

Go to Settings → About Phone and write down your IMEI number. You'll need this for the bootloader unlock code. If there are two IMEI numbers (dual SIM), use IMEI #1.

3

Apply Screen Protector

Apply a tempered glass screen protector now, before the chassis makes it awkward. Clean the screen thoroughly first. This protects during assembly and daily use.

Phase 2: Flash Sailfish OS

4

Enable Developer Options

On the phone:

  1. Settings → About Phone
  2. Tap "Build number" 7 times
  3. Go back to Settings → System → Developer options
  4. Enable "OEM unlocking"
  5. Enable "USB debugging"
5

Get Bootloader Unlock Code

Visit Sony Developer World:

  1. Select "Xperia 10 V"
  2. Enter your IMEI
  3. Accept terms
  4. Copy the unlock code provided
Warranty Warning

Unlocking the bootloader voids Sony's warranty and permanently trips the DRM flag, which disables some camera processing features. This is irreversible.

6

Prepare Flash Files

On your computer:

  1. Download Sailfish OS image from Jolla Shop (requires login)
  2. Extract to a folder (e.g., ~/sailfish)
  3. Download Sony binaries: SW_binaries_for_Xperia_Android_14_5.4_v3a_zambezi.zip
  4. Extract and copy the .img file to the Sailfish folder
7

Flash Sailfish OS

  1. Power off the phone completely
  2. Hold Volume Up and connect USB cable
  3. Wait for blue LED (if green, disconnect and retry)
  4. On computer, navigate to Sailfish folder
  5. Run the flash script:
    # Linux/Mac
    ./flash.sh
    
    # Windows
    flash-on-windows.bat
    
  6. Follow prompts, enter unlock code when asked
  7. Wait for flashing to complete (~5 minutes)
8

Complete Sailfish Setup

  1. Disconnect USB and reboot the phone
  2. You'll see the unlocked bootloader warning (ignore it)
  3. Sailfish OS logo appears
  4. Follow the setup wizard
  5. Sign in with your Jolla account to enable Android support
  6. Restart the phone once to activate all services

Phase 3: Configure Sailfish

9

Enable Developer Mode

  1. Settings → Developer tools → Developer mode
  2. Set a password for remote SSH access
  3. Terminal app appears in your app drawer
10

Install Essential Packages

Open Terminal and run:

devel-su
pkcon refresh
pkcon install openssh-clients
zypper install mosh tmux vim git curl
11

Generate SSH Keys

ssh-keygen -t ed25519 -C "cyberdeck@sailfish"
cat ~/.ssh/id_ed25519.pub
# Copy this public key - you'll add it to your bastion
12

Configure SSH

Create ~/.ssh/config:

vim ~/.ssh/config

Host bastion
    HostName 100.x.x.x    # Your bastion's Tailscale IP
    User your-username
    IdentityFile ~/.ssh/id_ed25519
13

Install Tailscale (Optional)

Check Chum repository for Tailscale package, or install manually. Authenticate to join your Tailnet.

Phase 4: Bastion Setup

14

Prepare Bastion Server

On your bastion server (see Bastion Server for details):

  • Install and configure SSH, tmux, mosh
  • Add your cyberdeck's public key to ~/.ssh/authorized_keys
  • Install Tailscale and join your Tailnet
  • Install Claude Code
15

Test Connection

From the Xperia (before chassis assembly):

# Test SSH
ssh bastion

# Test mosh
mosh bastion

# Test full workflow
mosh bastion -- tmux new -s test
claude
# Ctrl-a d to detach

If everything connects, the software stack is ready. Time to build the hardware.

Phase 5: Chassis Assembly

Choose Your Path

Follow either the 3D printed or CNC wood assembly steps below, depending on your chassis choice.

Option A: 3D Printed Chassis

16a

Print Parts

  • Print phone mount shell (PETG recommended)
  • Print keyboard tray shell
  • Print hinge components (if not using hardware hinges)
  • Use settings from Chassis Design page
17a

Install Hardware

  1. Install heat-set inserts with soldering iron
  2. Press-fit or glue magnets (check polarity!)
  3. Test fit phone and keyboard before final assembly
  4. Assemble hinge mechanism
  5. Route USB cable through channel

Option B: CNC Wood Chassis

16b

Machine Parts

  • CNC both shells from wood stock
  • Sand progressively: 120 → 180 → 240 → 320 grit
  • Apply finish (Danish oil, tung oil, or lacquer)
  • Allow finish to fully cure (24-48 hours)
17b

Install Hardware

  1. Install threaded inserts for hinge screws (if using)
  2. Epoxy magnets into pockets — test polarity first!
  3. Mount laptop hinges to both shells
  4. Test open/close action, adjust if needed
  5. Route and secure USB cable

Phase 6: Final Assembly

18

Install Components

  1. Place keyboard in tray, secure if needed
  2. Connect USB cable to keyboard
  3. Position USB hub in its pocket/mount
  4. Place phone in mount
  5. Connect hub to phone
  6. Verify keyboard works
19

Test Everything

# Open cyberdeck in typing position
# Open Terminal app on phone

# Test keyboard input
echo "Hello from cyberdeck"

# Connect to bastion
mosh bastion -- tmux attach -t main

# Start Claude Code
claude

# Congratulations! 🎉

Troubleshooting

Keyboard Not Recognised

SSH Connection Fails

Mosh Won't Connect

Chassis Fit Issues

What's Next?

Your Sailfish Cyberdeck is complete! Some ideas for further development: